Script request thread

For scripts to aid with computation or simulation in cellular automata.
Post Reply
User avatar
dvgrn
Moderator
Posts: 10612
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Script request thread

Post by dvgrn » May 15th, 2017, 9:39 pm

Saka wrote:I would like a script that makes a random nt rule without b2a. I tried this once but had lots of problems so I abandoned it.
Could "random" be taken to mean equal likelihood of ON or OFF output, for each of the isotropic neighbor patterns, for birth and survival conditions? And do you need the rule string to be in canonical form?

-- I suppose Golly 2.9b1 will give you canonical form anyway, so you just have to specify the rule in any valid way. How about this?

Code: Select all

import golly as g
import random

prob = 0.5

isotropiclistB = ["0",
                 "1c", "1e",
                 "2c", "2e", "2k", "2a", "2i", "2n",
                 "3c", "3e", "3k", "3a", "3i", "3n", "3y", "3q", "3j", "3r",
                 "4c", "4e", "4k", "4a", "4i", "4n", "4y", "4q", "4j", "4r", "4t", "4w", "4z",
                 "5c", "5e", "5k", "5a", "5i", "5n", "5y", "5q", "5j", "5r",
                 "6c", "6e", "6k", "6a", "6i", "6n",
                 "7c", "7e",
                 "8"]
isotropiclistS = isotropiclistB[:]

isotropiclistB.remove("2a") # Saka's instructions...
isotropicsetB.remove("0")

rulestr ="B"
for i in isotropiclistB:
  if random.random()>prob: rulestr+=i
rulestr+="/S"
for i in isotropiclistS:
  if random.random()>prob: rulestr+=i
  
g.setrule(rulestr)
# g.setclipstr("Original form of rule: "+rulestr+"/nCanonical form:"+g.getrule())
Seems to make rules that explode in various ways. If you want to take out the B1 birth conditions also, just add a couple more isotropiclistB.remove() lines.

drc
Posts: 1664
Joined: December 3rd, 2015, 4:11 pm

Re: Script request thread

Post by drc » May 16th, 2017, 10:29 pm

what if there was a script like ntzfind but with oscillators instead

User avatar
_zM
Posts: 186
Joined: June 26th, 2016, 3:07 pm

Re: Script request thread

Post by _zM » May 18th, 2017, 9:47 am

dvgrn wrote:
Saka wrote:I would like a script that makes a random nt rule without b2a. I tried this once but had lots of problems so I abandoned it.
Could "random" be taken to mean equal likelihood of ON or OFF output, for each of the isotropic neighbor patterns, for birth and survival conditions? And do you need the rule string to be in canonical form?

-- I suppose Golly 2.9b1 will give you canonical form anyway, so you just have to specify the rule in any valid way. How about this?

Code: Select all

import golly as g
import random

prob = 0.5

isotropiclistB = ["0",
                 "1c", "1e",
                 "2c", "2e", "2k", "2a", "2i", "2n",
                 "3c", "3e", "3k", "3a", "3i", "3n", "3y", "3q", "3j", "3r",
                 "4c", "4e", "4k", "4a", "4i", "4n", "4y", "4q", "4j", "4r", "4t", "4w", "4z",
                 "5c", "5e", "5k", "5a", "5i", "5n", "5y", "5q", "5j", "5r",
                 "6c", "6e", "6k", "6a", "6i", "6n",
                 "7c", "7e",
                 "8"]
isotropiclistS = isotropiclistB[:]

isotropiclistB.remove("2a") # Saka's instructions...

rulestr ="B"
for i in isotropiclistB:
  if random.random()>prob: rulestr+=i
rulestr+="/S"
for i in isotropiclistS:
  if random.random()>prob: rulestr+=i
  
g.setrule(rulestr)
# g.setclipstr("Original form of rule: "+rulestr+"/nCanonical form:"+g.getrule())
Seems to make rules that explode in various ways. If you want to take out the B1 birth conditions also, just add a couple more isotropiclistB.remove() lines.
Modified a bit, added seed option:

Code: Select all

import golly as g
import random

random.seed(g.getstring("Random seed(any string): "))

prob = 0.5

isotropicsetS = isotropicsetB = {"0",
                 "1c", "1e",
                 "2c", "2e", "2k", "2a", "2i", "2n",
                 "3c", "3e", "3k", "3a", "3i", "3n", "3y", "3q", "3j", "3r",
                 "4c", "4e", "4k", "4a", "4i", "4n", "4y", "4q", "4j", "4r", "4t", "4w", "4z",
                 "5c", "5e", "5k", "5a", "5i", "5n", "5y", "5q", "5j", "5r",
                 "6c", "6e", "6k", "6a", "6i", "6n",
                 "7c", "7e",
                 "8"}

isotropicsetB.remove("2a")
isotropicsetB.remove("1e")
isotropicsetB.remove("1c")
isotropicsetB.remove("0")

rulestr = "B"

for i in isotropicsetB:
    if random.random() > prob:
        rulestr += i

rulestr = rulestr + "/S"

for i in isotropicsetS:
    if random.random() > prob:
        rulestr += i
 
g.setrule(rulestr)
# g.setclipstr("Original form of rule: "+rulestr+"/nCanonical form:"+g.getrule())
Rule with seed 6 is first with a glider:

Code: Select all

x = 255, y = 258, rule = B2cin3ajqry4cekrw5ceinqr6aeik/S2ceik3aeijn4ackqtw5aikqr6n7e8
b2o2bo5bobo2bob5ob2o3b2o4bob2o3b2o2bobobo4b3ob4ob2ob3o3b2o3b2ob2o2b6o
3bobo2b3o3b3obo3bobobobob2o2bo4b2obobob2o2b3ob3o2bob4o2b3obob2obo2bob
2obob2o2bo2bo3bo2bob4o2b5o7bob2ob2obo2b6obo2bo2b4o5bo2b4o$2o2bo3bo4bo
4bo7b2ob3ob2obob3ob2o3b3o3b4o2bobob2o2bo5bobob4o3b2ob2obobo3bob2ob5o3b
5o2b2obo5b2obo2bo2bo4bob2o7b3obobo4bo4b2ob2o2b2obob4obo2b2obob2o2b4ob
3ob3o2b2o3b3obobo2b3ob2o3bobo2bobobob2o3bo3b2o$3o2b2o2bo5b2ob5obob2ob
3o2b2o3b3o6bo6bo2bo2b2o2b3ob2o3bo5b3ob8o2b2o2b3o5bo2b3obo2bo2b2o3b2obo
3b2o3b3ob2o10bo2bobobo5b2o2bobobo2b4obo3bob5obobo2bo2bo3bob2ob3o3b2ob
2ob5ob2ob8ob4o7bob2o$o2b4o3bo3b8o2b2o3b3obo3b2ob2o2bo7b2obo5b2ob3ob5ob
ob2o2b7o2b2o2bo3b3obo2b4o2bo2bobob4o4b2o3bobob5o2b7obobo4b2o4b6obobobo
2b3ob2obo2bobobo2b4o3b3obo2b2o5b2o3bo3bo2b2o2b2obobo3b2o2bo2bo2b4obo$
5obobobo6b2o5b7o2bo3b3ob3ob2obo2bob2ob3o2b2ob2o4b3ob3obo3bo4b3o3bob2o
2bobo2b2obobo2b3obo2b2ob2ob2o17bo6bo3b9o3b2ob2obobo6bob5ob2ob2o2bob4o
2b4o2bob4o2b2obobo2bob2obo2bo2b2obo7bo3bo$bo2bo4bo3bobob2o4bobob2o2bo
2b4o2bobo6bob4o4b2o2bobo4bo3bo6bo2bob5o2b2ob2ob2obobobob3obo4bob3ob2o
2bo2b3ob6o2b2ob6o5bobo2bo3bo4bo3bob2ob8o3b4o3b3ob4ob2o2bob3obo3bo2bo2b
3o4b4ob2o5bo2bobobo$bo2bo3b3o2bo3b4ob6o3b2o2bobob2obo4b4obo4b3obo3bo2b
3o2b9o5bobob2o4b4o7bob3ob4obobob2ob3ob2o7bob2o6b2ob3obob2obo2b6ob5o3b
2o11bobo2bo4b5ob2o5b4o2bo2b2o3b2ob2o2bo8bo2bo2bo$ob3o3bobo2b6o2b2ob2ob
o5b8o3b3o6b2o4b2obobobobobo5b3o2b3ob4obo2b3o2bo2bo5b2o7b2o3b6o2b2obo3b
ob2ob2ob2o4bob2o2bob3ob4o4b4o3bobobob4obob5o3b2o2bobo4bo2bo2bob2ob3ob
6obobob3o2b5o3b2ob3o$bobob2obobob2o5bobobobo3b2o2bo3bobo2bo3bo4bobobob
2o2bo2bo5b4ob2o2b3o4bob2ob2ob6o2bobob6obo2bob2o3bo4b2o2bobob2obo2b4obo
2b3ob7o3b2obob3obo3b3o2b3o6b2o2b8o5b2o4bob4ob2o3b5ob3obo4bobo2b3o$2o3b
2ob2obob3obo3bobob2o3b2obo3bobobob2o4bo2b3ob3ob4ob2ob3obob3ob2o2bo2b4o
2bob3o2bob2o2b5ob2obo4b2obo2bob2o3b2ob5o2bobobo2bob5obo2b2o2bo2b2ob3o
5bo5bo2bo2bobo7bo2bobo3b4o2b3ob4obo2b6o2bo2b3o2bob2obobo2bobo$2o2b7ob
3o2bobobobo2bob2obobo5b6o3b2o2bo3bo7bob2o5bob4ob4o4bob2obob2o2b2o3b2o
3bob4o2b3o2b3obob3ob2o3b2ob4obob2o4bo3b4ob3o2b8obob4o2b4o2b3o4b2ob2o2b
ob2obob2o2b2ob2o2b3ob2o2b2o3bo2bobo3bo2b3obo2bo$3o2b2ob4o4b2o2b6obo2b
2ob2ob3obob2o2bob3o2bo3bo2bob3ob3o2b3ob4o2b2o2b4o2b6obo2b2ob2o3b3obob
2ob3ob2o3b2ob4o2bob2o2b2ob4o2b3obo5bobo2b2obobob8ob2obo2b4obo4b2obobob
5o2b4o4b5o2bobob2ob2o2b2obo2bo2b3ob2obo$2obo3bo3b3o3b2obob2obo2b8obob
4o3b4o2b2o3b2obo2b4obo2b2o2bo2b2obob2o2b2ob2ob3o2bob2o4b2obob2ob2obobo
b5obobob2o5bobob5ob9ob2o7bo2b8o2bo2bo2b3o2bobob3obo2bo2b2ob2o3bo4bob2o
b3ob2ob2obo3bo2bo2bo2b3o2b3o$bobob3obo3bo2bobo4bob3obo2bo11b3o2b3ob2o
3bo2bo2bo2b2o3b2ob2o6b6ob4o3b5obob3o5bo3bob2ob3ob2obobo2bo2b6o2b2o3bob
3obob2o3b3ob3o3bobo6b4o2bo3bo3bo3bo2bob2o3b2obobobo2b4o2bob2o2bo2b3ob
3obob2ob2o2b2o$2bobob2o2bo4b2obob2o3bobo2b3o2bo3bo2b2o4b2o4b2ob4ob3o6b
2obobobob3ob2obobo2bob10obo4bo2b2ob3o3b4o3bo3bob4o2b6o3bo2b7o2bo14bo2b
o2b2obobo7b4o3b2o2bobobo2b2obo3bo3b3obo2bobobobobo5b2o3b4o$2obo3b4o5b
2ob3o6b5o3b2ob2o2b2obo3bo4b3o2bo4b3o2b8obobobob3o4bo2b2o2b5ob4obo5bobo
b4ob4o4b2ob2obo2bobo3b4o4bob4o2b5o2bo3b2ob3o2bo2bobobo2bo2b3o3bo2b2obo
bo2b2o2b2obob2o2bo4bobob4obo2bo2b2obob2obo$ob7o3bo3b4obo2bo4bo3b2o2bob
ob4o2bob2obobo3bo2bob4obo4bo2b4ob2obo3b2o3b2o3bo3bobo3bobob4obo3b2ob4o
4bob2ob2ob7ob4ob2ob3o2bo2b2o4b2ob2ob2o3b2o2b2obo2bo4b7obob6o2bob3o2b3o
b6ob6o4b5o5bobo$obob3obo3bo2b3o2b2ob3o3bo7bo2b3o2b2obo4bo2bo4b3o2bobo
3bo2bo2bobobo5bobob3o3bobob3o2b3ob2o2bo5bobobobobo4b4ob2obo4bob3obob6o
bobo4bo2b3o4bob3ob2o2b2obo2bo2b2ob6ob3obo2b2o2b3ob2o2bob2o3b3o4b2o4b2o
2b4o$2o2bob5o5b3o3bob2o3b5o3b6o2b3obob3obobobo3bob4ob3o3bobobo4bobob5o
2b2ob2obo3bo2b2obo2bobob3obob2o4b2ob2o2b3o3b2o6b2ob3ob2o4bo2b2o3bo2bob
3o4b2o2bobo3bobobo2b2ob5o4b2obo2b2o3bo3bo5bo3b2obob2o2b4o$ob6o3b3o2bob
ob3ob2obo5bob4obo2b3obobob4o2bo2b4obobobo2b4ob2o3bo3bo3bo2b2o3bo3bobob
o4bo4bob5ob2o4bobo2bobobo2bo6b2ob3ob2o3bob2o2bo2b2o3bo2b4ob8o6b3o2b4o
3bo5b2ob4ob2o5b3ob3obob6o2bobob3o$o3b2ob2ob2o2b2o2bobob3obob3o3bo4b2ob
ob2ob2o4bob2o2b2ob6obo3bo4b2o2bo2bo5bob4o3bobob3obob3obobo2b3o2b6o2b4o
4b2obo3b2o5bobo2b4ob2o4bo4b3o3bo2bo2bo3bobobo2b3ob2o3bo2bo2b2o2b2obo4b
2o5b2obo4b2ob3ob4o$ob2obo6bo2bob5obob3o3b5ob2o7bob13obo5b4o2bo2bo3b2ob
5ob4o3bo4b3o3bobobob2ob2obo2bob5o6bo5bo2bo3bo2bo2bob2o2bob3o3b2ob3o4b
2o2b3ob2o10bo7b2ob2o3bo4b2o2b3obob3o7b6o2bob2o$4bob3o2bob2ob2ob5ob3obo
2bo2bob3ob2ob2ob2o2b4o4bobo7bo5bo2bob2ob2o3bo2bobobobo2bo3bo2b2ob4ob2o
3b2o2bo4b4o3bob2ob5ob4o3bobobob2o2b2ob2o6bob2obobo2b5obob3o2b4o3bob2ob
4o2b4obobo2bo5b3ob3obo2bo4b6o$2obobo2bo2b3obo3bobo2bobo3bo4b2ob2o3bo2b
ob2o3bobo3b2o2bo4bobob2ob3obo4bob2obo2bob3o2b2o2bobo2b4o4bobobo8bo2b2o
2b6o3bo3bo3b4o2b3o2b2o2bo4b3ob6obo7bo2bo2bob3o2bo9b2o2bob4obobobo3b2o
3b2obobo2bob4o$2bob7o2b4o3bob2o2b2ob2ob2ob4obo3b2o3bob2o3bob2o5bob2ob
6o6b3o2bobo2bobo2b3o3b3obo2bo2b3o3bo4bobo3b2o6b2o2b3o3bobo2bo5bobo2b2o
b2ob2ob3o2b2o3b3o3bobob2o2b2o3bob2o2bo2b3obo3b4o3bobo3b3obobobob3ob5o$
b3ob2o2b2obo4b2obobo3b3obo2b2obo3b4ob4o2b2obobo2b4ob2obobo3b3ob2o3bobo
b2o5bobo2b5o4bobob2o2b4ob7ob3obo2b5o2bob3o2bo2bo2b4o2b3o2bob2o3b2obobo
3bob2o3b4obo2b2ob2o2b5ob2o5bob2o2b3o3b2o3bob3ob2o3bob2o2bo2bo$bo2bob4o
3bobo3b5obobo2b3o2b2o2b2ob3ob2obo3b2o2b2ob3o2b2o2bobob3o3bo2b3ob5obo3b
2o2b2o2b3ob3obobob6ob4o2b4ob2obo5b2ob2o4b5o5bobo7b2obob3o2bo2bo2b2o3bo
3b4o2bo2b2ob3obobobobobo2b3o2bobob2o2bobob2obo4bo2b3o$3o2b2ob2obob5o2b
2obo2b3ob3o3b3o2b3o2b3ob2o5bo2bo3bobob4obo3b9obobob2o2b4o4bo2bobo3bo2b
3o3b4obo2bob7o3b6o2bob3ob2ob6ob3o2bo2b2obobobo2b3o2b3o5bo2b4o9bo2b2obo
b3obobo3b2o3bobob2ob7o5bo$b5o2bob7o5bo3b3obob3o5b3o3bo5b3ob2o5bob3o2bo
4bobo3bo2bob3ob4o3bobo4bo3b2ob2o2b2ob2obo2bo2b3ob2ob2o3b6ob3obobob2ob
3o2b2o2bo2b4ob3obo2b2ob2ob2o7b2o4bo3b2obob2o2bo2b5o2bo7b5o2bo2bobo2bo
3bobo$4b2obo3bob2obo2bobobo3b4obob2ob3o2b6ob3ob6o2b2ob2o8b2obob3ob4o2b
o2bo2bo2bo3bob3obob2o5b2o5bobo2b2o2bo2b3obo3b3obobo3b2ob6o3b3obo2bo2b
6o4bo3bo3bobob5obob3ob2o2bobobo2bo4bo2b2ob4ob5obob2o2b4o$o2bobo2b2o2b
3o5bobo4bo3bobobob2obobobob3ob4o2bo2bobo9b4obob2o2bobo2bo4bob2o2b2o2bo
b2ob2ob2o2b7o2bob4ob2obo2bobo2b2obobob2ob2obobo4b2obo5bobo3b2o5bo4bo2b
o2bo3bo2b3o2bo3bo2b2obo2bob5obob2o2b2o5bo4bo2bo2bo$3b7o3bob2o2bo2bob2o
b4ob6o2b2obo2bob2o3bo3b2ob6obob3o3bob2o2bo3b2o3bobob3ob5o5b2o4bo6b3obo
2b3o2bob2o2bobo2b2o3bobob3obo4bo2bob5o2bo4b3ob2o5b2ob2o2b3o2b2obob3o3b
o4b6o2b4o2b2ob3ob2o4b2ob2o2b2o$5obobobo2b3o2bo2bo4bob2obobob2o2bo2bobo
2bo2bo2b8ob3o4b3o4b2obo3bob6obo8b3o3bob3ob3ob6obo2b2obobobobo4b2ob6o2b
2o2bo5bob2o2bob2ob2o2b6o2bob5obo2b3ob5obob2o2b2o2b3obob2o3b2o3b3obobo
2b4o2b4o$2o2bo3b2obobob3o4bobo3b2o2b2o4b2o3b2ob5o2b5o4b2ob3ob4obo3bo2b
3o3bob2obob5o2bo3bob3ob5obo2b5ob2obobobo2b3obobo2b2o3bo2bo2bobo4bobob
5obob2o3b3obo3b2o5bob2o2bob2ob3o2bo2b2obob2o3bobob2o3b3o4b2o3bo2b5o$ob
4o2bob2obo3b3o3b2obob2obo2bobobob2o2b3o2bobobo3bob2obob4o3b3o2b3obobo
2bo6bob3ob2o6bob2obo2b2ob3o3b2o2bobob2o3bobo2bobob2obo4b2o2bo2bob8ob5o
5b4o2bob2o4b2o4bob2o3bobobo4b2ob2o6bo3b2ob3o4b2o2bobo3b3o$bobob2o2b2ob
4o2b2o2bob4o2b3o2bob7obob3ob3o3b5obo3bob3obob3o3bo3b2obo2b2obobo3bobo
2bo2b3o5bobo2b8obob3obob3obo2b4ob2o4b3o6b3o2bobobo13b2o4b3o5b3obo2b2ob
obo2b4o2bobob2obob2obobo2bobobo3b2o2b2o$3bobobo2bo2bobo2b4obob3obob2ob
o3b2o2b5obo2b5ob2ob3o2b2o2b6o3b3o2bo8b3obo2bo2bo4b2o2bob2obob2ob3o5b2o
bobo4b2obob4o3bob3o9b3obob5o2bob2obo8b2obo2bobobo5b2obobo2bo9b2o2b3o2b
2o2bob2o2b2obobo2b2o$2o2b3obobobob8ob2obobo4b5obo2bo4b2o2bob2ob2o3bob
2o2bo2bobo5b2o5bobob2ob5o2b2ob7ob3obob5ob3obo3bo3b2o3b2o2b2o2b2o2b4ob
5o3b3o2bobob4o2b2o2bob3o4b6ob2obo2bo2bobo2bob3o7b3ob3ob3obob3o4bo2b6o$
3o2bob3obob5o2bo2b4obob2o2bo2b3o3bobo3b3o2b2o2b2o2bob2obob3ob2ob2o2b2o
2bo2b4o2b2o5b2ob4ob3ob2obo6b4o2b4obob3o3bobo3bo2b5o3bob7obo6b2obobo2bo
b2o4bo2bob4o2b3o2bo5bo2bo2bo2bob2ob2o4bo2b2obobo2b2ob5ob2o$4obo4b2obo
4bobo2b2obo2b2o4bo3b2obo3bob2o3b2obob2obo2bobo3bobo4b4obob3ob3obo5b2ob
o6b6o4b2o2b2o2bobo3bo2bo2b2ob2obo3bobo3bob4o2bob2obo6bo2b2o2bo2b2ob4o
2b2ob4o2bo3bob2o5b2o4bob2ob5o2b2o2bo3bo4bo2bo$bo2b3o6bobo3b2o2bobo2bob
5o2bob4obobo2b2ob2o3bo2bo3bob2o2b2obo2bob4ob3ob2o2bobo7b3o4bo3b2o2b2o
2bo2bob2obo2bobob3o3bob4obob3ob2obobo4bobo4b2obob3o2b3o2bob2o2bob7o2b
2ob4ob2ob2ob4ob3obob4ob3o2bobo5b3o3b2o$bobo2b2obo3bo3b2ob4o4bo3b2obo3b
2o2bo2bo2b2ob3o2b3ob2ob3obo2b2obo2b2obobo2b5o3b2obob7o2b2o2b3obo3b2o2b
o4bo2b2o2bo2b4obo2bo2b4o2bobob4o2bo4b4o2bob4o2bob3o2bo2bo2b3ob4o5bo2b
2obo3b5ob2o3b3o2b2obob2o2bo3bo2b2o$2b5obo4bob5obo3bo4b3ob2o2bob3o2b3ob
5obob3ob2o3b2ob2obob4o2b4o5b4o4bob2o2b8o2b2o2bob6obob4obo2bo2bo3b5ob3o
b2o6b4o3b2o2b2o2bob2o2b4o3bob2obo3b3ob6o2b7obobob4o4b2o7b2o2b2obo2bobo
b2o$ob2o3bobo2b3o4bob6o3b3o3bobobo3b4o3bo3b2o2bo4bob3o5bob6o7bobo2b3ob
3ob2ob7obob3obob6ob3o5bobo2bo3bo3bobo2b2obo3bob2o3bobo5b4o5b2o3b2o2b2o
2b2ob2o3b2o4b2ob2o3bo7b7o4b4obo2b3o4bo$bob2obo2bob3o4b3ob2ob5obo2bob2o
3b3o2b3obobob2o2bo3bo2b3obobo4b2o2bob2obobobobo3bo2bobob4o6b2o2bob2o2b
3o3b4obobo2bobob3obo2b9o2bobob2obo4bobo2bo4b2ob4o2b3obobo5bo2bo2bo3b2o
2bo2b3o2b7obobob2o6bo2bo2bobo$6b3o5bobob2ob2obo2bob5o2bobobo3bob2o2bob
2obo2bo2b2ob4o3bobobobob4o4bo3bob2o7bobob3o4bobo2b2o2bob4o2bob2obo2bob
2ob2obob3o4b3obob2obobo3bo2b2o2b2obobo2bo4b3o2b3o2bob4obo6bobobobo2bob
4o3bob2ob3o2b3ob2obobob2o$b3obo3bobo2b4o2bo2bo2bo2bo7bob2o2b2obob2ob2o
2b4o3bo3bo3b4o8b2ob6o3b2obo2bob3o7b2o2b6o3b2obo3b3ob2o3b2o2bo3bobo2bo
2bo7b3o6bo2b5ob8o2b2o2bob3o3b3ob3o2bo6bobo2b5o2bo2b3o2bobobob2ob2o2bo$
b2ob2o4bob2o3b3o4b2obo2bo2b5ob3obo4b3obob2ob2o4b2ob2o2b4obo2b4o2bob2o
2b2ob2o2bo4b3o4bobobo4bobob4obob4o2bo4b3obob3obo3bobob3obo3b2o2bobobob
ob2o6bob2o5b4o3bob2ob9o2bo3bo2b7obo5bob2o2bo5bo$b3o2b3o2bo2bob2obobo3b
o3bo3b5ob3obo2b2o2bobobo3b2obo4bobobobo2b3o4bob2o5b3o3bo2bo3bo2bo2b5o
3b4o2bobo5bobo2bo5bo3bob2o4bo4b5o2bobo2bo2bobo2b3o2bo2bo2bob6ob4obob3o
bo2b2o3b2o3bo5b2obobob2obob3o2b2o5bo$ob2o2b2ob2o3bob3obob2o3b3obob3ob
4obobo3b8o5b3ob2ob3obo3b3ob2obo2bob2o3bo4bobo3bob4ob3o2b3o2b2o3bo2bo5b
4obo8bobo5b5obo4b2o3bo3b3o2bob5obob4ob2o2b2obobo4bo2bobobo4bobob2o2bo
4b3o2b2o6b2o$o4b2o4bo4b4o2bo3bo3b2obo2bo3bo4bo2bob2o2b2o3bobo11b2obo4b
o5b2ob3o3bo15bob3o3bo2b3o2bo2b2obo2b5ob2o3b4o3bo3b2o2bobobo2bob2obob2o
bo2b4obob2o2b3obob2o3b3o4b2o3b4ob3obo2bob2ob3ob2o4b5o2bo$3obo2b5obo3b
4obo2bo3b2obo2bo2b2ob4o3bo3b7obo2b2ob4o3b3o3b2o2bob2o2b4ob3o5bobobob2o
b2o2b3o2bo2b3o2bo5b5ob3ob4o3bob3o2b4obo5b2o5b3ob2obobo5bo2b2obobobob3o
bob4o2bobo2b4o2b4ob2ob3obo3bob2o7bo$bo3bob6o3bobob3obo2bo4bob3o2bo2bo
2bo3b4obo5b4obob2o4b2o2b2o2b4o2bob2o2b5o2b3o2b2o2bo2bob3o2bob4obob2obo
6bob2o3bobobo3bo2b2o3b3ob4o4bo2b3o2b2o3b2o3bo2bo6bo2b2ob2ob3o3b2o3b2o
4b3obob7o2b3ob2obobobo$bo3b2ob2o9bo2bo3b2o2b2obo3bo4b2ob2obo5b2ob2o3b
2o2b3o3bobob2obob3o7b2obobo2bob2o2b2obobobobob5obobob2o2bob3ob3o6b4ob
3ob2ob2o3bob2ob2o3bob2obo2b2ob2ob2ob2o2b2ob2ob4o2bobobob3o2b2o7b3obob
2obob3obob5o2bo4bo$2b4o2b4o2b2ob3o4b3o4b2ob2obo2b2o2bo2bobo2b3ob2ob2ob
2ob3ob3o3bo3bobo2bo2b2ob2o4bob2o3b2o2bo4b2o7bo3bo2b2ob2obob2ob4obo5bob
2o2b4o2bo2b4o2b2obob5obobob2obobo4bob2o2b7o2bobo2bobo2bo2bo6bobobob4o
3bobob2o2bo$2bo2b2o3b3obobo4b4ob4obo2bob4ob3o4b3ob2obo2b2o3bobob2obo3b
o2bo2bo2bobo4b7ob2o2bo4bob5ob2obo2bobobob2ob2ob2obobob2ob2o4bobo2b8o2b
2o3b2o2b6o4b2obobo3bo3b2o2bob3o3b2obo2bobo2bobob3ob5obob2ob2obob3o3bob
2obo$obo3b5obobo4b2o2b2ob2ob2ob6o2bo4bo2b3obob2o2b8ob6ob3o2bo4bo2b3obo
2bobo2b4ob2obobo3b3obobo2b2obo4b3ob4obob5o9bo3b2obo2bobo3bo2bobob2obo
4bob2o2b2o3bo5b2o2b4o3bo2b2ob5ob2ob2obob6obob3o4b4o$obo2b4o4b2obob3o6b
o4bo4bo2bob2ob2obob3o3b2ob3obo3b3o4bob2o2bo2b4o2b4obob2ob3o4bo8b11ob2o
bo7bobobobob2ob2obo2bo2b2ob2o3b3o4b3o4b10ob2obo3b2obobo3bo3b5ob5obob4o
2bo4b6o4b4o4bo$2obo3b7ob4o6bobo2bobo2b2o6bo3b3o4bo2b5o3bobobo4b2ob2o3b
o4bo2bo3b2ob3o4b3obob2obob2o2bo3bo2bobo2b5ob4obob2o2b2o3bo2bobo2b2o2bo
bo3b3obo5b2o2b7obo6bo5b2o2bo7bo2b3o4bob3o5bobo2b4o5b2o$5obo3b2o3b2ob2o
3b3ob4o2b2o2bobobob2o2b4obob3ob7o5b3ob4obob4obobo2b2o3b3ob2o2bo3bo2b3o
3b2o5b6ob2o3bob2ob3obob3obo3b2o5bob4o4bo7bobo2b3ob3o2bob3o2b4o2bo3bobo
2b5o3b2ob5o2b2obob2obo3b2o4bo$2o2b4obo2b3ob2o2bob4o2bo2b4obo3bob4obo4b
o2bo5b4ob2o3bo2b3o2bo2bo3bobobob10obobob2ob2o2bo7b2o4b2o2b2ob5obo2b2ob
3ob2obo2bo4b3o2bob4o4bob2ob2o2b3o2bob3o2b2o2b3o6b2o3b2ob2ob2obo6b4obo
3bo4bobo2bo$o3b2obo4b3ob3o4b3ob5o2bob2obo3b2o2b2o3b2o2b4ob2o2b3ob2o8b
3o2b2o2bo3bo5bobo3b2ob2o6b2ob3o5b2o3bob2o2b15o4bo2b2ob3o2b2o4b2o4bo4bo
4b3obo2b3o2b3obo3b2o3b2o2b2ob2o3bo2bo4b2o2b4ob2o5b2o$bobob2o2bo7b4obob
o2bob4o2b7o4b3o6bobobobo4b4o2b2o2bo3b2ob2obo2bo4bo4b2o3b2o4b3o2b4o2b2o
6b2o4b2o8b2o2b2ob5ob2ob4obo3bob3o3b3o2b3obo2bob2obob4obo2b2ob3o2b2o2bo
2b2ob4ob4o2b3o2bo2b3o3bo3bo$o2bo4bob3o2bobobo3b5ob4obo3bo4b7o2bo2b3ob
2o2bo3b3ob2o3bo3b2o2bobobob4obo2b3o2bob2o2b2obobob2o2bo4bo3b4o2bobob3o
b5ob3o2b2o3b4obobo2b2o3bo2bob2obob2o2b2obo4b2o2b2o2b3o2bob2ob4ob5obo2b
ob4o2bobob2o3bo2b3o2b2o$obobo2bobobo2b3o5b2o2bobo3bo3b3obo5b2ob2o5bo4b
2o8bo4bo3bobo2b2ob3o3b2ob3ob4o2b2o2bob2o3b3ob2obo2bo2bobob2ob2ob2o6bob
2obo4b3o4b4obob7o2bobobo3b2o7bob2o5b2o4bo2bo4bo3bobob5o3bobo2bobob4obo
bo$ob3o5b6ob3obo3bob2ob2o2b2o2bobob3ob2obo2b3obobo2b2ob3o3bob2obo2b2o
4bo2b3o4b2o6bo3bob2o2b4ob3o7b3obo2bo4b3o3bo4b2o5b2ob2ob2o3b2ob2o2bo2bo
6bob2o3b4ob2o2bo3b3o3b2o3bo2b4obo2b6o5b2o2bo2bo2bo3bo$3bo4bob2obo2bob
2o2b3o4bo2b5o3bo5bobobo2b3o2b2o3bo2bob3o4b3ob3ob2o3bo2bo2bobo2bo2b2obo
3bob2o5b2obo3bo2b6o3b2ob4o2bob2ob4obo2bo3b2o2bobob2o3bo3bobo5b3o2bo3bo
b3ob3o3b2o3b7obo3b2obo6bobo3b3o4bo2bo$ob2ob8ob4obo2bo3bo4bo2b2obo2bo2b
ob4obob2o3b2o2bob6o2b2obob2obo6b2ob3ob2o3b4obobobob2ob2o3bob4o2bob3ob
2obob2obo2b2obobo6bo4bob2o2b2obob3obob3o2bo3b3o5b3obo2b4o2bob4obobo2bo
b2o5bob2obobob3ob3obo3bo4b2o$o5bobobobo4bob2obo3bob3obob6o5b2obo3b3ob
3ob2ob2o2bob2ob5o2bo2bob3obobo2b3o2bo4bobobobo4b3ob2o2b3obob2obo7bo2bo
bob2o3b3ob2ob5o4bo2bo3bo2bo2bobob2o3bobo4bobo3bo2b2obo2b2o2b4obob3ob2o
bo2bo3bo3bo2b4o4bo2bo$4obobo2bobo2bo4bob4o3b3ob3o2b5o2b3ob2ob3o3b2obo
5bob2ob3obobo3bob3o2b3ob2o2b2ob2ob6o5b2o3bobobob3obo2bob2o2bo5bo2b4ob
2ob2obo2b4ob3ob4obob2ob2ob2ob3o2b2o3b4o4bo5b2o4bo5b3o2bobob2o3b3o5b2o
3bo$2bo2b2o3bo5b2ob3obo4bob5o3bo3b2obobobo3b3obo5bo3b4obo2b3o5bob4o4b
3ob2o2b8o3b2obo2bobobo2bo2b4obobo2bobob2o2bobobobo2bob2ob4obo2b2obo4bo
bobob3obo4b2obo2bob2ob4o5bo3b2obo3b5ob2ob9obobob3o3bob2o$o4b2obo3bo2bo
2b3obobo3b3ob2o2b3obob3ob3o5b3o2bob2o3b2o2b2o3b2o2bo7b2o2bobo2bobobo2b
o2b3o6b2o3bo3b2obobobo3bo2b2o2bobo3b4obob2o3b3o4bo2bob4o2bo3bo2b2ob2ob
obobo2bob2obobobo4bo2b2o2b2ob3obo2b2o4b2ob2o2bobob2o3b3o$2obo2b2o3b2o
3b6ob2o10b2obobob8ob2o2b4obo2bob5obob2ob2o2bo3b2o2bobob2o2bob2o2bo3bo
2b3o2b2o3b2ob4ob4o2b3o2bo2b3ob2o3bob3o2bob3o2b2obob3o3b2ob3o2bob2o3b4o
b4o3bo2bo5b8o2bob2o6bobo2bob6o7bobo$2bob2o4b3ob2o4bo3bo2bobo7bo4bob2o
2b2obobo2bobo8bo2b2ob6o2b3o2b2ob5o3b4o2b2o4bo4bob2ob2ob2o2bob3obobob3o
6bo2bo3bo2bo10b5obo8bob4ob3obo2b2o2bobo3bob3obo2bo2b2obo3b2o2b2o2b2o2b
4ob5ob2ob2o2bo$ob3o2b2ob2o5bobo3b2obo3b2obob3ob2o2bob3o2bob6o2b9o5b2ob
2o2bo6b2o2b4ob2o2bob2o2bobob2obob2obo2b7o3b3o2b2o3bo5b3o4bobo3b2o2b4ob
2o4bob2o2b2o3bo4b6obo2bobob5ob2ob2ob2ob2o2bo5bob2o2bo4b4o2b4ob2o$3ob3o
2b2o4bo2b2o2b3obo2b3obobo2bo4bo2b4o4b2obo2bo13b4o4bo5b3ob2o3b2obob2ob
2o2b2obob2obo2b2obo2b4o2bo2bo3b2o5b5o3b2ob4ob2o4bo4b3o3b2ob5o2b2o6bo2b
obob3obo2b2obo3b2o3b3o5bo3b3o2bo2bo2bo3b3obo$2o2b2o5b3ob2o2b3obob2ob2o
2b5ob2ob2obobo2b4obo2b5o2bo3b11o3b3ob2o3b2ob4ob2o2b2o4b2obo4b2ob2o6b4o
b6obo3b3o2bob3o5bo2bo3bo2bo3b4o2bo2b3obobo3b3o2bo2bob5o3b2o2b2ob2o2b2o
bob3o3b2obo3bobo2b3o2bob3o$bobobo7b2o2b4o7b2ob3o3b2obobo2b3o4bo6bo2b2o
b3o5b2o2b2o4b2o6bob3o2bobo2bo2bob3o2b2ob6obo4bob2ob2o6bobobob2o2b2o2b
3o2b2o2bo3b3o8bo2b2obobo4b3o3bo5bo2b2o4bo2bob5o2b2ob2obo3bobobo2b5obob
ob3o$3ob4o2b2o6b2o2b3obo2bo2bo5b2o2b3o3bo2b2obob3obo3b2obo2bob2o2bo2bo
4b2ob2ob2o2b2o2b2obo3bo2bob5ob3ob2o4b2o2b7ob2ob2o3b2ob2obobobo2b2ob4ob
ob3o3b2o3b2o6b2obobo8b3ob4ob2o4bo2bobobob2o2bob2o3bobo3bob6o3bo$3b2o2b
o3b2o2bo2bobo2bo3b2o2b3ob6ob8obo3bo4bo2bob2ob2o2bob9ob4obo2b2o6bobob2o
9b2o3b3ob3o3b7ob3o3bo2bobobo2bo6b3ob3ob6o2bo2b3ob2o3b3ob2o3b2o2bo2b3ob
3obob2ob2obob2o3bo2bob3o2b2o4bo2bobob4o$ob2obob2o3bo2bo5bo2bobo2bo3bob
3o3bo2b2obo3bobo2bobo6b2o4bo3b3o3bo3b4obobo5b3ob4o2bob2o2b2obobo9b3ob
4obob2o2b2ob2obo2bob2o3bobo3bob2obob2obob2obob4o3bobobo2b2obob2o2bobo
2bob2obobob4ob2obo3bobob4ob3obobo2b2obo$b2obo3bobo2bobob6ob2ob2o4bo2b
3ob5obo2bobo3b5o3bobo3bob2ob2ob2o3b3ob3ob2obob4ob2ob2obob4ob2ob2o2b2o
3bo2b3ob2o2bo6bobob3o3b2ob3ob2o3b3obo3bob3obo2bo3bobob3ob2obo2b2ob3obo
5b4ob2o2b4o2bob2obo4bo2bo2b4o3b2obo$obob2o2bo2b3o2b4ob3ob2o2b4ob2ob2ob
o2bo3b2o2bo3b3obo4b3o2b3obob2obobo5b2obobo4bob4o3b3o7bob3o2b5o2b3o4bo
6b2obobobo2bobo7bob2ob2o4bo2b4o2bobo3bobo5b2ob10ob2o3bobobo2bo2b2ob2o
3b7ob2obo4b2o$bo2bobob2o2bo2b4o3b2ob2obobo2b3obobo3bo2bo3b2o3b2o2b2o4b
ob2obo4b2obobob7obo2bob4o2bobo3bo2b3o2b2obobo3b2o2bo3bo5b11obo3b3ob2o
2bobob3ob2o2b2o5b3obo3bobo2b5obo3bobob3ob2o2bob8obob2ob4o2b3o2b3ob5ob
2o$2ob3obobob6o2b6o2b4ob2obo2bo4bo2bob2obobo5b3o2b6o2b5o2b3o2bob8obo2b
3o2b2obo3b2ob3o3bo2bo3bo2b2obo2b2obo4b2o6bobob3o2bobobobob2ob4ob5obo4b
2o3bo4b4ob2ob2o2bo3b2obobobo6b2o2b2obo3b4obo4b3o3bo$2o2bo6bo2b3obo7b5o
2b2obobo2b4ob2ob2o3b4o4bob4ob2o2b3ob5o5bo6bo2b3ob2o2bob2o4b3ob4obo2b3o
bo2b2obo3b2obo2bob2o3b3o2b4o5b2ob3o3bob2o2bobob2o2bobob4ob3o6b4o4b3ob
3obo2b2o2b2o2b2ob2o3bo4b3o2b3o$o4bobobo5bob3o2bobob3o2bo2bo2bo5b4ob2o
4bo3bob2o2b2ob2o3bo2bobob3ob5o4b2o6bo10b2ob2o4b3obobobo6bobob3o5bobo2b
ob2obo4b2ob4o2bobob7ob2obo2bobobob4o4bobo2b2obob4ob4o2bo2b2o4bob3obo2b
o2bob3o2bo$3o2bobobobo2bobo2b2o2b2o2bobo5bob4ob2o3bob4o3bob3ob2ob3obo
2b2ob3obo2bo2b2ob3o2bo3b3obobo2bobo4b2o2b2o3bobobo3b2ob4ob3o6bo4b2ob6o
2b2o3bo3b3o2b2ob2obobob2o2bo3bo2b2o3bobo3b2obo9bobob2o4bo4b3o2b9o2b2o$
2b2obo2bobo2bob3ob6obob2o3bobo3bo2bo2b2obobobo7bo2bobobob6obo6bo3bo3bo
2b3ob2obob2o6bo2b2o2bo3b2o2bobo3b2obobob2o2bobo2bobob2o2b6o2bo6bo2bo3b
8obob3o3bobo3bob2ob3o4b2o3bo4b3ob4o8bo2bo2b3ob6o$b4obob2obo2b2o3bob3o
3bob3ob4o3b3obo2b2o3bo2bob2obobo4b4o3bo4bobob5obob2ob2obobobo3b3o3b4ob
ob3obob2o2b2obobobo2bob5ob2o3b2obo6bo2bobo3bob5o2b3obo3b2o3b2o2bo4bo2b
3obobo4b7o2b4o3bo2b8obobo3bob4o$2obobobo2b4obo2b2o2bo3bo2b2ob6o2bobob
2obo3bobo5bo4b4o4bo2bo2bo2bo4bo4b3ob2ob6ob3o2bo2bo4bob2obob2o3bobob6ob
3ob4obobo6bo5bo5bo3b5ob2o3b3o4b4o4bo2bo2b2o6b2ob4o2b2ob2ob3o2bo2b3o4b
2o2bo2b3o$4o4b2obo2bo4bo2bo2b2ob5o2bobobob3obobob2o2b2o3b3ob3obo4bo2b
7ob2ob3o3bob2o2b2ob2o2b2obob5ob7o2bobo5bobo4bobobo3b5o3b3o2b3ob4ob2o3b
ob2ob2ob4ob3obo3bob2ob2ob2o2b3o4b2obo7bo5b3ob4o2b6o2b2o2bo$ob3obo2bobo
bob5o3bobo2bob5o3bob2o3bo2b3ob2ob9obo2bobo2b2ob2obob3o3bo5b2o4b2o5bo2b
o2b3obobobo3bob3o2b3obo2b4o4bob2o2bobo2bo3bob3obo2bo2b3ob2o3bo2b4o3b3o
b5o2b2ob5o2b5ob3o4bob3ob3ob4o2b2ob2obo4bo$2o3bo7bo6bo2b3obo2b2o2b2ob2o
2bob2o5b2o2bobob2o3b3o2bob3ob3o2bo2bo2bo5b2obobo3bo3b3o2bo4b2ob2o6b3ob
ob2ob2o4b3obobobo2bo6bobob3o4b7o2bo2bo3b4o3b2ob2obo2bo2bo2bob2ob3o2bob
2ob3obo2bo2b4obobob2ob3o3b4o$2bo2bobobo2bob2obob2o4bob2o3bobobobobobo
2bobobo3bob3o3b2ob2obo5bobo2bobobo4b2o7b2o3b6o3bo2bob4o3bobo2bo3b3ob3o
3bob5o6bobo2b2obob3o4b6ob2ob3o4b2o2bo3bo2b4o2bobo5bobobob12ob2o5b2o2b
4o6bo$2bobo3b2ob2ob3o2bob4o6bo3b2o6b5ob2o3bobo3bo3b2obob2ob3obobo4bo3b
2o4bo2b5o2b2ob2o8b4o3bobo2b4ob2ob2obob2obo2b2o2b2obo2b3ob4o2b4ob3o2bo
4bobob5o2bo2b2obobobo2b4ob3obobo3bob2o2bob3o2bo2bo3b2o2b2o2b3ob2o$2bo
2bo3bob2ob4o2b2obob2obo2bobo2b3ob3ob3ob3obo3bobo2bo3bob3o5bobo4b3ob2ob
2ob2o4bo2bobobob2obo2bobo2b2o2b3obobobob2obo3b3obobo2bo3bo2bobo3bo3b5o
5b2o5b2ob3obobobob5ob2ob4obob2obo2bob8obob2o3b2o2b4o2b4ob3obo$ob3o3bob
ob2o2bo11bo2bob3o3b4o2bobo2bob4o3bob2ob3o2bo6bobobobo2b2o3b3o4bobobo2b
o4b3obo3b2o2bo2b4o2bobo4bo5bobob4obob3o2bo2b3o2bob2o2b2o6bo3bo2bo3b3ob
2o2b4o3bo2b2ob2ob2obo3b3obobobo2b2o2b3obobo3bo3bo$b2obo2b2ob2obobo3b2o
b2o7b6ob3obobob3o3b5ob6o2b6ob2o4b3o6bob2ob4o2b5o2b2o2b3o3bobob2o3bobo
4bobobo3bobo4b3ob2o3b2o2bobo2b4o3b2o10b2obob2o3b3obobobo2b5obo3bobob3o
2bob6obob3obob4obo2bob2o$bo6bo4bo3bo3bobo4b4obo5bob8o4b3ob4obob2obo3bo
bo6b2obo2b6o3b2o5b5o3b3o2bob2o7b2obobob2o2b3o3bo3bob4obo3b8o3b2ob6o4bo
bob4obob2o3b2o2bo2b3obo3b3obobob2o5b2o2bobo4b3o2b2obo5bo$2ob3obob2o2bo
4b3obo2bo3bobo2b2ob5obob3o2bobobo3bobo2bo2bob3o2b6ob2obo4b3obob2ob3o2b
o3bo2bob2o2b2o4b2o2b2o3b4o5b2obo3bo4bo2b3obob4obob3o10bob3o2bobobobo3b
2o2bobob5o3b2ob2obobob2obo3b6obo2bo2b2o2b3ob2o$obob2obob2o5b5ob2o3b4o
3b3obob2obo5b6o2b2obobob4o7b5o2bo2bo5b3o5b2obo2b3o11b2ob4ob3o3bobo2bob
o2bo3b2ob3obob3o2bob2o2bo2b3obo2bobo2bo4bo2bobo2b3o2bobo4bo2bobob4o3bo
b4obo4b2o6bobo5bob2obo$o2bo6bo3bobo2bo2bob2obo2b7o2bo2b3ob2ob4obob3o4b
3ob2obobo3b3o3b3o6b2o2b2ob4obo3b2o3bo3bob3ob2o2bob2obo2bob2o2b2ob4ob2o
2bob2o2b2o4b3o3bob2o3b3o2b2o2bo3b8o3b2o4bo3bob3obobo2bobo6bobobo2b4ob
3o5b2obo$o3b3ob2o2bob2o2bo2b2o2b3o3b6o6b4o2bobo4b2obo3b2obo2b6o2bo2b2o
b2o2b4o2b2o2b2o4bo2b3ob2ob5ob4ob4ob2obo3b4ob4obob4o4bo2b2obobo2bo2bob
3o5b4obobo2b2o2b4obo2b2o2b4o2bob3ob4ob2obo2b2ob2obo7bobob2o3bobo$bo2b
2ob6o2b2ob2obo3b2ob2o3b4ob4o3bo2b2obob2obo3bob2obo2b3obo2bobobobo2bobo
5bo3bo4bob2o4b4obobo3bob4o2bo2b2o5bo2bo3bob2ob2ob2obo2bo8b2o2bob2obob
2o4b2ob4o4bobob3ob2o2b2obobob3obob3o3bo2b4o3bob6obo2b6o$4b2ob3ob2obob
2ob3o3bob3o2b3ob2o2b2o2b2obo2b2o2bo2b2o2b4obob6o4b2ob3ob2o2bo3b2o3bob
2o5b2ob2o2bobo3bobobobo3b2o2b3ob4obob3o3b5ob6o4b2o2bo2bob3o3bo2bob4obo
bobo7bob2obo4b3o2b3o2bo3b2obo2bob2ob4o2bo2b2o3bo$b2o4b5ob2obobobob2obo
3b6ob3obo3bob4o2bo3bobob4ob4ob2ob4ob2o2b4obo4bo2bo4b2o2b2ob2o2b3obo4bo
3bo2bo3b2o2b6o2bob4ob3o4bo4b5o2bo3b3o2b2ob2obob2o3bo2b2obob3ob6ob4obo
4b5o6bo4b3obobo2b4ob3o$bo3b4o3b5o3b2o2bobobo2bobob2obo2bo4bob2o5b2ob7o
b3obob4o2bob5o3b2o5b4o3b2ob2o5b3obo2b4o2bobo3bo7bob5o2b2o5b3o2bob3obob
3ob2obob2ob2ob2o4bobobo2b5obo4b3o3b5ob2obob2o2bo2bob6ob2o2bob3obobobo$
b2o6b5ob2ob2o2b3ob3o2b7obo4bob2ob2o6bob3ob2o2b5obob2ob2o2b2o3b3ob5ob2o
bob5obobo2b4obo2bo4b2o5bo2bo2b4ob2ob3o3bo3b4o13b3obobo3bobo3bo4bo2bo2b
4o3bo2bo3bobob3ob2obo4b2o3b2obo5b2o3b5o$b2o5b2ob3o2b4obo2bob3ob5obobo
2b2obobo4bo8bo2bo2b3obo2b3ob2obob4o2b4o3b3ob2o2bo9bo2bo2b3o6b2obo3b5o
2b2obo2b2o2bo2bo3b2obobob2obobobo3bob5ob2obo2bo4bo4bo2b5obobo4b2o2b2ob
ob5o2b3ob2ob2o3b3obob3o$3b3o2b3o3bo2bo4bo2b2o2bo2b3ob6obo5bo3b2o7bo2b
5o3bo2bo3b3obobobo2bob3obob2obob4o4bob3o3bo3bo2bob2o2b2o4b4ob2obobo3b
2ob2o2bob2ob8o2b3ob2o3bob3obob3obo2bo5bob2obo2b2ob3o3b2obo3bob2o2bob3o
bo6b2ob2o$o4b2ob5o2bo4bobob12o2bob4o2b7o2b2ob3o4b2o3b6ob2obo2b3o2bo3b
4ob3obo3b2o4b2obob2o3bo2b5o5bo3bo4bob3o2bo2bo2b2ob2o3b3obo2bo3b2o2b3o
3b2obo7b3o2bob2obobo2b3obobob8o3b2obo2bob5obob2o2bo3bo$o3bobobo3bob4ob
3obobob2ob3o2b2o2bo2b2o4bo4b3obob2o3bo3bo8bob4o3bobo2bob2obo4bo2b2o2b
2o2bo3b2ob5ob2o3bobo4b2ob8ob5o4bob2o3b6ob2ob2ob2ob2ob5ob2o2b2o3bob2o3b
4o2b4obob4obo3bobo4b2o2bo4bo2bo2bob3o$3bo4bobobo4b2o3bob2o3bo8bo2b4ob
2obo2b2ob3obob2o5b4obo4bob3o2bo2bo2bo2bobo2b3o3b5o2b2o4bobo4bob2o3b4ob
ob2obo2bo7bob2obo4bob7o3bobobo4b4o2b2o5bobo2b3obo12bobo4b3obo3bo3b2ob
2ob5ob3o$bo4b2obob2ob4o2bob2ob3obo3b2obo3bo2bo3b5o2b5obo2bo6b3o2bo3b4o
b2ob7o2bob2obo4b3o5bo3bobo5b4o2bob2o2bob2o5b3obobob2obo3b2obo3b3o2bobo
2b4ob3o3bo2b3obo2bo3bo2b4o7b8o2b2obo5b5o4b4ob2o$ob3ob2o2bobo2bobobobo
2bobo3b2obo4bo2bo2b2o2b7obo4bobo3bo2bob3ob2obo2bobo3b2ob3ob2obobob2o5b
3o3bo2b2obobob2ob3ob2obob4obo3bob3o3bob2o2bo2bobobob6o2b2ob2o2bo2bo3b
3o2bo2b3obobo2b3o4b4o5bo4b4o3b2o2b3ob3obob3obo$bob2obo2b2o2bo3bo3b8ob
2o2bo3b2ob2o5bo4bobo2bob3ob2ob2ob2o3bobobo3bo3b2o2bobobobob2ob4ob4o2bo
b4ob2o2b3obob4ob2ob2o2bo2bob2ob3obo6b2ob5ob2ob2ob4obo3bob6o2b3o2b4o2b
2ob3o2bobobo5bobobobo2b3ob5obob2o2b3ob2o$bob3o4bob2ob3ob2obobob4o2b2o
2bob2ob5ob3o3b3obo4bo4bo4b3obob6obo2b4obobobo3b4ob2obob4obo3bobobobo2b
o3b3ob2ob3ob2o3bob2obobo4bobob3obo4b3o2bobob3obo2b2o5b2obo2b3obob2o2bo
bob6o2bobo2bobobo2bob2o2bob3ob6o$obobo4b3o5b2o8b2o3bob4ob6o4b2o3b3o2b
4o4b3obo2bob5obo4b3ob3ob2o2bo2b3ob3o7b3obo2b4o2bob2o2bob3ob3ob2obob2ob
4ob3o2b3obobo3bo3b2ob2obob3obo3bob5o2bo3b4o4bob3o3b4o3b2o2b2o2b6o3bob
4obo$o2b3o3b5o2b3obob4obo2bo5b6obo2bo6b3o2b2ob3ob2o2bo3bob2ob8ob2o2bob
obo3b4o2bo2bo2bo3bo2bo4bob2o7b2o3bobo2bo2bo2b2o2b2o4bo7bob5ob2o3b2o2bo
3b3ob2ob2o2b2o3b6o3bobo2bo5bo3b4o2b2obo6bobo3bo2bo$bo3bob2ob2obob2o2b
2o2b2obo2b2obo2bo4b3obo4b3ob6obob2o3bob2obo2b10o5bob3ob6o4b2obobo3b2ob
3o3bob6o2bo2b4obob3o3bo2bobo2bo2b2o4b4o2bo5b4obobo3bo2bob2o2b3o3bobo4b
o4b3ob2o2b2ob2obo5bo3b2o3b2ob2obobo$2b3o2b2obo5b4obob2o2bo2b2o3b7obo2b
2obob3o2bob3o3b2obo3bobob3o2b2o3b3obo3bo2b2obo2bobo2bo4bobo2bob2o3bob
2o3bob3ob2o2b2o2b2o2bo3bob4ob2o4bo3b4o2b2ob4ob3ob2o2b6o5b2o4b2obob3ob
2obob2ob3o2bob2o4bo4bobob3obo$9ob2o4b2o3bo2bo3bobo3bob2o2b3ob5o5b5ob2o
b2obo8b2o2bo4b2obo3b2o4bo2bob7obo4bo2b2o3bob2ob2o2bob3obob2obobo3bob5o
2b5o2bob3obo3bobo2b2o2bob2ob2obob3obo4b2o2bo2bob7obo4b4o3bob2o2b4o4bo
6b2o$3o7bo5bob4obo2b2o2b3o2b3o4bob4o3bo2b2o2bob2o2b5o3b5o2b2o2b2o2b2ob
2o4bo2b3ob2obobob3ob2o2bob2o6b2ob2obob2o2bo2b2ob2o2b2ob3obobo5bobob3ob
4o2bobobob3o3bo4b3o2bobobo6bo2bo4b3obob2o5bo4bobobob3o6bo$4bobobob3ob
3o4bob2o2b2o3b3ob3o2b2obobo2bobob3obo2b2o3bo2b2obobob2ob2ob2ob2obob3o
2b2o2bob2ob3o3b2o2bo2bo2b2o2b2obob2o2bobo2bo3bo6b3o3b4ob2o2bob2o4bo2b
3obo4bobob2obo3bobo2b2obob2o5b2o2b3obo2b5ob4obo5b7o3bo3bo$b2obob2ob2o
2bob7o2bobobobob2ob2ob3ob4o5bobo6bob4ob3o2b3ob3o2b4ob2ob2ob4obo3b3o3bo
bobo2bobob2ob2ob4o8b5o2b3o3b4o3bobob2o3b2obo5b2ob2ob2ob4o5bobobobo4b2o
b2obo2b2o2b2ob2obo2bobo2bobo3b2o2b3o3bo2b2ob2o$b3o2b3o2b2ob2obobo2bobo
5bo2bo5b3o2b5obo2bo2bo2bo5b2o2bo2bobo7b7obobobo2b6obobobob2o3bo3bo2bob
5o3b6obo2b3o3bo3bobo3b3o2b5obob2obo2b3ob9obob4ob6o3bob2obo3b2o2bobo3b
4o4bobob4o4b3o2b4o$2b2ob2o2b7ob5o4bo2bo3b2obo3bo3b3ob2ob5obob4ob3ob2o
2b2obob4o2b2o4b3obob2o13b2ob2ob3obobob2o2bob2o2bobo9bo3b10ob3ob2obo2b
4o2b2obob2o2bob2obobobob4o3bob2ob2o2bob3o2bobob4o2b2ob10obobob7o$3b3ob
3obo7b2o2bob3o2bob4o6bo4b2obob3o4b2obo4bo3b2ob6o2bob3o4bo6bob4o3b2ob4o
2b4o3b2o3b5obob2o3b2o2b2o2bobo2bobo2bo2bo2b2o2b2ob3ob3o2bob2ob3obob2o
2bobobo2b2obo2bo7b2o3b4o4bo2bo2bob2o2b2obo4b2ob2o$o2bo4b2o3bob2o2b6obo
2bobo2bo2b3ob6o5b3o2bob5ob2o2bo3bo2bo2bob4o4b3o4b3o2b3o3bo2b2o2bo2bo2b
o2b2o2b2o2b2obo2b2ob2o2bo3bob3obo2bob5obo2bo2bob4o3bo2b3obobob4o13b2ob
3o2bo5bo2b6o3b3ob2o2bobob2o3b4o$b4o2b6o2b2ob3o2b2o3b3o3bo3bo4bo3bo5bo
2b4o5bob3ob2o6b9o2bo2bo6b2ob3o4b3o2bob2ob2ob2o2b3o2bo2bobo2b3o2bo5bobo
b2o2bo2b2o6b2o3bob4ob2obo2bo2bo4bob2obobob7o6b4o4b2ob2o2bo4bo2bo7bo2b
3o$3ob3o2b4o3bobob2ob2o3bo2b4obobo2bo2b2ob3o2bo2bo3bob2o2bo5b3ob3ob2o
2bo5bob2obo3b4obo3bo6bo4bob2obob2ob6o7bob3o2b2o3b2obo2bo4bobobobo2bo4b
3o3bobob2o2b2o3b2ob4obo2bo3b2o3bob2obo2b8o4b4obo3b2obo$4b2o5b2obo2b2o
2b3o3b4obo2bobo5b4obo2b3obo2bob2obo2b2obo4b3ob2ob3o3b3ob6ob2o2b2obo5b
2o3bo2b2obo2b2ob2ob6obob2o3b2o2bo5b3ob2ob3o3b2o7b4obo4b3o2bo3b2ob4o2b
5o2b3o3b2o2bo3bob3obob4o2b2obobobo2b2o2bo$bobo3bo2bo4b4o5b2ob3obobobob
9o3bobobo2b2obo2b3obob2o2bobob2obob2ob2obo3bo3b3obobob2obo3b2o2b5ob3o
2bo4bo3bo3b3o2b3ob2o3bo2bo8b2ob3o2bob11ob3o4b4o3b2o9b4o3bob2o2bobob4ob
2o5bo3bo2bo4b2o$2bo3b3o2b9obobob3o2b5obo7b2obo2bo7b3ob2o2bo2b2ob3obo2b
o2bob2o2b2o2bo5b2o3bo6b2o3bob4o2b2o3bo3b6o3bobob5o4bobob4o2bobob2obob
2ob2o2b2o2b4ob2o9bo2bo2bobo3bobo4b4o2b2obob3o3bob2o2bob2obo2b4o$o2b3ob
7o2b9o5b3ob2o3bobobo3b5o2b2o2bobob2obo11b3o8b2o2bobo2b6obob3o2b4o2bo2b
2obobo2bo2b6obo2b2obobob2o2bobob3o3bobobo2bob3ob2obo2b2ob3ob2o2b3o2b5o
bob3obo2bob2o2bo3b3o5bob4obo4bo4bobob2o$obo5b2o6b2o2b2o3b2obo2b2ob2ob
4ob2o4bo3bobob2obo4b3o2b5o3b2ob5o4b2o2bo7b3o2bo4b4ob4ob5o2bo2b2ob4o2b
3ob6o2bobob2o3bo2bo3bo2b2obobo5bo2bob2obo2b6ob2o3bobo2bo3b2ob2ob5obob
4obob3o7bo4b2ob2o$3bo2bobo2bo5b2obob3o3bo3b2o2bo6bobobo2bo2bob3o2b2ob
2o4b2o3bo3bob2o2bo2b3o3bo3bob2obo2bo2b4o4bob3o3b3obo2b2o2b2ob5o3b2o2b
3ob2ob2obob3o4bob3obo6b3ob2o3bo8bo5b6obo2bo2bobo7bob2o2bobo3b7obob4o$
8obo2b2obo2b2obo2bob2obobo3bob3o3bob3obob3obob6obo6b2obo2b3o2b2o2b3o2b
2obob2o2b3o2b2ob4obo4b4obo3bob2ob2o5bob2obo3bo2bo3bo5bo2b2o3b2o3b4ob4o
b2obob4o4bob3o6bo2bo5b4ob3o4bo2b3o4b3o5b4o2bo$ob5obo2b2obo2bo4bob5o2bo
bo3b3o6b3o6bo3bobo2bob3ob2o7b5o6b2o4bobobobo3bobo3b4obobob3o2bobob2obo
3b3o2b2ob6ob6o2bo2b6o4bo2bo2b2o2bo2bobobo2b3o3bo5b2o3b8ob2o3b2ob2ob2o
2bob4o2b2obob4o2b2o$3b3ob3obo7b5o8bob4o2bobo2bobo4b3ob3o6b3ob2o2bo2b3o
2b2o7b3o2bo3b3ob7o5b3obob4o2b3o2b3o2bo2bo5bobo3b3o2b4o8bo3b3o5b4o2bob
2o3bo10bo2bobob2obo2b3ob3o2b5o2bobobo3b2ob5o2b2o$3ob2o2b2o4bobobo2b2o
2b2obo4bobobo3bob3o5bo4bo3bob3o4b2o4b2o3bo2bob4ob6o2bobobo2bobobo5bobo
bo2bo2bob2ob2o5b2o2bob2o2b2o3bobo2b2o5b7o2b2ob3o2b2ob2ob4o4bo5b3obo2bo
2b3obob2ob3o3bob7o2b4o4bo3b2o2b2o$3bo3bob2ob2o2b3o2b2obo2bo4bo3bo4b2ob
8o2bobo2bo3bo2bo2bo3b2obo2b2o3b2o5b5obo3bo3bobob2o3bo2b2o2b2obo4b3o7b
2o3b3o3b4obo4b2o2b5o3bo2bo2bo3b6ob2o2b3ob3o4b2obo2b3ob5ob3o3bobo4bob2o
bo4b2obo3bo$4b4ob5o2b3obobo2bo2b2o2b3obo5bo5b3ob4o3bo3b2ob3o3bo3b5o2bo
bo3bo6bo6bobo7b2ob2ob3obo4bo2bo3bob2obob2o2b7o3b2ob2obob3o4b2ob3o2b3ob
o3bob3ob2ob3o2bo4bo2b4o2b3o2b3obob2o2b3obob3obobo2b2obo2bob2o$2o3b2obo
2bob6o3b2o2b3obob2o3b3o2bob3obo2bobo3b4ob2o5b2ob2ob2obob2o2b3obob2ob3o
2b2o4b3o2bo4b2ob5ob2obob2o5bo4bob4ob4ob3o2b2obobob2ob2obobobo3b4ob3o2b
o2b2o2b2obo2bo2b4obob2o3b2obob2o2bob2obo2bobobobob4obo2b4o$o2bob3ob3ob
2obobob2o2b2o4b5o2bob2o3bo4b3o3bobobo2bob2o3b3ob7o3b5ob3o2bob7ob3obobo
b6ob2obo2b2o4bo4bo2b3obo6bo2b5ob4o2b5ob6ob3ob10obobo2b2o4b2o2b3o2bo2b
2obob3ob8o4b2ob2o3b2o4bob2o$2bo2bo3b2o4b2ob6obobo3b4obo5b2o2bobobo2b2o
2b9ob2ob4o2bo3b2o3b3ob3ob5obo5bo3bo2bo4bob6o3bo2b3o2b4ob3obo4bobob4obo
b2o4bob2obobobobob2obo2bobobob4obobob4o3bo6bo5bo2b3o3b3obo2bo4bo2bo3bo
2bo$3ob2o3b2obobobo2bo4b2obo2bobob3obob2o4bobobob3o11b2o2b2obo2bo3b4o
3b3obobobob4o4bobob2obo2b2o3b3o5bob4obobobobob2obob2obo5bobob2o3b2o2b
2obobob2o2bob2o2b2o7bo3b2o3b2o3b3obo4b4ob5o2bobo2bob2ob3obo2bo2bobo$2b
3obo2bo2b3o2b2o3b3o2b4ob2obob4o2bob4o3b2obobo2bo8b3ob2o2b5ob5o2b2ob2o
5b2o2bob2ob2ob3obo2bob5obob2ob3o2b2ob2obo2bo2b2obo2bob2ob2ob3obo2b2ob
3ob4obobo9bobo2b4o3bobo2bobob2ob3o3bo3bob2ob2o11b2ob2o3bo$2b3o7bo2bo3b
ob3obo3bob2ob2ob5obo3bobob3ob4obo3b3o4bobob5ob7ob2o2b2o4bo3b4ob6obob3o
bobo3bob2obo5b2ob2obo3bo2b2o2b2obo3b2o3bob4o2b3o3b2obobob2o2bo2b8o3b3o
b5o3b2ob2o4bo2bob2o2b2o2bo6b3o2bobo$2obobob2o3bo2bo2bobo8bo2b3o2bob4o
2bobo2bo3b4o3bobob2o4b2o4b2obob4o2bob2ob3ob5ob3obo2b2ob3obo2bob2ob6o2b
obo5bobo2bo5b4o2bo3bobob5o4b2ob4ob2o5bob2o3b2obob3o2bo2b4obo3bo2b2obo
3b2o3b2o2bo3b3ob2ob2o2b2o$3b2o2b2obo2b2ob4o6bobo4bo2bob2o3b4o4b3o3b2ob
4o2b3obo3b3o2b3o4bobob3obob4ob4obo3bo3b2o3b2o2b2o2bob3obobo2b5obob4obo
4bo2bob2obo3b2obo3bob2o4b2o3bo4b3o3bobo4b4o3b2o3bob3o2bobob3o2bo2bo3bo
b4o6b2o$3b2ob3o3bo3b5obo2bo2bo2b2ob3obo2b7o2bob4o2bob7o2bobob2ob2o2b2o
b8ob3obo3b3o3bobo3b2o4bo2bob5o2bo5bo2bobob4ob5ob2ob3o5bo4bob2o5bobobo
3bobob3o3bo2bo5bo2b5o4b6o4bo3bob2obob2ob2o2b2ob2o$obob2obobob6o2bo2bo
2b3obob2o4bo5b5ob2o3b2o3b3o6b2o4bob3o2bobob7o3b2o3bo5bob3o2bo2bob2o2bo
bo3bo2b4o2b2o3b3o2b2ob2o3bo2bob8o2bo2bo2b2o7b4o4b2o3bo2bo3b3o2b3obo2bo
b4o2b5obobobo5bo4bobobo2b2o$2bo4b3obob5o3b2o2bo2b2obo3b2obo3bo3b5o3b4o
2b3obob6o5b3o5bo2b8o5bo2b2o2b4o3bobo7bobobo3bobobo7bobob4o6b5o2b3o4b2o
3bobobob2o2bo3bobo4bobo4bo3bo3b4ob3ob3obob3ob2ob2ob5o3b3ob4o$bobob5o3b
o3b2ob2o2bo2bobo2b6ob2o3b2ob2o2b3obobo2bo2bo11b4o6bo2bo2bob2o2bob6ob2o
3b2o2bo5bo3bo4b2o7b2ob2ob3o3bo4b2o2b3o3bob2obobobo2b4o5b2obob3o5bo2b2o
b2o2b2o3b4o5b2o4bo3bob2ob3o2bo4bobo2bo$3obo4b3o3b2o5bob3obobob8o2bo3b
2obob3o2b5obobo2b5obo2bo2b6ob3obo8b2obo3bobob2o2b4o3b3o2bobobobob3obob
6obo2b4o3b3o2bobo2b2obo3bo4bo2b6ob2ob5ob3obo2b4o2b3obob3o3bo2bobo4b2o
2bobob2obobo2bo2b2o$3b2obo2bob5o2b2o3b2o2b2o3bo2bobobobo3bobo2bo3b3ob
7ob3o2bob3ob7ob3obobo2bobob5ob3o3b2obob3obo2b2o2b2ob2ob5ob2ob3o2b2obo
4b2obo2bo4b3ob6o3bo7bo2bob3obobobo4b2o5bo4b5ob3o2bob5o2b3ob3ob2obob3ob
o$2o2b3o2bo3bobobobo3b2obo2b7ob3o2bo3b6obo4b2o2b3ob2o2bo2b2obobob2ob2o
bob4o8bo6bo3bob6obobo6bobob2ob2ob3obo3bobo6b2o3bo3bobo5bo3b2o5bob3ob8o
bo3bobo2b2ob2o4bobo3bob4o10bobo2bob3obob2o$bo2b2o2bob2ob3o2bo2bobobob
3obo4b4obo3bo3bo2bo2b2ob2o3b7o5bob2obo2bo5bo2bo4b2o2bob2o4bo3bob2o2bob
obo4bo6b2obobob2ob3ob7o4bo3bo2bob3ob2obo3bo2bo3b3o2bobo5bo2bob5o3b5o4b
o4bobobob4o3b3ob2ob3o2bobo$bob3o2b2obobobo3b2o4b4ob3o3b5obo2bo2bo2bobo
bo2bo2b2ob3o2b3o3bob2obob3ob5obo3bo3b5o3b2ob4o3bobobo2b3o2b2ob3obobob
3obo2bo2b2ob2obobob2obobobobob5obob3obo4bo3bo3bo2bob13o3b3ob4obo2bobo
4bob2obo5b6o$bo2b2o3b3o5b2ob8ob2o3bo2bob2obo4bobob2ob2o3bo4b3obo2b2obo
2bobob3ob2o4bo3b2ob3o2b2o2bobobob2o2bo2b2ob3o3b3obo5b3ob2obo3b2ob5o3b
2o2b3o3b6obob3o3b5ob2ob2ob3ob3o2bob5obo2bo2bo2bo3bo2b3ob2obob2o2bobo2b
3ob2o$4ob2o4b2o4b2ob2o2b3obob7o4b4obo2b2obob3obobob2o4b3o2b3ob2o3b6obo
3bobo2b3o5b2o5b4ob2o3b2ob2o6bo3bo5b2ob4o4bob2o2bob6ob4obob3obobo4b2obo
3b2o3bo2b2ob4ob3o2bo3bo2bo3bo2bo3bo2bo7bo2bob2o$ob6obo3b5obobobo4b3o2b
o2bob2o2bo2bob3o2b6obo2b2obobo2b2ob2ob2ob2obo4bo3b4obo2b2ob7ob2ob2o4b
3obobo10b3ob4o4bo2b2o2bob2obobobobo2bo7bo6bobo3bo3bo6b2o2b2ob3o2bo2b2o
6bo2b2obo3b4o2bo7b2ob3o$o2b5o2bo6bobob2obobo2b3o3b2o2b2o2b4ob2o2bo2b2o
bo5bob2o2b3o2bo4b6obo3bob2obo2b2ob3ob2o2b2o5b3o4b3o3bobob4obobob2obo4b
ob2o3b4o6b2o2bob3o2bobo2b3ob2o2b2obo5b2obo4bo2bob3o4b5ob2o2b4ob4o4b2ob
obo2bo$3b2ob2o4b2o2b2o2bobo2b2o2bo2bobobob6ob2o2b5obob2o2bobob2obob3ob
o4bo2bo4b2o6bo7b3obo3b2o3b2o4bobo5bo4bobo2b2o3b2obo2b6o2bobo2bobob3ob
5obob2ob2o2bobobobo3bobobo3b4ob3o2b3ob4o4b2ob4obo2b3o3bob4o2bobo$b4ob
4obobo4bobo3bobo4bobo2bo2b3o3b2obo8bo2bobo2bo2b2o2bobo2b2obo5b2o6b2ob
2o5bob2o2bobob2o2bo4b5ob2o2bo4bobo2b2ob2o6b2ob4obo2bobob3obo2b5o2b2o6b
3o4bobobo3bobobobobob2obo2bobobobo5bob2o3bo2b3o2b5o$obob3o4b2o3b2o4bo
3bob2ob2obob2ob2obo4b2ob3o2bo2b2obob3obo6bo2b6o3bob3o2bo3b2ob2o2b4ob2o
b2o2b2o2bobobo2bob2o2bo4bo5bo10b2o3b3o2b2ob2o3bobo2bo2b2obo3bo2b5o2bob
4o3bo6b3o2bobob3ob3obobobobo5bo2bobo2bo$bo5bob3obob2o2bob3obo5bobo3b5o
b6o2b2obo2b2o3b2o2b2o7b2o3bo2b2o2b2obo2bobob2obo2bob5ob4o3b2ob2o5bo3bo
3bo2bo2b2obobo2b3ob3obob2obobo2b2o4b2ob3obo2bo2b3ob3o3b2ob4ob5o2bobobo
b2o3b4o2b3obo2b2ob2o2bo4b5o$b2o3b2ob3o8b2o3bobob3o2b5obobobo4b2o2b2o4b
o2bobo2bo3b2obo2bo3b3ob3o3b5o2b2obob5ob2o2bob5ob2obo4b2o2b4o2b2ob7o3bo
2b2o2bo2b2o5bobo3bo2bo3b2obo2b3o3b7o4bo4b4o2b2obob4obobob2o2bob2obo2bo
2b3obo$b3o2bobo5bobobobobobobo2b2ob2o3b5ob3ob3ob2obo5bobo2b6ob4ob2obob
2o3b3obob3o5b3o2bo2bo2b3o4b3o3bobo2b4obo2b2ob2ob2ob3ob2o5b2o5bobo3b2ob
2ob3o3b2o4bobobo2b3o2bo3bob2ob2o3bo2b2o2b2o3bo2b2obobo3b2ob2obob2obob
3o$2o3b2obob3ob2obo5bo3bo2bo2bob4obo2bob5o3bo6b2o2bob3obobo4bob3ob2obo
2b2obo2bob6ob3obob2obo4bob2obo2bobob2o2bo2b2o2bo2b6o2bobo2b2obo2b2o2b
2o2bob2o2b2o3bob3o3b3obo2bo2b2ob5o4bob2obob5o2bobobobobob4obo3b3o2bo$
3bob2o3bo2b2o4bobobobob3ob7o2bo2bobo6b3o4b4obob2o2bobob2obob4ob3obo5bo
2b3obobo3bob6o2b3o2bob2o2b3o2bo3bob2o3bob2ob3obob5o4b4obobo2b4ob2ob2o
3bob2obo2b2ob6o4b3o3bobob2ob2ob2o2b2ob4obobo3b2ob3obo3bo$ob2obob7obo3b
o3b2ob5o3bo2b2o2bob2o4b2obo3bo2bob5obob2ob2obobob2obobo2b3obo5b2obo2bo
b5obob2ob7o5bobobo3b2obo2b2obobob2o2b2o3b2obob4o3b4obo2bobo2bo2bo2b2o
3bo2b2o2b2o2bo2b2o3b2o2bo2b2o2b2o4b4o3bobo2b6ob4obo$b2ob4ob2o2b2o3bobo
bo2bo2b3o4b2o6bo3b4o4bo2b2ob3o2bobob3o2bo3bobob3ob3o3bobo4bo2bo2bo2bob
obo5b2ob2o3b3obob4o2b2obo2b2o2b2obo2b4o4b3o2b4obob2obo2b2o4bo2bo4b6ob
4o2b2ob2o3b2ob2ob2ob2obob2o4bo2bo2b2obob8o$obob3obob4ob4o2bo2bo3b2o2b
3o2b4o2b4ob2o2bob7o2b2o2bob3ob10obob3ob2o4b2obo4bob5ob3o3bo5b5o2b2o2bo
b2o2bob2obo3bob5o3bo5bobo4bobobo4b3ob2o2b2o4bo2b3o2bo2bobob4obo2b9ob2o
bo4b3o3bobo2b3ob2o$2ob2o2bobobob2obob2obo2b6o2b2obob6o3b2obo3b3o2b3ob
5o3b3o2bo6bo4bob3obo3b2o2b2o2b3ob2obobo2bob2obob3ob2o2bo4bo7b3o2bo2b5o
5bo2b3ob5ob2o3b2ob2o5bobo2bo3b2o4bo3b2ob4o4b2obobobobo2bo2b4obo3bob3ob
4o$obo4b2obo3bobobo2bo2bob2o2b2obobo2bo2b3o4bo2bobo2bob3o2b3ob3obobo4b
ob3obo2b2obob4obob4ob2o2b3o6bo5bo6bo3bo9b2obo2bobo3b2o2b3o3bob2ob3o3b
6o4bo5b2o2bo4bobobo2bo2bob3obo5b2obo3b4o3b3ob3obob2ob2obo$bo3b2obobo2b
obob4ob2ob6obob3ob2o3bob7obob2o2bo3b2o2bo2b3ob3obo2b2ob3o4bo2b2o2bob2o
bo3bo2b5obobo3b2ob2ob4o4b2obobob2obo2bo2bo2b3ob2ob4o2bob4obob3ob3o5b2o
4bo2b2obob2o3b5ob3ob2o3bo3bobob2o2bobobo2bo2b2o3b5o$bobobo2bo2b2o3b5ob
3o4bo2bo3b3o3bobo3b2o2bob2o2bo6b3ob3ob2ob2o3b2o2bo3bob2o3bo5b2obo2b2ob
o16b4obobo2bo2b2o2b6ob3o2b2o2bobob2ob2o3b9obo2b3o3b2o2b3o2b2o2b3o2bob
6o2b3o2b3o2bobo3b6o2b2obo5bo$4ob2obo4b2o2bo2bobob5o2b5o2bob3o5b7obo5bo
b3obob3o4bo2bobobo2bo2bo4b3o6bob2o3b2o3bo4b2o2bobo2bobobo3b2o2b2obo3b
3o2bob2ob2o2b2o3bo2bob2obobobob2o2b2obob5o4b3obo2b4o4b2o3b3obobob3obob
2o3bobobobo2bo3b2o$3o2b2ob3o2b3o5bo2bobo8bob3obo3b4obobob2obo5b3o2bo5b
ob4obo4bo5b2o2b2o3bob2ob3obobobo2bo7bobo2b2o2bob2obo6bo4b2o5bo3b4o3bob
obo2bo2b2obo4bo2bob2ob2obo3b2o3b3o4b6o2b2obo2bo2b2o2bob2o2bobo2bobo2bo
$o2bob3ob2o6bo2bo3b4obobo2b2obobobo2b2ob2ob2o2bo6b2ob2ob3obo2b3o2b2ob
2o2bo3bo2bobobobo2b2ob3obobo2b3o2b2obobob2o4b2obo5bo3bob2ob4o5bo4b3o3b
2o4bo4b2ob4o2b2o2b2o2b3o2b2obo2bo8b3o2b3obo3b2o7b2ob2o3bob2ob2o$obo2bo
2b2o2bo2b2ob3o4bobo3bobo3b2obo3bob4o2b2o2b3o5bo2b2obo2bo4b8ob2ob3obob
3obob3obo3bob2ob3obob3ob4o5b4obo2b2obo4bo5bobo3bo2b3obo3b3obobobobobo
2b2obo3b5ob2obo2bo2b6o4bo3bo2bo2b4o2b2o2b2obo4b3o$2bo2bobob2o4bobo2bo
5bobobo2bo2bob3o4bob3o3b3ob2obobo4b6o4bobob4o2b6o2bo3bob2ob8o4bob2o7b
2obob3ob3o2b3ob2ob3ob3ob2o2bobo2b2ob2o3b6o5bo3b2o3b5o3b5o3bobob2obobo
10bob3obo2bobob2ob2o3b4o$7bobob3ob5obo2b5obo3bo2bo2bobo5b2o3bob3obo3bo
3bo4bob4obob5o3bo2b2o2b2o4bo2bo2b2o2bobobob3obobob6o2b2o3bobo4bob2ob3o
bo2bob3o2b4o2bobobo2bo2bo5bo3bo3b5ob2o5b3o2b3o5bo2b2obobo2b5ob2o3b3ob
2ob5o$4b3obo4b2o7b2ob2o3b4obo3b3ob2obob6o2b2o4bob4o2b2obob4obo2b2o3bo
2bobo12b3obo4bo2bob3o2bo2bob5o3bobobob2obo2bob3o2bo3bobo2b3o2b2ob3o4bo
b3o3b3o3bobobo2bob2ob3obob2obobo2bobobobob5ob4obobo2b2o2bo3b2o$ob2ob4o
2bo2b2o2bo2bobobob3ob4o3bob2o6bo4b3o2b2o2bo2bob6o7bo2bo4b2o2b3o2bobo2b
o2b2ob2ob2ob2o2b2obobo5b3o2b3obo2bob2o3bo4b2o3b4obobob2o5b4obobob3o6bo
bobo6bobo3b3obo3b2ob3ob3obo7b2o2b2obo5b2o2b2o$3ob2o2b3ob3o3b2o2b2o3bob
5ob4o3bo3b2ob2obo6bob2obo3bo2b3ob3o2bo4b4obobob2o2b3ob5o4b2obobo2b3obo
4bobobo3b2ob2obo4b2obo2b2ob3o4bo2b4o3bo6b2o3bobobo2b3obob3ob2ob2o3bob
2o4b3obo2b2o3bo2b2o2bob2o2bob3o2bob2o$4o3b5o2bo6bo3b3obo2bobobo5b5obob
2obob2obo3bob3obo2bobo4bob3o2b2o3b3o2b2ob2obo4bo3bo3b2o3bo5bo2b2obo2bo
bobobobo2b5o2bo3b5o2b3o2bob2obob2o10b3ob3o4bo2bob3obo6bob4obobo2b2o2bo
b3o3bo3bob4obob3o$4o2bob2o3bob2o3b2ob2obo5b2obo2b2o2b2obob2obobob6obob
3o2bobobobob2ob3obo2b3o4b2obob8o2bo2bobob5o2b2o4b3o4bo2b2o2b2o2bo2bobo
2bobobobob2o3b2o2bo4bo3b2o2bo4bo3bo2b2obobo2b2o2b2obobobo3b4o2b3obob2o
4b2o6b7o2bo$ob3obobob2o3b5ob4obobo2bob2o2bobob3ob6obo2b2ob6o3bo2b2o6bo
3b2o3b3ob4ob2o3bob4o2b6o3b2obo4b2o2bo2b2ob3ob2o4b2o2bobo3bo2bob2o3b2o
4bo2bob2obo3b2o3b2ob3obob2o2b6o3bobo3b3obo2bo4b3o2bobo2b4o3bo2bobo$3ob
2o3b2obob3obobo2b2o3b6o2b2o2bob2obobobob7ob2o3bo2b2ob2obob3ob2ob3ob4o
2bob2o5bob2o2b2o2b7obo3b4obob5ob2o3b2ob2o2b2o2b2obo3b3obo2bobobobob2o
6b2ob2o2b2ob3ob2obobo3bob2ob2o5b2obo3b3obob3obob3obob4ob2ob2o$bo2bobo
3bo2b4o2bo2bo3bobobobo2bo3b3o5b3ob2obobob4obo2bob6ob5o5b2obo2b4o5b3o3b
obo6bo5bo5bob3ob3obo3bo2bob4o2bobobobo3bo4b3obo2b3obo3bob2o3bob3ob9obo
bob3obo2b2o2bo2b4obob2o2b2ob4obobo6bobo$2b5o5bo2b2o2b6ob2o2b2o2b2ob2o
3bobo2bo2bobo2bo2b2o3b5ob2o2b2o4b2o2bob2o5bob4o2b2o8bo4b2o2bob2o2bo2bo
b3o2bob2obob2obob3ob2ob2ob4ob3ob5ob5o2bo2b3ob3o4bob2obob9ob3o5bob7ob3o
b3o2b3o2bobob3obo2bo$b3ob2obob2obobob3o3b2obob3obo4b2ob5o4b2ob2o4b2o3b
o4bo3b5o2b2ob3o2b2o2bobobob3ob3o2bo3b2o5bo2bo2b6o2bob2obob3o3b2o4b3ob
2obobo4bo3bo2b3o2b5o2b2o6b3o2bob3obob4o2b4obobobob2obo4bobobo5bo2b3obo
3bo3bo$b2ob3ob3ob5ob2o3b2o6bo2b5ob2obo2b2obo5bobobo3bob3o3bo2bo3bo2bob
3o2bo3b3o2bo2bobo2bo3bob3ob2o3b6obo2b2obob4o6bob4o2bob2o2bo2b2o3b3obob
2obo5bo2bob4o2b2o2b4ob2ob2o4b2o4bob2obobo4b2o3b3o3bo2bo5b2obobo$3o3bo
7b3o2bo2bob5o2b3o2b4obob2o2bo2bo2b3ob3ob2ob3o2b2o10bo2b8obo4bob2obo2b
2ob4ob2o2bob2ob4o2b8ob3o4bobo3bo3b3o3bo2b2o2bo4bob2obob3o2b3o2bob3ob2o
3bo2bo2b2o6bo2bobobo2b2obo2b2obobo2bobobobobo6bo$o3b2o6bo2b2o2b4o2b6ob
ob2o4b2ob2obob2ob3o3bo2b2obo2b2o3b4ob2o2b6ob2ob5obo4bob5o3bo2b4obobo2b
2ob3obo4b2o2b5obo3b2o2bo9b4o3bo4bob3o4bo4b2o4bo3bob2ob2obo3bob2ob4ob2o
2bobob2obob3obobo5b4ob2o$obo2b4obo3bob3o3bo5bo2b3obo3bo2b5ob2obo4b2ob
3o2b4o14b4o5bo6bo2b2o2bo7bo3b2o2b2obo3b3o2b3obo2bo2bo4bo2b4o5bo2b2o2bo
bobo3b2o2bobo3b2o2bo2b2o3bob2o2bo3b5obo3b11o6b4obo4bo3b7o$b6obob2obo2b
ob3ob2o3bo2b5o2bo3bob3ob2ob7o4bo4bob2ob4obo3b3ob2o2b2ob6o2bob8obo2bo3b
3ob2o2b2o2b2o7bobo2bo2bo4b2obo3b4ob2o2b4obob2o5bobobobo3b4obo3bo2b4obo
2bo3b4ob2o2b2obo2bob2obobo2b2o2b2obo3bob2o$b3obo2b4o2bo2b2ob4o2bo5bob
4obo2bobo4bo4bobob2obobobobobobo2bobob2o3b2o2bo2bo4bo2b6o2b5obo2bob3ob
obob3ob3obobobo2bob5obob3o2b2ob7obo6bo5bobobo3bo2b2ob2o3b2obo2bob2obo
5bo4b2o4b2ob2obob2ob2ob6obo4b2o$3bob2ob4ob4o6b3o2bo2bo3bobobob4obobo2b
7ob4ob4o3bobo3b3ob2o2bo7bo2b3ob6o5bobobo2bo2bo2bo2b2ob2ob2obo3bobo3bo
3bo2b2ob3o2b4o2b2o2bob4o5b3o2bo2b2o4b2ob4ob4obob6o4bo3b4o2bobo3bobo2bo
3b2o2bo3bo$obobo2b3o3bo2b6o2b2ob2obo4b2ob6o2bo6b4o2b2obob2ob2o2b2ob3ob
2ob2obobob4o2bobob2ob2obob2o2b4obob2obo4b2o2bo2b5obob6o2b4o3b4obob2ob
2obobobobo3bobo4b2o2bo4bo2bo2bo3b3o2b2ob3obo2b5ob2o2bo3bob2o2bo2bo4bo
2bob2o$2b2ob2ob2o2bobo3b2o4b3obobobo3bo2bobo2b4o3b2o2b2ob2o5b3ob3o3bo
2b2ob2ob2ob2obo3b2ob3obo2b2o8b2o2bobobobobobobob2o2bobo5bobobo2bo3b2ob
2ob3o2b3ob2obo2bo2b2ob2obobobobob2o2b3obob3ob2obo2b2obobobob2ob4o3b2ob
5ob2o5b2o3bo$2ob7obob5o2bo2b2ob2ob2obob5o5b3obob5o2bobob2ob2o2bobobo2b
ob3o3b7o2b2o2bo2bo4bobo3bob4obo2bo2bo2bobo2b3o5b3o3bo2bobobo4bo3bob2ob
ob2ob2o3bob4o3bo5bo2bo3b3ob3o2b2o3b5obo3bobo4bob2ob3ob2obo8bo2bo$2o2bo
bo6bo4bo2bo3bo4bob2ob4o2b4o3bo4bo2b3o2bo5bob5ob2o2bob2ob5obo2bo3b3o7bo
4b2o2bo3b2obo2b2o2b2obob2o2b2o4bo6b4o3bo4bob3ob3obobobo2b2o3bobobo3b2o
bobob3ob4o5bobob2o3bo8bobo2bo3bo5b3o2bo$b2obobob2o4bobob2o2bo4bob2o3b
3o2bo2bobob2o3b2o3b2o3bo7b3obo5bobo5bo2b2obobob2o4b2obob2o5b2o2bob3o3b
2ob2obo2b3o2bobo3b5o2bo3bobo3bo5b7o3bobo2b2o3b2o2bobob2obo2bo2bob2ob2o
b2o4bob2obo2b2ob3obob3obob7o2b2o$2obobob3obo3b2o2bobobob3obobobob3o2bo
2b2ob2ob2o2b2ob6o2bobo8bo2b4o4b2o3b4o3bo3bobob2ob5obobo2bobo2b3o2bo5bo
bob2ob3o6bo3bo3b2o5b2obob5o2b2o2bo2bobo3b2ob2o3bo4bob2o2bo5b4obo2b3ob
2o2bobo2b4obo6b2ob2o$bob2o3b5o5bo2b3ob2obob3o5b3obobo6bobob2obo2b3ob3o
2b2ob2ob3o3bob3o4bob2o2b2o2b2ob5o6bob6ob2o2bobo3bob2obob2o3bobob3o2b2o
2bo4b3obo2bo2b6o2b2obob5obo4bo4b2obob2ob3o2b2o2b2o3b5obobo4bo2b5obo3b
3o$2obo2b3o2bobob4o2bob3o2bob2o4b3ob2o6b2obobob5o3bo2bobo3b2obobob2o2b
o3b4obo6b2o6bob3o3bo4bobo2bo2b2o2bobobob11o3bo6b4o2bo2bob5o3b2ob8obo4b
obo3b2o2bob7o2b3o2bo2b3obobob8o2b3o3bo2bob2o$2b3ob2obob9obo3b3obobo2b
5obo9b2o2bob3obob4o3b2o3bobobobo2b4ob3o2b2obo5b3ob2o2bobo2bo2bo3bo2b3o
2b6obo3bob2ob4o2bo3bo7b2ob3o2bo3bob2o4bob2o2bob2obob2o2b7o2b3o2bobobob
o5bo2bo2bo2bob2ob2obobob2o3b2o$2ob4o2b2o5b3o4bob2obo3b2o5b4o2bo3bobo3b
7ob2o5bo3b5o2bob2ob6o2b2ob2ob3ob2o2bobob2o2bo3b3ob4o2bob2o2b4ob2obob2o
b2ob2o2b3o3bo2bo4bobob3ob2ob2ob2obo2b3o5b8o4bo3bo3b2o2b5ob2o2b3obo2bo
2bobo4bob2obo$3ob3o7b4o4bobob7obo2b2obo2bobo4b2o2b4o2b2obo9b2ob4ob2o2b
o3b2ob2ob2obobob2o2b4o4b2ob5obo3bo3b2o2bo2bo3b2ob3o2bo2b4obo2b4obo3b2o
b2o3b2obo2bo2b3o2bo2bo3bobo5bobo5b4o3bo8b2obo7b2o2bobo2b2obo$b2o3b4ob
4ob2ob3o2bob3obob2o2b5obo2b2obob2o5b2o2bo2b2o2b3o3bo2bob2ob2o3bob3obo
7bo4b3obo2bo3b3o2bobo2bo2b2obobo2bob5ob2o3bo2bobob3o2b2o2bob2obob2obob
o2bo2bob3ob2o3b2obo4bo8bob2obobo3b2ob4ob2ob3o2b2o2bo2b3ob2obo$ob2obob
2o5b4ob2obobo3bobob2o2b2o3bob4obo5bo2bo3b2obob2o2bo4bo5b3obobo4b5o4b2o
b3obo4bo4bob7o2b2o2bo3bo3bo2bo2bo2b3o3b4ob3obo2bo2bo2bo3bobobo2bo3bo4b
o8b3o4bo2bo5b2obob3o2b2o2b2obo5bobobob6o$5b2o2bobob2ob3o5bob4obob2ob3o
2bo2bob3o2b3o4bobob3o2b2o2bo2bob3obobo2bo3b5o2bo3bob4ob5o2bo3bo4b4ob2o
3bo2bob4o5bo2bob4o3bob3ob3o3bobob2ob5obobo2bo2b5o2bobo3bo2bobo2b3o2b3o
b3ob3o2b2obob3o2b2ob3o4bobo$o4bobo2b3obo2bo5bo2b2obobo2bobo7b2ob3ob2ob
2ob2o3bob2obo3b2o3bobob5o3b2ob3o4bobo2bo3bo2b2ob3ob3ob2o3b2o5bo4bo3b3o
2b2o5b3o2bobo2bo2bob4ob2obo2b4o6b2ob2o5bobo3bob2obob2ob5ob2obob2obo5bo
bobo2bob3obob2obo$ob2o6bobob5obo3bobobob5o2b2o2b2o2b2obob3o2b7o8b2obob
2o2bo7b2o3bo2b2o5b3obo3b3o2bo2bo2bobo5b4obobo3b2o4b3obob3o2b2o2b2obo2b
obo2bobo2bob2obobo2b3o3bobob2ob2o3bob4obobobob7ob5ob2ob2o2bo3b2o6bobo$
b2ob2o2bo3b4o9b2o3b6o2bobob2ob3o3b3o2b3o3b3o2b4obo3bo3b2obobo2bob5o2bo
2b2o2b3o2b3o2b3o3b2o2bob2obo2b3obo3bo4bo4bobo3b4o2bo4bo4b3o4b3o3b2o2b
2ob4obo3b2obo3bo2b3o6bobo2bo3bo2b3o2bob6ob2o2b2o$bo2b5o6bo2b3ob2o3bo2b
2ob2ob3o2b2o2bob2o4bo2bobo3b2o5b2o2bo2b3o2b3obo2bobo8b2o4b2o3bob4o2b2o
2bo2b2obob3o3b2ob6ob7ob5o5b3ob4o2bo2bo2b3o3b2ob3obo3bobob3obob3o4b3o3b
o2bob2o2b3o4b2o3b2o6b3o$o2bo2bob3o2b3ob6ob2ob3obobobo4bobob2o4b3obo4bo
b4obob4obo2bo3b5o3b3o3b3o3bobo2bo3b5obobo2bo2b3obobo4b2o2bobo2b3ob2ob
2ob2ob2o2bobobob2o2b2o3bo3bo6bo3bo4bo5bo2bo4bo6b3obo2bobob2o3b2o5b5ob
2o2bob3o$5o2b7o3bobobobob2o5b2obo4bobo3b4obo4b3obobobobo3b2o3bo2b3o3b
3o2b3obo4bobo3bob2obo4bob2ob4o3b2obobob4o2bo2bo4b7o5bob2ob4obo2b2obo9b
2obob2ob5o2bob2o4b3obo4bob3o2b3o2bo2b2o2bob2obobo3b3ob3o$o2b3obobo2bob
8obobobo5bobo2bo5bobo6b2o3b4o2bob2ob2obo4b2o3b2obo3b3o2b2obobob3obobo
3bo2bo2bobob2o2bo2b2ob2o4b4obobo3bo2b2o2b4obobobo5b2o2bo2b3obob3o2bob
2ob4ob4o2b2o3b2o4bo2bob2o2b3obo2b4o2bo2b2obob5o2bo$3obo2b3o5b2o2bob2o
2b4obob2obo4b4o2bobobobo5bo4b4obobo2b2o2b6ob2ob3o2b2o4b2ob5obo3b3o2bob
ob5ob3ob2o3b2o3bo2b3ob2obo2bo3b2o5bo3b2o4bo3b2ob4o5bo3b2o2bo3b3o3b2obo
b2o3bo6bob2o3b3ob2obobo2b4obobo2bo$b3ob2ob2o3b2ob3o3b3o2bob2o2bobobo3b
2o2bo3bo4b5o3bobo6bo3b3obo3b5obo5b2o3b2o2b2o2bo10bob2o2b2o3bob2o6bo5bo
b5obob2ob2o5bob5o4b2o5b3obo2b4ob3ob3o2b2o2b2o3bobob2o3bobo2bob2o2b3o3b
o3bob7o$bob3o4b3o3bo2b3ob2obo4bob2o3bo2bobo4b5ob3o4b4o2bobobob5obobob
3obo2b5obo2b3o4bob2obo4b4o2bo5bo2bobo3b2ob2o2bo2bo3bo3b5ob2obo3b3ob3ob
obo2bo3bo2bob2ob2o2b3o3b3o4b3o4bob2o4b2o3b2ob3obobo2bobobo4b3o$2obobob
ob2o2b2obo3b2o3b3o2b2o3bo4b4ob3o3bobo2bob4o3bo4b4ob5ob4o4b2o3bo3b2obob
2o2b2o2bo3b5o5b2o2b2o2b2o4bobobo5b2obobo3b2o3b3ob3o2bo2b2obob3o3b3o2bo
bo5b3obobo2b8o9b2obobob2o3b2o4bob2o2bobobo$3bobobo3b2o6bob2o6bo2b2o5bo
b4ob2o2bo2bobo3b3o2bobo9bo3bob6o2b3ob4o2b3o3bob7o2bob8o3bo2bo4bo2bob4o
2bo2b2o4b3ob2obob3ob2o3bo5bo3b2o4b2o5bobo2b2o2bo12b2obobobo5bobobobobo
2bobob2ob3o$3o2b2o2b2o4bo2bo4bobo3b2ob3o2b5ob3o2b2o3b2ob3o2b2ob2ob2o2b
4o2bob2o2b3o3b2o2bob2o2bo2bob2ob2o3bo3b2obobo2b3obo4bobo3b3o2b2ob2obob
2ob3o3bo3b2o2b5o2b2o3bob2obob2obo2bo2bob3o9b2ob2obo3b3ob3ob2ob2o2bobob
5o4b6o$2ob2ob2obo2b2ob2obo3b2obo9b3o3bob2ob4ob2obobob2o3bob3o3bo2bo2bo
b5obo5bob7o2b2o4bob2o3bobo2b2ob2obo4b2o2b2ob3o8b2obob2obob2o3b2obo3bob
o3bo2b5obobob2o2bo7b4ob5o5bobob6o3bo2b2ob2ob3o2bob3obob3o$b9o2bob3obob
3o3bob2obo2b2ob2obo2bobo2bobob2obo2b9ob2o2b5o2bob3o2bo2bobob3o4bob2o2b
2o2b3obo2bob2obob2ob2o3bobo3b2o3b4obobo7bo2bo4b2obo2b2ob2o3bo3bo4bobob
o4b2o8bobo6bobo2b3o2b2ob5ob8o4bo4bo$2bo8bobob3obo7b6o4bob2o2b2obo5b5o
4b2o3b4o5b2ob5ob3o2bob3o3bo2bobobo2b2o4bobo5bobob5ob3ob4obo4b2o3bo3b2o
bo4b3ob5o3bobo2bo2bo10b2o2b2obobo6bo4b2ob3ob2ob2o3b5o6b4obobob3o$ob2o
4b3o3bo2b2o2b2o6bo2b3o4bo3b2o2b3ob2obo3b4o2bobob4o7bobo3bobob4ob3o2b2o
6bob3ob3obo2bobo2bo2bob2obobo2b2ob2o3b4o3bobob3o2b2ob2o2bobob2ob3o2bo
2b2ob2o4bo3b6o3b2o4bob2o2b2o2bo3bobo3b4ob2o9bob3o$b2o2bobob2o2bo3b2o9b
2obo2bobo2bo3bo2bobo5b2o4b2o2bobo2bobo2b2ob3o9bob3o2bo2bo3bo2bo2b2ob2o
2bob2o4bobob2ob4o2bob2o2bo9b2o2b2o2bo2b8obo2b2obo4b4obob4obo2b3obobo2b
2obob4o4bo2bo2bobobob3o4b4o3bo2b2ob2o$obo2bobob2o3b4o2bobobobobobo3bo
2bo2b7ob2obo2bobob2o5bo2bo2b3o2bo2b2ob4obob3o5bobo2bo2b2o6b2obobo3bo2b
2o2b3o3b3obo5bo3bo3bo3bo3bob2o3bob2o2bob2obob7ob3ob2ob4ob3o3b3ob2ob2o
4b2obob3ob3obobob2o2b4ob2ob3ob2o$7b3obo2b3ob2o2b3obo3b5o2bo3bobo2bob3o
bo3b2ob2obo2b3obo2b3obobo3bo4b2ob2obob4o4b3o2bob3ob2obobo3bo2bob2o2bob
obobo2b3ob2obob2o6b2obobo6bo2bo6bob2ob2o4b4ob3o2b3ob2o3b3o2bo2b6obo2b
4o3bo5b4o2b3ob2o$2bob3o7b2o3bob4o2bobob2o2bobobo5bobo2b2obobob2o3b2obo
2bo4bobob3ob6o2bob3ob4o3b2ob2ob2ob3ob2o3b3obo2bo4bob4obo3bo2bobob3o4b
2obobo2b4o2bobo2bob2ob3o2bob4ob2o3bobob2obo2b3o7b2o7b3obobo4b3o4bob2o
3bobo$bob3o2b2ob3ob4o2b2obob2ob3o2bobob2obobob2o3b2ob3obo2bob4o6bob2o
2b2o2b2o4bo4bob4o3bob3obob3o2bob3o2b5o5b2obob2ob2o4bobob4obobo2bobob3o
8bo2b2obobobobobob2o2b3o3bo3bob2obo2b2o3bo2b2o3bo4bo2b2o2bobobobo4bob
3o$2bo2bob2o2b4ob3ob2o2b2o2bo3b2o2b5ob4o2b4ob3obobo3b6o2bob5obob2o2b5o
3b2o3b3ob2o2b4o2bo2b6o2bob2o3b5obo2b2ob2ob3ob2o4bobob2o2b2o2bob10ob4ob
2obob3o2bo2bobo2b7ob2obob2ob2o2bo2b4ob4o2b9o2bobo$3bo2b2o2bo2b2o2bo2b
3ob3obo4bobo3bo2b3o2bo2b2o4bo2b4o2b2obob3ob2o5bobo2bobobo3b2obob2o3bob
o2bo2b2o3bob3ob3o4b3ob2obob2ob2o3b5o3b7ob2ob3obo3b3ob2o5b7o2bobo2bo3bo
3b3o2bob2o3bo3b3ob3obo4bo3b3o2bo4b3o$b2obo2bo3b2o2b2o11b5o2b2obo2bob2o
bob3obob2ob3ob3o2b4ob2ob4obo2bo2b3o3bo3b2o2bo2b7o2bo2bo3b5obob2ob2o2b
2o3bob3ob2obo2b2ob2ob2ob4o2bo2bob2obo7b4o3bobo3b2o6bo3b2obo2b2ob3obo4b
obob3o2bo3b3obobob3o2b2o$obobobobo2b3ob3ob2o2b3obobo4b2o2b4ob2obo6b2o
2b2obob4obobo2b2obo5bobo2bo2b2o2b2ob4ob2obo3b2ob2obob2ob2o4bob2o4b4ob
2o2b2o2b2o3b2ob2o4bob4o5b2o4bobobo3bobobo6bo3b3obo3b2obo2b4o2bobo3b2o
3b4o2bob3o3bobo2bobo$ob3o2bo7bo2bo2bo3b2obob6ob5obo2b3obo2b3obobo2bob
7o2b3o3b5obobo2bo2bo3bo2b3obob4obo2b2ob2obo2bo2b2obob2o2b2o2b4o4b3o2b
2o2b2o2b2ob3ob3ob2ob3o2b2obo2b3obob5o2b2ob2o2b2o3b4o4bobob3ob4o2b5obob
ob2o4b2o3bo$3bo2b2o6bo2bo3b3o6b3o2bo2b3o4b3obob2ob3ob2o2b2o3b5obobobob
obo2b3o6b2o4bobo6b3o3bob2o4bob3o6bo3b2o2bo4b2obo2b6o5bob2o2b2obo2bobo
4b2ob2o3bo2bo2b3o3b3o3bob2o2b6ob2ob4obob3o3bo2b2o2b7obobo$b3ob2ob4obob
9obob2o2b3ob2o6bobob7o4bo2b2ob4o4bo3bob6ob2ob5o3b3o2b6o2b2obob3o2b3o2b
2o4bo6bobo3b3o3bo2bo2b2o4bobob3ob2ob4ob4o3b5o3bob5ob3obo3bo4bob3obo6b
2ob3ob2obobo3bo8bob2o$2o3bo2b3o2b3ob4obo3b2ob6obo2b4o3b5ob3o3bobobo2b
2o3bo8bo2bob2ob2ob2ob5obobobo3b2ob5o2bo2bobobob3o2b5o3bobob2obo2bo2bob
o2bo2b2o2bo3b6ob4o2bo2bobo2bob4o2b2o3b3obobo10b3o4b2obo5b3o2bobob2ob2o
bobo$7bob2o3b2o2bo3b3ob2o2bo2bo2bo4b2obo2b4o2b3obo6bo6b4o5b2obo2bo5bo
2bobo2bob2obobobo3bobo3bobob4ob4ob6o3b2ob4ob2obobobo12bob2o3b3o2b4ob2o
2bobob3ob2obob3o3b3o2b2obobo3b2o4b2o3bo3bob2obob4o3b2o$4obob5obo2b2o2b
4o2bo4b3o2bob5obo2b3o2b2o2bob2ob4o2b2ob2o2bo2b5ob9obobo2bob2obo2b2obo
4bobobobo2b4obobob6o2b3o2bob3o2b3obo2b2obo3b4ob3obo5bob2o4b3o4bo2b4o3b
6o3b2obo4bo2b2ob2o6bo4b2ob2o3b2obo$ob3ob5o2b4o4bob2obo2bo5b2o2b2o6bo3b
o2bob2ob2ob3o3bobobobo3b3obob2ob3o2b2o2b2ob2o2bob4o3bobo3bobo4bobob7o
2b2o3b2obobobob2ob3o2b2ob3ob4o6b3o5bo2bo3b3o2b2ob2ob3ob2o3b2o2bobo6bob
obobobo4bo2bob4o2b3ob2o$4b2o3bo2bobobo2bo2bob5ob3o5bo5bob2o2b3o2bo2bo
5bob2o3bobobobo2bo3b3ob3o3bob2o3bob2o4b3o2bobo3bo2bob2o3b2obo3b4obob2o
b2obo2b2o4bo2b2o3b2o3bo3bo3bo6bob2ob3o2b3ob2o4bo2bo4bobob3ob3o2bo4bo3b
3ob4ob5obo$bo3bo6b4ob2o11b2obo2bo2bobo2bo2bo2b3o3b3ob3obo2b4o3b2o4b3ob
3ob2o4bobobo2bo5b6obob6ob2o4bo4b2o5bo2bo2bobobo5b2o5b2obobo3b2o5b3ob4o
b2o3bob2o4b7obob2o3bo2bobo2b2obobobobo2b2o2b5obobob3o$o2bo2b3obobo3bob
4o2b2obobob3o2bo2b2ob2o4b2o2b3o2bo3bob2ob3ob3obo3b2o5b4o2bob2obo3bo4bo
2b3ob3o2bob3o2b3o3b7ob3obo3b2obobo2b4o2bob2o2bobobob2o5bo4bob4ob2ob2o
2bo2bob6obob3o2bobo2b2o5bobo2bob2o6bob2ob4o$bo3b2obob6obob3ob5obobo2b
3obob3o2b2o4b8obobo2b3obob2obob2obo3b6o2b3ob2obo3b2o4bobo2bobo2bo3b4o
3b2ob2obob2o3b2o4b2obobobo2bob3o7b4ob2o2bob4o2b2ob4o3bobob4ob3obo2b2ob
3obobo2bobo3bo2b3obobo5bo2bo3b2o$o4bo3bob3o3b3o2b4ob4obo2bo2b3obob4ob
6o2b3o3bo3b5o4b2o2bo2bo3bob3o2b3ob2o3bobo2b4o2b6obob2obobobo2b3obo3b4o
bob4o2b3ob2ob2o4b2o3bobob3o3bobob2o6b3ob3ob2ob3o2bo2bob3o3b2obo5bobob
2o3bobo2bob4o2bobo$3bobo2b3o8bob4o3bo2bo2bo2bo2bo2b2obobo2bo2bo4bo5b4o
b5ob2o2bo2b3o2b2ob5o6b2obobo9bo3b2obob2o5b2obo2bo2b2o5bob2o2b3o2bo2b3o
2b5o3bo3bo3b4ob5ob3obo2bo2b2ob2ob5o2b4obob4o2b3o3b3obo6bo5bo$obo2b2o3b
o2b3o2b3o3bo4b3obobobo2bobo2b2o2b2obob3o4b2o3b3obobo2bobo4bobob2ob2obo
2b3o3b2o2bobob4obo3bobob3o2bo2b2o3b5ob3ob4obob3obob2o6bo2b2ob2obo2b3o
5bob3ob4ob3ob3o4bo2b3obo2bo4b2o6bobobo3bob2obobob3obo$o3bo2b2o2b5o2bo
4bo3bo2bob2ob6obo5b2o3b2ob2ob2obo3bo2bo5bo2bob2ob4o2b3o2bob2ob2o3bobo
2b2o6bo4bob2o2b2o3b6o3bo2b3o2bo2bob2o2b2o2bobob2o3bob4obo2bo3bo4b2o3bo
3b3ob3ob5ob3obobobo3bo4b2obo4b2o4bob2o2bo!
moment

User avatar
Rhombic
Posts: 1072
Joined: June 1st, 2013, 5:41 pm

Re: Script request thread

Post by Rhombic » May 29th, 2017, 1:07 pm

Requesting help to write it myself:
How can I code a script that, for each cell in an oscillator it
- Calculates the oscillation period for that particular cell (i.e. if it is on-on-off-off it's still p4) [probably easy and this is the important bit]
(potentially specifying "trivial" if max(Period_cell)<Period_total)

- Determines whether each highest-period oscillating cell is connected via a number of adjacent P-period cells (P > 1) to itself if and only if its period is a factor of the highest oscillating cell period [secondary point, to determine whether the highest period stators are interacting or non-interacting]
SoL : FreeElectronics : DeadlyEnemies : 6a-ite : Rule X3VI
what is “sesame oil”?

User avatar
dvgrn
Moderator
Posts: 10612
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Script request thread

Post by dvgrn » May 29th, 2017, 5:55 pm

Rhombic wrote:Requesting help to write it myself:
How can I code a script that, for each cell in an oscillator it
- Calculates the oscillation period for that particular cell (i.e. if it is on-on-off-off it's still p4) [probably easy and this is the important bit]
(potentially specifying "trivial" if max(Period_cell)<Period_total)...
Roughly,

1) Find the period P of the whole oscillator;
2) Calculate the sequence of ONs and OFFs for each cell in turn;
3) For each sequence, for each possible subperiod Q, see if the sequence is made up of P/Q identical copies of the same subsequence.

There are various ways to optimize this, mostly by skipping cells that never change -- one easy way would be to start the pattern in state 5 LifeHistory, run the pattern for P ticks, and then ignore any cells that are still state-0 or state-5.

Maybe this part of Jason Summers' Oscillizer code would make a decent outline -- especially the "calculate subperiods" section. Full source code is available here:

Code: Select all

// returns 0 only if the pattern is completely empty
int calculate_things(void)
{
	int x,y,i,p,f;
	int any_life;   // temp flag
	int flag;
	int thisstate,nextstate;
	int heat_total;
	int pop_total_allp; // sum of pop in all generations

	for(i=0;i<period;i++) {
		pop_phase[i]=0;
		heat_phase[i]=0;
	}

	// max extents point to the extreme cells, not one past them
	extent_x_max=extent_y_max=0;
	extent_x_min=width-1;
	extent_y_min=height-1;

	pop_total=0;

	// -- pass 1 --
	// init all cells that are ever ON to the full period,
	// and cells that are never ON to zero.
	// also, calculate populations, etc.
	for(y=0;y<height;y++) {
		for(x=0;x<width;x++) {
			any_life=0;
			for(p=0;p<period;p++) {
				thisstate=getcell(p,x,y);
				nextstate=getcell((p+1)%period,x,y);
				if(thisstate) {
					pop_phase[p]++;
					any_life=1;

					if(x<extent_x_min) extent_x_min=x;
					if(x>extent_x_max) extent_x_max=x;
					if(y<extent_y_min) extent_y_min=y;
					if(y>extent_y_max) extent_y_max=y;
					
				}
				if(thisstate!=nextstate) heat_phase[p]++;

			}
			if(any_life) {
				cellperiod[y*width+x]= period;
				pop_total++;
			}
			else {
				cellperiod[y*width+x]= 0;
			}
		}
	}
	if(pop_phase[0]<1) { return 0; } // no cells!

	heat_total=0;
	pop_total_allp=0;
	pop_min=pop_max=pop_phase[0];
	heat_min=heat_max=heat_phase[0];
	for(i=0;i<period;i++) {
		pop_total_allp+=pop_phase[i];
		if(pop_phase[i]<pop_min) pop_min=pop_phase[i];
		if(pop_phase[i]>pop_max) pop_max=pop_phase[i];
		if(heat_phase[i]<heat_min) heat_min=heat_phase[i];
		if(heat_phase[i]>heat_max) heat_max=heat_phase[i];
		heat_total+=heat_phase[i]++;
	}

	heat_avg = ((double)heat_total)/((double)period);
	pop_avg = ((double)pop_total_allp)/((double)period);

	// calculate factors of period (including 1 and period)

	// calculate subperiods
	for(f=1;f<=(period/2);f++) {  // for each factor except the  full period
		if(period%f) continue; // not a possible subperiod
		for(y=0;y<height;y++) {   // for each cell...
			for(x=0;x<width;x++) {
				if(cellperiod[y*width+x]==period) { // skip cells that are never on,
					                                //and those already calculated
					 flag=1;
					 for(p=0;p<=(period-f-1);p++) {
						 if(getcell(p,x,y)!=getcell(p+f,x,y)) {
							flag=0;
							break;  // not this subperiod
						 }
					 }
					 if(flag) {
						 cellperiod[y*width+x]=f;
					 }
				}
			}
		}
	}

	// count up the subperiod populations
	for(i=0;i<=period;i++) {
		pop_subperiod[i]=0;
	}
	
	for(y=0;y<height;y++) {   // for each cell...
		for(x=0;x<width;x++) {
			i=cellperiod[y*width+x];
			if(i) {
				pop_subperiod[i]++;
			}
		}
	}

	// find the highest subperiod with nonzero population
	period_nontrivial=0;
	for(i=1;i<=period;i++) {
		if(pop_subperiod[i]) period_nontrivial=i;
	}

	pop_rotor=pop_total-pop_subperiod[1];

	return 1;
}

drc
Posts: 1664
Joined: December 3rd, 2015, 4:11 pm

Re: Script request thread

Post by drc » June 4th, 2017, 4:27 pm

Can anybody add functionality so every rule has possibility for gliders? (draw 4 random numbers from the seed function, and pick from these: B2c, B2e, B3a, B3i, none) I've no idea how to program python (below shows I've disallowed boundary expanding transitions)

Code: Select all

import golly as g
import random

random.seed(g.getstring("Random seed(any string): "))

prob = 0.5

isotropicsetS = isotropicsetB = {"0",
                 "1c", "1e",
                 "2c", "2e", "2k", "2a", "2i", "2n",
                 "3c", "3e", "3k", "3a", "3i", "3n", "3y", "3q", "3j", "3r",
                 "4c", "4e", "4k", "4a", "4i", "4n", "4y", "4q", "4j", "4r", "4t", "4w", "4z",
                 "5c", "5e", "5k", "5a", "5i", "5n", "5y", "5q", "5j", "5r",
                 "6c", "6e", "6k", "6a", "6i", "6n",
                 "7c", "7e",
                 "8"}

isotropicsetB.remove("2a")
isotropicsetB.remove("1e")
isotropicsetB.remove("1c")
isotropicsetB.remove("0")
isotropicsetB.remove("2c")
isotropicsetB.remove("2e")
isotropicsetB.remove("3a")
isotropicsetB.remove("3i")

rulestr = "B"

for i in isotropicsetB:
    if random.random() > prob:
        rulestr += i

rulestr = rulestr + "/S"

for i in isotropicsetS:
    if random.random() > prob:
        rulestr += i

g.setrule(rulestr)
# g.setclipstr("Original form of rule: "+rulestr+"/nCanonical form:"+g.getrule())

User avatar
BlinkerSpawn
Posts: 1992
Joined: November 8th, 2014, 8:48 pm
Location: Getting a snacker from R-Bee's

Re: Script request thread

Post by BlinkerSpawn » June 4th, 2017, 7:15 pm

drc wrote:Can anybody add functionality so every rule has possibility for gliders? (draw 4 random numbers from the seed function, and pick from these: B2c, B2e, B3a, B3i, none)
Pretty certain there's errors in this, particularly in lines 31 and 41 (with what I presume is the wrong OR), but this should guarantee that patterns can expand both orthogonally and diagonally:

Code: Select all

import golly as g
import random

random.seed(g.getstring("Random seed(any string): "))

prob = 0.5

isotropicsetS = isotropicsetB = {"0",
                 "1c", "1e",
                 "2c", "2e", "2k", "2a", "2i", "2n",
                 "3c", "3e", "3k", "3a", "3i", "3n", "3y", "3q", "3j", "3r",
                 "4c", "4e", "4k", "4a", "4i", "4n", "4y", "4q", "4j", "4r", "4t", "4w", "4z",
                 "5c", "5e", "5k", "5a", "5i", "5n", "5y", "5q", "5j", "5r",
                 "6c", "6e", "6k", "6a", "6i", "6n",
                 "7c", "7e",
                 "8"}

isotropicsetB.remove("2a")
isotropicsetB.remove("1e")
isotropicsetB.remove("1c")
isotropicsetB.remove("0")
isotropicsetB.remove("2c")
isotropicsetB.remove("2e")
isotropicsetB.remove("3a")
isotropicsetB.remove("3i")

rulestr = "B"

x = random.random()
y = random.random()
while x <= prob || y <= prob:
    x = random.random()
    y = random.random()
if x > prob:
    rulestr += "2e"
if y > prob:
    rulestr += "3a"

x = random.random()
y = random.random()
while x <= prob || y <= prob:
    x = random.random()
    y = random.random()
if x > prob:
    rulestr += "2c"
if y > prob:
    rulestr += "3i"

for i in isotropicsetB:
    if random.random() > prob:
        rulestr += i

rulestr = rulestr + "/S"

for i in isotropicsetS:
    if random.random() > prob:
        rulestr += i

g.setrule(rulestr)
# g.setclipstr("Original form of rule: "+rulestr+"/nCanonical form:"+g.getrule())
Check it before you run it.
LifeWiki: Like Wikipedia but with more spaceships. [citation needed]

Image

drc
Posts: 1664
Joined: December 3rd, 2015, 4:11 pm

Re: Script request thread

Post by drc » June 12th, 2017, 8:21 pm

I would like to see a script that allows you to input a minimum rule, some additional optional transitions, and then the script searches the input pattern (pref. the pattern on the current layer) for spaceships, for example:
Base rule: B3-ckq/S2ace3aeiy
Additional transitions: B2in4-a5-e678/S2kn3-aeiy4-kt5-iq6-c78
Input pattern:

Code: Select all

x = 156, y = 7, rule = B3-ckq/S2ace3aeiy
bo49bo49bo48b3o$3o47b3o47b3o48bo$3o47b3o47b3o$154b2o$154b2o$b2o49b2o
49b2o$b2o49b2o49b2o!
ive asked for this like 5 times lmao what am i doing

User avatar
BlinkerSpawn
Posts: 1992
Joined: November 8th, 2014, 8:48 pm
Location: Getting a snacker from R-Bee's

Re: Script request thread

Post by BlinkerSpawn » June 12th, 2017, 8:41 pm

drc wrote:I would like to see a script that allows you to input a minimum rule, some additional optional transitions, and then the script searches the input pattern (pref. the pattern on the current layer) for spaceships.
I'm afraid I don't quite understand exactly what is being asked here.
LifeWiki: Like Wikipedia but with more spaceships. [citation needed]

Image

drc
Posts: 1664
Joined: December 3rd, 2015, 4:11 pm

Re: Script request thread

Post by drc » June 12th, 2017, 9:52 pm

Ah shoot, so pretty much it searches a rulespace and censuses the results in each rule, only finding spaceships.

User avatar
BlinkerSpawn
Posts: 1992
Joined: November 8th, 2014, 8:48 pm
Location: Getting a snacker from R-Bee's

Re: Script request thread

Post by BlinkerSpawn » June 13th, 2017, 8:37 am

drc wrote:Ah shoot, so pretty much it searches a rulespace and censuses the results in each rule, only finding spaceships.
So apgsearch, except you have lots of hauls in different rules queued and you only save xq##_ results?
Doesn't look too bad.
LifeWiki: Like Wikipedia but with more spaceships. [citation needed]

Image

drc
Posts: 1664
Joined: December 3rd, 2015, 4:11 pm

Re: Script request thread

Post by drc » June 13th, 2017, 12:58 pm

BlinkerSpawn wrote:
drc wrote:Ah shoot, so pretty much it searches a rulespace and censuses the results in each rule, only finding spaceships.
So apgsearch, except you have lots of hauls in different rules queued and you only save xq##_ results?
Doesn't look too bad.
instead of random soups it's just one pattern that is processed in each rule

User avatar
Saka
Posts: 3627
Joined: June 19th, 2015, 8:50 pm
Location: Indonesia
Contact:

Re: Script request thread

Post by Saka » June 13th, 2017, 5:25 pm

I think I see. So for example if input is

Code: Select all

x=3, y=3, rule=B/S012345678
bob$o2b$3o
It would return
B3/S23
B38/S23
B38/238
etc.

User avatar
muzik
Posts: 5614
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Script request thread

Post by muzik » June 17th, 2017, 11:18 am

Assuming this hasn't been requested before, I'd like a script that takes in an RLE of a pattern, and gives the minimum and maximum rules, both totalistic and non totalistic if possible, in which it exhibits identical behaviour.

drc
Posts: 1664
Joined: December 3rd, 2015, 4:11 pm

Re: Script request thread

Post by drc » June 18th, 2017, 1:00 pm

What about a script where you provide spaceships and test objects and it attempts to find HBK-esque reaction

User avatar
muzik
Posts: 5614
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Script request thread

Post by muzik » June 22nd, 2017, 4:39 pm

Have there been any attempts to make a replicator search program?

fluffykitty
Posts: 1175
Joined: June 14th, 2014, 5:03 pm
Contact:

Re: Script request thread

Post by fluffykitty » June 22nd, 2017, 10:32 pm

Well, there's Catagolue (shouldn't be too hard to write a script that scans textcensus for zz_REPLICATOR (and maybe other zz classes or even PATHOLOGICAL since replicators tend to crash into ash)

User avatar
muzik
Posts: 5614
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Script request thread

Post by muzik » June 23rd, 2017, 1:10 pm

Are there any Oscillizer-like programs that support higher periods?

AforAmpere
Posts: 1334
Joined: July 1st, 2016, 3:58 pm

Re: Script request thread

Post by AforAmpere » June 23rd, 2017, 1:30 pm

Can someone make a mod of the Glider Database read script that will allow non-totalistic searches, like if I wanted to know if there were ships in B3-k/S2-n3. New values for the rules would have to be put in, but I can do that, I just need the ability to read a file with non-totalistic rules instead of totalistic, like the .db file, and be able to search them. If anyone needs clarification, I can probably answer it.
I manage the 5S project, which collects all known spaceship speeds in Isotropic Non-totalistic rules. I also wrote EPE, a tool for searching in the INT rulespace.

Things to work on:
- Find (7,1)c/8 and 9c/10 ships in non-B0 INT.
- EPE improvements.

User avatar
muzik
Posts: 5614
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Script request thread

Post by muzik » June 24th, 2017, 5:59 pm

What about a script that generates a period n glider loop?

User avatar
Rhombic
Posts: 1072
Joined: June 1st, 2013, 5:41 pm

Re: Script request thread

Post by Rhombic » June 26th, 2017, 1:31 pm

A script that generates a version of DeadlyEnemies for a given non-totalistic rule?
SoL : FreeElectronics : DeadlyEnemies : 6a-ite : Rule X3VI
what is “sesame oil”?

User avatar
Saka
Posts: 3627
Joined: June 19th, 2015, 8:50 pm
Location: Indonesia
Contact:

Re: Script request thread

Post by Saka » June 30th, 2017, 2:04 am

Ok what about a script that converts an none-symmetry rule table to MAP (and vice versa maybe)?

User avatar
dvgrn
Moderator
Posts: 10612
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Script request thread

Post by dvgrn » June 30th, 2017, 9:37 am

Saka wrote:Ok what about a script that converts an none-symmetry rule table to MAP (and vice versa maybe)?
The following script uses the rule in the current Golly universe to test what happens in each of the 512 possible neighborhood cases, and builds a bitstring from that.

If anyone sees any problems with this script, let me know -- besides the item labeled KNOWN ISSUE in the comments, that is. Golly automatically emulates B0 rules to avoid flickering, and that means that this script sees a different rule when it runs the 512 neighborhood samples.

That problem is dealt with by checking for "B0" in the rule string that Golly reports... but that doesn't solve the case where it's already a MAP rulestring -- or a custom-named rule defined by a rule table, that is actually a Lifelike B0 rule in disguise. Luckily I don't think there are many custom-named B0 rules out there. If someone wants to contribute some code to check for that situation (and maybe just throw an error), I'd be grateful.

Code: Select all

-- make_MAP_rulestring_v1.0.lua

local g = golly()
local gp = require "gplus"
local split = gp.split
-- local pattern = gp.pattern

function fixrule(s)
  return (gp.split(s,":")) -- remove bounded grid spec, if any
end

g.addlayer("temp") -- keep and test the current rule
fixedrule=fixrule(g.getrule())
g.setrule(fixedrule)

bitlist={{-1,-1,1},{0,-1,2},{1,-1,4},{-1,0,8},{0,0,16},{1,0,32},{-1,1,64},{0,1,128},{1,1,256}}
for j = 1, 9 do
    x, y, bit = table.unpack(bitlist[j])
    for i=0, 511 do
        if i&bit>0 then g.setcell(i*5+x,y,1) end
    end
end

g.run(1)
bits={}
ind=1
local rulestr, invstr, revinvstr="","",""
for k=0,2555,5 do
    if g.getcell(k,0)==1 then
        rulestr=rulestr.."1"
        invstr=invstr.."0"
        revinvstr="0"..revinvstr   
    else
        rulestr=rulestr.."0"
        invstr=invstr.."1"
        revinvstr="1"..revinvstr
    end
end

-- build base64 lookup table
local lookupstr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
bdict={}
for i=1,64 do
    local w=""
    for j=0,5 do
        if (i-1)&2^j>0 then w="1"..w else w="0"..w end
    end
    bdict[w]=lookupstr:sub(i,i)
end

-- decide whether to use standard, inverted, or inverted-reversed bitstring, based on fixedrule
-- (assuming Golly is correctly simulating rules with B0, with or without S8, to avoid strobing)

---------------------- KNOWN ISSUE ---------------------------
-- the following won't work for anisotropic non-totalistic rules defined by MAP strings,
-- so we'll have to decode the MAP rulestring into a 512-bit string in that case, check first and last digits...
-- but in that case, we already know the string, so why are we running this script anyway?

if string.match(fixedrule,"B0") then rulestr = string.match(fixedrule,"S.*8") and revinstr or invstr end

local s = rulestr.."0000" -- pad so that len mod 6=0
base64="MAP"
for i=1,511,6 do base64=base64..bdict[s:sub(i,i+5)] end
    
g.setclipstr(rulestr.."\n"..base64)
g.show("Copied to clipboard: "..base64)

-- Life = 'MAPARYXfhZofugWaH7oaIDogBZofuhogOiAaIDogIAAgAAWaH7oaIDogGiA6ICAAIAAaIDogIAAgACAAIAAAAAAAA'
The vice-versa case is a little trickier, mostly because ninety-nine point I-don't-know-how-many-nines percent of possible MAP rules don't have a non-MAP equivalent.

However, I think it's not too hard a job to get an isotropic rule string out of a MAP string, using Golly and a modified version of the above script. Start by building a lookup table for each of the 51 neighborhoods, by running the script with "B0/S", "B1e/S", "B1c/S", and so on up to "B/S8", and retrieve the 512-byte contents of the "rulestr" variable instead of the base64 equivalent.

Then for each string, you check the (decoded) input MAP bitstring to see if it has 1's in all the same places. If so, subtract them from the input MAP bitstring, and add the appropriate isotropic bit to the output rule string. When you've checked all 51 isotropic neighborhoods, then if there are no 1's left in the input MAP bitstring, then the output rulestring is a correct translation. If there are any 1's left, then the MAP bitstring was anisotropic and no translation is possible.

Luckily Golly can do the rest, in terms of making a canonical isotropic or Life-like rule string out of the messy string generated by the above method. For example:

Code: Select all

import golly as g

g.setrule("B3c3e3k3a3i3n3y3q3j3r/S2c2e2k2a2i2n3c3e3k3a3i3n3y3q3j3r")
g.note(g.getrule())

User avatar
Rhombic
Posts: 1072
Joined: June 1st, 2013, 5:41 pm

Re: Script request thread

Post by Rhombic » June 30th, 2017, 12:41 pm

I think there is a very clear need for a MAP-rotate script now (i.e. outputs a MAP rule that is just like the input but rotated 90º).
That plus some more intuitive way to edit MAP rules (i.e. B37e(left)/S23 should be easier to create than going the whole way from scratch).
SoL : FreeElectronics : DeadlyEnemies : 6a-ite : Rule X3VI
what is “sesame oil”?

User avatar
dvgrn
Moderator
Posts: 10612
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Script request thread

Post by dvgrn » June 30th, 2017, 1:13 pm

Rhombic wrote:I think there is a very clear need for a MAP-rotate script now (i.e. outputs a MAP rule that is just like the input but rotated 90º).
Okay, that's not too terribly difficult. Each of the 512 bits in a MAP bitstring corresponds to a specific nine-bit pattern, as described in the LifeWiki Rule integer article.

So all you have to do is

-- start with a string of 512 zeroes as your output MAP bitstring
-- for each "1" in the 512-bit input MAP bitstring,
  • find the position index (a number from 0 to 511) and convert it to binary
  • make a new binary number according to the Rule integer diagram:
    • starting with bits in order 256, 128, 64, 32, 16, 8, 4, 2, 1,
      shuffle them to order 4, 32, 256, 2, 16, 128, 1, 8, 64
  • in the output MAP bitstring, put a 1 in the position represented by the new binary number
When you've done that for all the 1s in your old MAP bitstring, you'll have a new MAP bitstring that can be encoded using the last few lines of the above Lua script:

Code: Select all

-- build base64 lookup table
local lookupstr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
bdict={}
for i=1,64 do
    local w=""
    for j=0,5 do
        if (i-1)&2^j>0 then w="1"..w else w="0"..w end
    end
    bdict[w]=lookupstr:sub(i,i)
end

local s = rulestr.."0000" -- pad so that len mod 6=0
base64="MAP"
for i=1,511,6 do base64=base64..bdict[s:sub(i,i+5)] end
That's the spirit of the thing, anyway. I might have a detail wrong here or there...!
Rhombic wrote:That plus some more intuitive way to edit MAP rules (i.e. B37e(left)/S23 should be easier to create than going the whole way from scratch).
That would be nice, though I'm not quite sure what "intuitive" would look like exactly. One way would be another modification of the above make_MAP_rulestring_v1.0.lua script: try adding a g.exit() just before the "g.run(1)" line, and you'll see the test pattern that the script uses to determine what happens to all the neighborhoods.

Maybe this test pattern could be converted to LifeHistory, and a user could just mark which center cells should turn ON with state 3, and which should turn OFF with state 4?

Post Reply