from machine import Pin, SPI
import time
KEY1 = Pin(0, Pin.IN, Pin.PULL_UP)
KEY2 = Pin(15, Pin.IN, Pin.PULL_UP)
Vdd = Pin(2, mode=Pin.OUT, value=0)
Vddio = Pin(3, mode=Pin.OUT, value=0)
Vled = Pin(4, mode=Pin.OUT, value=0)
spi = SPI(0, baudrate=7500000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=Pin(6), mosi=Pin(7))
cs = Pin(1, mode=Pin.OUT, value=0)
en = Pin(5, mode=Pin.OUT, value=0)
cs(1)
Vdd(0)
Vddio(0)
Vled(0)
en(0)
state = False
def spi_write_data_1():
spi.write(bytes([0x00,0x00, 0x20,0x03, #default value:0x84,0x7F, #Python変数か関数をプログラムコードの前の部分に書いておいて、ここのspi.writeにその変数を入れたら、「0x84,0xFF」が「0x20,0x30」に自動に変えられるらしいです。
0x00,0x10, #default value:0x00,0x10, #残りのdefault valueも同じく「0x20,0x03」になれるようにしたいです。
0x00,0x30, #default value:0x00,0x30,
0x00,0x10, #default value:0x00,0x10,
0x00,0x10, #default value:0x00,0x10,
0x33,0x30, #default value:0x33,0x30,
0x87,0xC2, #default value:0x07,0xC2
0x00,0x00, #default value:0x00,0x00,
0x00,0x00, #default value:0x00,0x00,
0x3F,0xFF, #default value:0x3F,0xFF,
0x00,0x00, #default value:0x00,0x00,
0x00,0x08, #default value:0x00,0x08,
0x00,0x0F, #default value:0x00,0xFF,
0x00,0x00,])) #default value:0x00,0x00,
def spi_write_data_2():
spi.write(bytes([0x00,0x1E,0x00,0x00,]))
def spi_write_data_3():
spi.write(bytes([0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
])) #ここは、0x00と0xFFがいっぱい入っているので、なんかの変数をここに使えたら、コンパクト(短く)になれるし、結果は今の長く見えるようなコードと同じく変わらないらしい。
def spi_write_data_4():
spi.write(bytes([0x04,0x20, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
]))
def spi_write_data_5():
spi.write(bytes([0x04,0xE0,0x00,0x00,
0x00,0x00,]))
def spi_write_data_6():
spi.write(bytes([0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
]))
def spi_write_data_7():
spi.write(bytes([0x00,0x20,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]))
def spi_write_data_8():
spi.write(bytes([0x00,0x20,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
]))
def reverseGPIO():
if Vdd.value() == 1:
en(0)
time.sleep(0.15)
Vled(0)
time.sleep(0.05)
Vddio(0)
time.sleep(0.1)
Vdd.value(0)
time.sleep(0.1)
else:
Vdd(1)
time.sleep(0.1)
Vddio(1)
time.sleep(0.1)
Vled(1)
time.sleep(0.05)
en(1)
time.sleep(0.15)
cs(0)
spi_write_data_1()
cs(1)
cs(0)
spi_write_data_4()
cs(1)
cs(0)
spi_write_data_5()
cs(1)
cs(0)
spi_write_data_3()
cs(1)
cs(0)
spi_write_data_2()
cs(1)
time.sleep(0.008)
try:
while True:
if KEY1.value() == 0:
time.sleep_ms(10)
if KEY1.value() == 0:
# key1_pressed = True
reverseGPIO()
while KEY1.value() == 0:
time.sleep_ms(10)
# key2_pressed = False
if KEY2.value() == 0:
state = not state
if state:
cs(0)
spi_write_data_6()
cs(1)
else:
cs(0)
spi_write_data_7()
cs(1)
while KEY2.value() == 0:
time.sleep_ms(10)
# key2_pressed = False
# elif key1_pressed and key2_pressed:
# key2_pressed = False
except:
pass
ZnJvbSBtYWNoaW5lIGltcG9ydCBQaW4sIFNQSQppbXBvcnQgdGltZQoKS0VZMSA9IFBpbigwLCBQaW4uSU4sIFBpbi5QVUxMX1VQKQpLRVkyID0gUGluKDE1LCBQaW4uSU4sIFBpbi5QVUxMX1VQKQpWZGQgPSBQaW4oMiwgbW9kZT1QaW4uT1VULCB2YWx1ZT0wKQpWZGRpbyA9IFBpbigzLCBtb2RlPVBpbi5PVVQsIHZhbHVlPTApClZsZWQgPSBQaW4oNCwgbW9kZT1QaW4uT1VULCB2YWx1ZT0wKQpzcGkgPSBTUEkoMCwgYmF1ZHJhdGU9NzUwMDAwMCwgcG9sYXJpdHk9MCwgcGhhc2U9MCwgYml0cz04LCBmaXJzdGJpdD1TUEkuTVNCLCBzY2s9UGluKDYpLCBtb3NpPVBpbig3KSkKY3MgPSBQaW4oMSwgbW9kZT1QaW4uT1VULCB2YWx1ZT0wKQplbiA9IFBpbig1LCBtb2RlPVBpbi5PVVQsIHZhbHVlPTApCmNzKDEpClZkZCgwKQpWZGRpbygwKQpWbGVkKDApCmVuKDApCnN0YXRlID0gRmFsc2UgICAgICAgICAKCgpkZWYgc3BpX3dyaXRlX2RhdGFfMSgpOgogICAgc3BpLndyaXRlKGJ5dGVzKFsweDAwLDB4MDAsIDB4MjAsMHgwMyzjgIDvvINkZWZhdWx0IHZhbHVlOjB4ODQsMHg3RizjgIDvvINQeXRob27lpInmlbDjgYvplqLmlbDjgpLjg5fjg63jgrDjg6njg6DjgrPjg7zjg4njga7liY3jga7pg6jliIbjgavmm7jjgYTjgabjgYrjgYTjgabjgIHjgZPjgZPjga5zcGkud3JpdGXjgavjgZ3jga7lpInmlbDjgpLlhaXjgozjgZ/jgonjgIHjgIww772YODTvvIww772YRkbjgI3jgYzjgIww772YMjDvvIww772YMzDjgI3jgavoh6rli5XjgavlpInjgYjjgonjgozjgovjgonjgZfjgYTjgafjgZnjgIIKICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgxMCwgIO+8g2RlZmF1bHQgdmFsdWU6MHgwMCwweDEwLOOAgCAgICAgICDjgIDvvIPmrovjgorjga5kZWZhdWx044CAdmFsdWXjgoLlkIzjgZjjgY/jgIww772YMjDvvIww772YMDPjgI3jgavjgarjgozjgovjgojjgYbjgavjgZfjgZ/jgYTjgafjgZnjgIIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4MzAsICDvvINkZWZhdWx0IHZhbHVlOjB4MDAsMHgzMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4MTAsICDvvINkZWZhdWx0IHZhbHVlOjB4MDAsMHgxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4MTAsICDvvINkZWZhdWx0IHZhbHVlOjB4MDAsMHgxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMzLDB4MzAsICDvvINkZWZhdWx0IHZhbHVlOjB4MzMsMHgzMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3LDB4QzIsICDvvINkZWZhdWx0IHZhbHVlOjB4MDcsMHhDMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwgIO+8g2RlZmF1bHQgdmFsdWU6MHgwMCwweDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwgIO+8g2RlZmF1bHQgdmFsdWU6MHgwMCwweDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0YsMHhGRiwgIO+8g2RlZmF1bHQgdmFsdWU6MHgzRiwweEZGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwgIO+8g2RlZmF1bHQgdmFsdWU6MHgwMCwweDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwOCwgIO+8g2RlZmF1bHQgdmFsdWU6MHgwMCwweDA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwRiwgIO+8g2RlZmF1bHQgdmFsdWU6MHgwMCwweEZGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCxdKSkg77yDZGVmYXVsdCB2YWx1ZToweDAwLDB4MDAsCgpkZWYgc3BpX3dyaXRlX2RhdGFfMigpOgogICAgc3BpLndyaXRlKGJ5dGVzKFsweDAwLDB4MUUsMHgwMCwweDAwLF0pKQoKZGVmIHNwaV93cml0ZV9kYXRhXzMoKToKICAgIHNwaS53cml0ZShieXRlcyhbMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIF0pKeOAgO+8g+OBk+OBk+OBr+OAgTDvvZgwMOOBqDDvvZhGRuOBjOOBhOOBo+OBseOBhOWFpeOBo+OBpuOBhOOCi+OBruOBp+OAgeOBquOCk+OBi+OBruWkieaVsOOCkuOBk+OBk+OBq+S9v+OBiOOBn+OCieOAgeOCs+ODs+ODkeOCr+ODiO+8iOefreOBj++8ieOBq+OBquOCjOOCi+OBl+OAgee1kOaenOOBr+S7iuOBrumVt+OBj+imi+OBiOOCi+OCiOOBhuOBquOCs+ODvOODieOBqOWQjOOBmOOBj+WkieOCj+OCieOBquOBhOOCieOBl+OBhOOAggoKZGVmIHNwaV93cml0ZV9kYXRhXzQoKToKICAgIHNwaS53cml0ZShieXRlcyhbMHgwNCwweDIwLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSkKCmRlZiBzcGlfd3JpdGVfZGF0YV81KCk6CiAgICBzcGkud3JpdGUoYnl0ZXMoWzB4MDQsMHhFMCwweDAwLDB4MDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4MDAsXSkpCgpkZWYgc3BpX3dyaXRlX2RhdGFfNigpOgogICAgc3BpLndyaXRlKGJ5dGVzKFsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkpCgpkZWYgc3BpX3dyaXRlX2RhdGFfNygpOgogICAgc3BpLndyaXRlKGJ5dGVzKFsweDAwLDB4MjAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pKQoKZGVmIHNwaV93cml0ZV9kYXRhXzgoKToKICAgIHNwaS53cml0ZShieXRlcyhbMHgwMCwweDIwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkpCgpkZWYgcmV2ZXJzZUdQSU8oKToKICAgIGlmIFZkZC52YWx1ZSgpID09IDE6CiAgICAgICAgCiAgICAgICAgZW4oMCkKICAgICAgICB0aW1lLnNsZWVwKDAuMTUpCiAgICAgICAgVmxlZCgwKQogICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKICAgICAgICBWZGRpbygwKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgIFZkZC52YWx1ZSgwKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgZWxzZToKICAgICAgICBWZGQoMSkKICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICBWZGRpbygxKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgIFZsZWQoMSkKICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCiAgICAgICAgZW4oMSkKICAgICAgICB0aW1lLnNsZWVwKDAuMTUpCiAgICAgICAgY3MoMCkKICAgICAgICBzcGlfd3JpdGVfZGF0YV8xKCkKICAgICAgICBjcygxKQoKCiAgICAgICAgY3MoMCkKICAgICAgICBzcGlfd3JpdGVfZGF0YV80KCkKICAgICAgICBjcygxKQoKICAgICAgICBjcygwKQogICAgICAgIHNwaV93cml0ZV9kYXRhXzUoKQogICAgICAgIGNzKDEpCiAgICAgICAgCiAgICAgICAgY3MoMCkKICAgICAgICBzcGlfd3JpdGVfZGF0YV8zKCkKICAgICAgICBjcygxKQoKCiAgICAgICAgY3MoMCkKICAgICAgICBzcGlfd3JpdGVfZGF0YV8yKCkKICAgICAgICBjcygxKQogICAgICAgIAogICAgICAgIHRpbWUuc2xlZXAoMC4wMDgpCgp0cnk6CiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIEtFWTEudmFsdWUoKSA9PSAwOgogICAgICAgICAgICB0aW1lLnNsZWVwX21zKDEwKQogICAgICAgICAgICBpZiBLRVkxLnZhbHVlKCkgPT0gMDoKIyAgICAgICAgICAgICAgICAga2V5MV9wcmVzc2VkID0gVHJ1ZQogICAgICAgICAgICAgICAgcmV2ZXJzZUdQSU8oKQogICAgICAgICAgICAgICAgd2hpbGUgS0VZMS52YWx1ZSgpID09IDA6CiAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcF9tcygxMCkKIyAgICAgICAgICAgICAgICAga2V5Ml9wcmVzc2VkID0gRmFsc2UKCiAgICAgICAgaWYgS0VZMi52YWx1ZSgpID09IDA6CiAgICAgICAgICAgICAgICBzdGF0ZSA9IG5vdCBzdGF0ZSAgCgogICAgICAgICAgICAgICAgaWYgc3RhdGU6CiAgICAgICAgICAgICAgICAgICAgY3MoMCkKICAgICAgICAgICAgICAgICAgICBzcGlfd3JpdGVfZGF0YV82KCkKICAgICAgICAgICAgICAgICAgICBjcygxKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBjcygwKQogICAgICAgICAgICAgICAgICAgIHNwaV93cml0ZV9kYXRhXzcoKQogICAgICAgICAgICAgICAgICAgIGNzKDEpCiAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgd2hpbGUgS0VZMi52YWx1ZSgpID09IDA6CiAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcF9tcygxMCkKICAgICAgICAgICAgICAKIyAgICAgICAgICAgICAgICAgICAgIGtleTJfcHJlc3NlZCA9IEZhbHNlCgojICAgICAgICAgICAgICBlbGlmIGtleTFfcHJlc3NlZCBhbmQga2V5Ml9wcmVzc2VkOgojICAgICAgICAgICAgICAgICBrZXkyX3ByZXNzZWQgPSBGYWxzZQoKZXhjZXB0OgogICAgcGFzcwo=