LyoKICogVmVydGV4IHBvc2l0aW9uIGRhdGEgZGVzY3JpYmluZyB0aGUgb2xkIFNpbGljb24gR3JhcGhpY3MgbG9nbwogKgogKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICogQ29weXJpZ2h0IKkgMjAxMiBMaW5hcm8gTGltaXRlZAogKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2xtYXJrMiBPcGVuR0wgKEVTKSAyLjAgYmVuY2htYXJrLgogKgogKiBnbG1hcmsyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCiAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKICogdmVyc2lvbi4KICoKICogZ2xtYXJrMiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKICogZ2xtYXJrMi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICoKICogQXV0aG9yczoKICogIEplc3NlIEJhcmtlcgogKi8KI2luY2x1ZGUgImxvZ28uaCIKI2luY2x1ZGUgInNjZW5lLmgiCiNpbmNsdWRlICJzaGFkZXItc291cmNlLmgiCiNpbmNsdWRlICJsb2cuaCIKCnVzaW5nIHN0ZDo6c3RyaW5nOwp1c2luZyBMaWJNYXRyaXg6OnZlYzM7CnVzaW5nIExpYk1hdHJpeDo6dXZlYzM7CnVzaW5nIExpYk1hdHJpeDo6dmVjNDsKdXNpbmcgTGliTWF0cml4OjpTdGFjazQ7CnVzaW5nIExpYk1hdHJpeDo6bWF0NDsKCmNvbnN0IHVuc2lnbmVkIGludCBTR0lMb2dvOjp0ZXh0dXJlUmVzb2x1dGlvbl8oMzIpOwpjb25zdCBzdHJpbmcgU0dJTG9nbzo6bW9kZWx2aWV3TmFtZV8oIm1vZGVsdmlldyIpOwpjb25zdCBzdHJpbmcgU0dJTG9nbzo6cHJvamVjdGlvbk5hbWVfKCJwcm9qZWN0aW9uIik7CmNvbnN0IHN0cmluZyBTR0lMb2dvOjpsaWdodFBvc2l0aW9uTmFtZV8oImxpZ2h0MFBvc2l0aW9uIik7CmNvbnN0IHN0cmluZyBTR0lMb2dvOjpsb2dvQ29sb3JOYW1lXygibG9nb0NvbG9yIik7CmNvbnN0IHN0cmluZyBTR0lMb2dvOjp2ZXJ0ZXhBdHRyaWJOYW1lXygidmVydGV4Iik7CmNvbnN0IHN0cmluZyBTR0lMb2dvOjpub3JtYWxBdHRyaWJOYW1lXygibm9ybWFsIik7CmNvbnN0IHN0cmluZyBTR0lMb2dvOjpub3JtYWxNYXRyaXhOYW1lXygibm9ybWFsTWF0cml4Iik7CgpTR0lMb2dvOjpTR0lMb2dvKHZvaWQpIDoKICAgIG5vcm1hbE5vcm1hbEluZGV4XygwKSwKICAgIG5vcm1hbFZlcnRleEluZGV4XygwKSwKICAgIGZsYXRWZXJ0ZXhJbmRleF8oMCksCiAgICBzaGFkb3dWZXJ0ZXhJbmRleF8oMCksCiAgICB2ZXJ0ZXhJbmRleF8oMCksCiAgICB2YWxpZF8oZmFsc2UpLAogICAgZHJhd1N0eWxlXyhMT0dPX05PUk1BTCkKewogICAgLy8gU2luZ2xlIGN5bGluZGVyIGRhdGEuLi4KICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgNS4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAwLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAwLjcwNzEwNywgNS4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAxLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAxLjAwMDAwMCwgNS4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlclZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNzA3MTA3LCA1LjAwMDAwMCkpOwogICAgc2luZ2xlQ3lsaW5kZXJWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMDAwMDAsIDUuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlclZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNzA3MTA3LCA1LjAwMDAwMCkpOwogICAgc2luZ2xlQ3lsaW5kZXJWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0xLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMS4wMDAwMDAsIDUuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlclZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgLTAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgc2luZ2xlQ3lsaW5kZXJWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIC0wLjcwNzEwNywgNS4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgNS4wMDAwMDApKTsKCiAgICBzaW5nbGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgc2luZ2xlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAwLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgc2luZ2xlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBzaW5nbGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgc2luZ2xlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0xLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0xLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIHNpbmdsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgc2luZ2xlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CgogICAgLy8gRG91YmxlIGN5bGluZGVyIGRhdGEuLi4KICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgNy4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAwLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAwLjcwNzEwNywgNy4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAxLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAxLjAwMDAwMCwgNy4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlclZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNzA3MTA3LCA3LjAwMDAwMCkpOwogICAgZG91YmxlQ3lsaW5kZXJWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMDAwMDAsIDcuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlclZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNzA3MTA3LCA3LjAwMDAwMCkpOwogICAgZG91YmxlQ3lsaW5kZXJWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0xLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMS4wMDAwMDAsIDcuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlclZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgLTAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgZG91YmxlQ3lsaW5kZXJWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIC0wLjcwNzEwNywgNy4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgNy4wMDAwMDApKTsKCiAgICBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZG91YmxlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAwLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZG91YmxlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgZG91YmxlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0xLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0xLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGRvdWJsZUN5bGluZGVyTm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZG91YmxlQ3lsaW5kZXJOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CgogICAgLy8gRWxib3cgZGF0YS4uLgogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgLTAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDM0MDc0LCAwLjI1ODgxOSkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuNzE3MDg3LCAwLjA3NTgwNikpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjcxNzA4NywgMC4wNzU4MDYpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4wMzQwNzQsIDAuMjU4ODE5KSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjY0ODkzOSwgMC40NDE4MzIpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC45MzE4NTIsIDAuNTE3NjM4KSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgLTAuNjQ4OTM5LCAwLjQ0MTgzMikpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDM0MDc0LCAwLjI1ODgxOSkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMTMzOTc1LCAwLjUwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuNzQ2MzQ3LCAwLjE0NjQ0NykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjc0NjM0NywgMC4xNDY0NDcpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4xMzM5NzUsIDAuNTAwMDAwKSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjQ3ODM5OCwgMC44NTM1NTMpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC43MzIwNTEsIDEuMDAwMDAwKSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgLTAuNDc4Mzk4LCAwLjg1MzU1MykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMTMzOTc1LCAwLjUwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMjkyODkzLCAwLjcwNzEwNykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuNzkyODkzLCAwLjIwNzEwNykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjc5Mjg5MywgMC4yMDcxMDcpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC4yOTI4OTMsIDAuNzA3MTA3KSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIC0wLjIwNzEwNywgMS4yMDcxMDcpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC40MTQyMTQsIDEuNDE0MjE0KSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgLTAuMjA3MTA3LCAxLjIwNzEwNykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMjkyODkzLCAwLjcwNzEwNykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuNTAwMDAwLCAwLjg2NjAyNSkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuODUzNTUzLCAwLjI1MzY1MykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjg1MzU1MywgMC4yNTM2NTMpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC41MDAwMDAsIDAuODY2MDI1KSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuMTQ2NDQ3LCAxLjQ3ODM5OCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDAuMDAwMDAwLCAxLjczMjA1MSkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuMTQ2NDQ3LCAxLjQ3ODM5OCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuNTAwMDAwLCAwLjg2NjAyNSkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuNzQxMTgxLCAwLjk2NTkyNikpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuOTI0MTk0LCAwLjI4MjkxMykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjkyNDE5NCwgMC4yODI5MTMpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC43NDExODEsIDAuOTY1OTI2KSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNTU4MTY4LCAxLjY0ODkzOSkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDAuNDgyMzYyLCAxLjkzMTg1MikpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuNTU4MTY4LCAxLjY0ODkzOSkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuNzQxMTgxLCAwLjk2NTkyNikpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDEuMDAwMDAwLCAxLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDEuMDAwMDAwLCAwLjI5Mjg5MykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAxLjAwMDAwMCwgMC4yOTI4OTMpKTsKICAgIGVsYm93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMS4wMDAwMDAsIDEuMDAwMDAwKSk7CiAgICBlbGJvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDEuMDAwMDAwLCAxLjcwNzEwNykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAyLjAwMDAwMCkpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDEuMDAwMDAwLCAxLjcwNzEwNykpOwogICAgZWxib3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDEuMDAwMDAwLCAxLjAwMDAwMCkpOwoKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAxLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjcwNzEwNywgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAtMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC42ODMwMTMsIC0wLjE4MzAxMykpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMC45NjU5MjYsIC0wLjI1ODgxOSkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNjgzMDEzLCAtMC4xODMwMTMpKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAtMC42ODMwMTMsIDAuMTgzMDEzKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC45NjU5MjYsIDAuMjU4ODE5KSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC42ODMwMTMsIDAuMTgzMDEzKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC42MTIzNzIsIC0wLjM1MzU1MykpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMC44NjYwMjUsIC0wLjUwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNjEyMzcyLCAtMC4zNTM1NTMpKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAtMC42MTIzNzIsIDAuMzUzNTUzKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC44NjYwMjUsIDAuNTAwMDAwKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC42MTIzNzIsIDAuMzUzNTUzKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC41MDAwMDAsIC0wLjUwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMC43MDcxMDcsIC0wLjcwNzEwNykpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNTAwMDAwLCAtMC41MDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAtMC41MDAwMDAsIDAuNTAwMDAwKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC43MDcxMDcsIDAuNzA3MTA3KSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC41MDAwMDAsIDAuNTAwMDAwKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC4zNTM1NTMsIC0wLjYxMjM3MikpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMC41MDAwMDAsIC0wLjg2NjAyNSkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuMzUzNTUzLCAtMC42MTIzNzIpKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAtMC4zNTM1NTMsIDAuNjEyMzcyKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC41MDAwMDAsIDAuODY2MDI1KSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC4zNTM1NTMsIDAuNjEyMzcyKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC4xODMwMTMsIC0wLjY4MzAxMykpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMC4yNTg4MTksIC0wLjk2NTkyNikpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuMTgzMDEzLCAtMC42ODMwMTMpKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAtMC4xODMwMTMsIDAuNjgzMDEzKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuMDAwMDAwLCAtMC4yNTg4MTksIDAuOTY1OTI2KSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC4xODMwMTMsIDAuNjgzMDEzKSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC4wMDAwMDAsIC0wLjcwNzEwNykpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMC4wMDAwMDAsIC0xLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuMDAwMDAwLCAtMC43MDcxMDcpKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjAwMDAwMCwgMC43MDcxMDcpKTsKICAgIGVsYm93Tm9ybWFsc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDAuMDAwMDAwLCAxLjAwMDAwMCkpOwogICAgZWxib3dOb3JtYWxzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC4wMDAwMDAsIDAuNzA3MTA3KSk7CiAgICBlbGJvd05vcm1hbHNfLnB1c2hfYmFjayh2ZWMzKDEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKCiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNzA3MTA3LCAwLjAwMDAwMCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0xLjAwMDAwMCwgMC4wMDAwMDApKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC43MDcxMDcsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wMTkyMTUsIDAuMTk1MDkwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43MTI3MzUsIDAuMDU3MTQxKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNzEyNzM1LCAwLjA1NzE0MSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjAxOTIxNSwgMC4xOTUwOTApKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNjc0MzA1LCAwLjMzMzA0MCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0wLjk2MTU3MSwgMC4zOTAxODEpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC42NzQzMDUsIDAuMzMzMDQwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wMTkyMTUsIDAuMTk1MDkwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wNzYxMjAsIDAuMzgyNjgzKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43Mjk0MDIsIDAuMTEyMDg1KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNzI5NDAyLCAwLjExMjA4NSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjA3NjEyMCwgMC4zODI2ODMpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNTc3MTYxLCAwLjY1MzI4MikpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0wLjg0Nzc1OSwgMC43NjUzNjcpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC41NzcxNjEsIDAuNjUzMjgyKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4wNzYxMjAsIDAuMzgyNjgzKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4xNjg1MzAsIDAuNTU1NTcwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43NTY0NjgsIDAuMTYyNzIzKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNzU2NDY4LCAwLjE2MjcyMykpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjE2ODUzMCwgMC41NTU1NzApKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuNDE5NDA3LCAwLjk0ODQxOCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0wLjY2MjkzOSwgMS4xMTExNDApKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC40MTk0MDcsIDAuOTQ4NDE4KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4xNjg1MzAsIDAuNTU1NTcwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4yOTI4OTMsIDAuNzA3MTA3KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC43OTI4OTMsIDAuMjA3MTA3KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNzkyODkzLCAwLjIwNzEwNykpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjI5Mjg5MywgMC43MDcxMDcpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgLTAuMjA3MTA3LCAxLjIwNzEwNykpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIC0wLjQxNDIxNCwgMS40MTQyMTQpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKDAuNzA3MTA3LCAtMC4yMDcxMDcsIDEuMjA3MTA3KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC4yOTI4OTMsIDAuNzA3MTA3KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygxLjAwMDAwMCwgMC40NDQ0MzAsIDAuODMxNDcwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjcwNzEwNywgMC44MzcyNzcsIDAuMjQzNTMyKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgMS4wMDAwMDAsIDAuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuODM3Mjc3LCAwLjI0MzUzMikpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTEuMDAwMDAwLCAwLjQ0NDQzMCwgMC44MzE0NzApKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0wLjcwNzEwNywgMC4wNTE1ODIsIDEuNDE5NDA3KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygwLjAwMDAwMCwgLTAuMTExMTQwLCAxLjY2MjkzOSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuMDUxNTgyLCAxLjQxOTQwNykpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuNDQ0NDMwLCAwLjgzMTQ3MCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuNjE3MzE3LCAwLjkyMzg4MCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuODg3OTE1LCAwLjI3MDU5OCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjg4NzkxNSwgMC4yNzA1OTgpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC42MTczMTcsIDAuOTIzODgwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuMzQ2NzE5LCAxLjU3NzE2MSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDAuMjM0NjMzLCAxLjg0Nzc1OSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuMzQ2NzE5LCAxLjU3NzE2MSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuNjE3MzE3LCAwLjkyMzg4MCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuODA0OTEwLCAwLjk4MDc4NSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuOTQyODU5LCAwLjI4NzI2NSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAwLjk0Mjg1OSwgMC4yODcyNjUpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMC44MDQ5MTAsIDAuOTgwNzg1KSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDAuNjY2OTYwLCAxLjY3NDMwNSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDAuNjA5ODE5LCAxLjk2MTU3MSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDAuNjY2OTYwLCAxLjY3NDMwNSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDAuODA0OTEwLCAwLjk4MDc4NSkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDEuMDAwMDAwLCAxLjAwMDAwMCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDEuMDAwMDAwLCAwLjI5Mjg5MykpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAwLjAwMDAwMCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoLTAuNzA3MTA3LCAxLjAwMDAwMCwgMC4yOTI4OTMpKTsKICAgIGVsYm93U2hhZG93VmVydGljZXNfLnB1c2hfYmFjayh2ZWMzKC0xLjAwMDAwMCwgMS4wMDAwMDAsIDEuMDAwMDAwKSk7CiAgICBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5wdXNoX2JhY2sodmVjMygtMC43MDcxMDcsIDEuMDAwMDAwLCAxLjcwNzEwNykpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC4wMDAwMDAsIDEuMDAwMDAwLCAyLjAwMDAwMCkpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMC43MDcxMDcsIDEuMDAwMDAwLCAxLjcwNzEwNykpOwogICAgZWxib3dTaGFkb3dWZXJ0aWNlc18ucHVzaF9iYWNrKHZlYzMoMS4wMDAwMDAsIDEuMDAwMDAwLCAxLjAwMDAwMCkpOwoKICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNldHVwIHRoZSB2ZXJ0ZXggZGF0YSwgd2UgY2FuIHNldHVwIHRoZSBtYXAgb2YgaG93CiAgICAvLyB0aGF0IGRhdGEgd2lsbCBiZSBsYWlkIG91dCBpbiB0aGUgYnVmZmVyIG9iamVjdC4KICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3YzKHNpemVvZih2ZWMzKSk7CiAgICBkYXRhTWFwXy5zY3ZPZmZzZXQgPSAwOwogICAgZGF0YU1hcF8uc2N2U2l6ZSA9IHNpbmdsZUN5bGluZGVyVmVydGljZXNfLnNpemUoKSAqIHN2MzsKICAgIGRhdGFNYXBfLnRvdGFsU2l6ZSA9IGRhdGFNYXBfLnNjdlNpemU7CiAgICBkYXRhTWFwXy5zY25PZmZzZXQgPSBkYXRhTWFwXy5zY3ZPZmZzZXQgKyBkYXRhTWFwXy5zY3ZTaXplOwogICAgZGF0YU1hcF8uc2NuU2l6ZSA9IHNpbmdsZUN5bGluZGVyTm9ybWFsc18uc2l6ZSgpICogc3YzOwogICAgZGF0YU1hcF8udG90YWxTaXplICs9IGRhdGFNYXBfLnNjblNpemU7CiAgICBkYXRhTWFwXy5kY3ZPZmZzZXQgPSBkYXRhTWFwXy5zY25PZmZzZXQgKyBkYXRhTWFwXy5zY25TaXplOwogICAgZGF0YU1hcF8uZGN2U2l6ZSA9IGRvdWJsZUN5bGluZGVyVmVydGljZXNfLnNpemUoKSAqIHN2MzsKICAgIGRhdGFNYXBfLnRvdGFsU2l6ZSArPSBkYXRhTWFwXy5kY3ZTaXplOwogICAgZGF0YU1hcF8uZGNuT2Zmc2V0ID0gZGF0YU1hcF8uZGN2T2Zmc2V0ICsgZGF0YU1hcF8uZGN2U2l6ZTsKICAgIGRhdGFNYXBfLmRjblNpemUgPSBkb3VibGVDeWxpbmRlck5vcm1hbHNfLnNpemUoKSAqIHN2MzsKICAgIGRhdGFNYXBfLnRvdGFsU2l6ZSArPSBkYXRhTWFwXy5kY25TaXplOwogICAgZGF0YU1hcF8uZXZPZmZzZXQgPSBkYXRhTWFwXy5kY25PZmZzZXQgKyBkYXRhTWFwXy5kY25TaXplOwogICAgZGF0YU1hcF8uZXZTaXplID0gZWxib3dWZXJ0aWNlc18uc2l6ZSgpICogc3YzOwogICAgZGF0YU1hcF8udG90YWxTaXplICs9IGRhdGFNYXBfLmV2U2l6ZTsKICAgIGRhdGFNYXBfLmVuT2Zmc2V0ID0gZGF0YU1hcF8uZXZPZmZzZXQgKyBkYXRhTWFwXy5ldlNpemU7CiAgICBkYXRhTWFwXy5lblNpemUgPSBlbGJvd05vcm1hbHNfLnNpemUoKSAqIHN2MzsKICAgIGRhdGFNYXBfLnRvdGFsU2l6ZSArPSBkYXRhTWFwXy5lblNpemU7CiAgICBkYXRhTWFwXy5lc3ZPZmZzZXQgPSBkYXRhTWFwXy5lbk9mZnNldCArIGRhdGFNYXBfLmVuU2l6ZTsKICAgIGRhdGFNYXBfLmVzdlNpemUgPSBlbGJvd1NoYWRvd1ZlcnRpY2VzXy5zaXplKCkgKiBzdjM7CiAgICBkYXRhTWFwXy50b3RhbFNpemUgKz0gZGF0YU1hcF8uZXN2U2l6ZTsKCiAgICAvLwogICAgLy8gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGJvdGggdGhlIGxvZ28gYW5kIHRoZSBsYW1wIHJlcHJlc2VudGVkCiAgICAvLyB0aGUgdmVydGV4IGFuZCBub3JtYWwgZGF0YSBpbiBhIHRyaXBseS1kaW1lbnNpb25lZCBhcnJheSBvZiBmbG9hdHMgYW5kCiAgICAvLyBhbGwgb2YgdGhlIGNhbGxzIHJlZmVyZW5jZWQgZG91YmxlLWluZGV4ZWQgYXJyYXlzIG9mIHZlY3RvciBkYXRhLgogICAgLy8gVG8gbXkgbWluZCwgdGhpcyBtYWRlIHRoZSBjb2RlIGxvb2sgY2x1bmt5IGFuZCBvdmVybHkgdmVyYm9zZS4KICAgIC8vIFJlcHJlc2VudGluZyB0aGUgZGF0YSBhcyBhIFNUTCB2ZWN0b3Igb2YgdmVjMyAoaXRzZWxmIGEgMy1mbG9hdCB2ZWN0b3IKICAgIC8vIHF1YW50aXR5KSBwcm92aWRlcyBib3RoIGFuIGVmZmljaWVudCBjb250YWluZXIgYW5kIGFsbG93cyBmb3IgbW9yZQogICAgLy8gY29uY2lzZSBsb29raW5nIGNvZGUuICBUaGUgc2xpZ2h0bHkgZ29vZnkgbG9vcHMgKHVzaW5nIHRoZSBvcmlnaW5hbCAyCiAgICAvLyBkaW1lbnNpb25hbCBpbmRpY2VzIHRvIGNvbXB1dGUgYSBzaW5nbGUgb2Zmc2V0IGludG8gdGhlIFNUTCB2ZWN0b3IpIGFyZSAKICAgIC8vIGEgY29tcHJvbWlzZSB0byBhdm9pZCByZWFycmFuZ2luZyB0aGUgb3JpZ2luYWwgZGF0YS4KICAgIC8vCiAgICAvLyAtIGplc3NlIDIwMTAvMTAvMDQKICAgIC8vCiAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDg7IGkrKykKICAgIHsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleDEoaSAqIDkgKyBqKTsKICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZGV4MigoaSArIDEpICogOSArIGopOwogICAgICAgICAgICBpbmRleERhdGFfLnB1c2hfYmFjayhpbmRleDEpOwogICAgICAgICAgICBpbmRleERhdGFfLnB1c2hfYmFjayhpbmRleDIpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBJbml0aWFsaXplIHRoZSBzdGlwcGxlIHBhdHRlcm4KICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGF0dGVybnNbXSA9IHsgMHhhYWFhYWFhYSwgMHg1NTU1NTU1NSB9OwogICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0ZXh0dXJlUmVzb2x1dGlvbl87IGkrKykKICAgIHsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IHRleHR1cmVSZXNvbHV0aW9uXzsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgLy8gQWx0ZXJuYXRlIHRoZSBwYXR0ZXJuIGV2ZXJ5IG90aGVyIGxpbmUuCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBjdXJNYXNrKDEgPDwgaik7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBjdXJQYXR0ZXJuKHBhdHRlcm5zW2kgJSAyXSk7CiAgICAgICAgICAgIHRleHR1cmVJbWFnZV9baV1bal0gPSAoKGN1clBhdHRlcm4gJiBjdXJNYXNrKSA+PiBqKSAqIDI1NTsKICAgICAgICB9CiAgICB9Cn0KClNHSUxvZ286On5TR0lMb2dvKCkKewogICAgaWYgKHZhbGlkXykKICAgIHsKICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMiwgJmJ1ZmZlck9iamVjdHNfWzBdKTsKICAgIH0KfQoKdm9pZApTR0lMb2dvOjppbml0KCkKewogICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHJlLWluaXRpYWxpemUuLi4KICAgIGlmICh2YWxpZF8pCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEluaXRpYWxpemUgc2hhZGVyIHNvdXJjZXMgZnJvbSBpbnB1dCBmaWxlcyBhbmQgY3JlYXRlIHByb2dyYW1zIGZyb20gdGhlbQogICAgLy8gVGhlIHByb2dyYW0gZm9yIGhhbmRsaW5nIHRoZSBtYWluIG9iamVjdCB3aXRoIGxpZ2h0aW5nLi4uCiAgICBzdHJpbmcgbG9nb192dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sb2dvLnZlcnQiKTsKICAgIHN0cmluZyBsb2dvX2ZyZ19maWxlbmFtZShHTE1BUktfREFUQV9QQVRIIi9zaGFkZXJzL2lkZWFzLWxvZ28uZnJhZyIpOwogICAgU2hhZGVyU291cmNlIGxvZ29fdnR4X3NvdXJjZShsb2dvX3Z0eF9maWxlbmFtZSk7CiAgICBTaGFkZXJTb3VyY2UgbG9nb19mcmdfc291cmNlKGxvZ29fZnJnX2ZpbGVuYW1lKTsKICAgIGlmICghU2NlbmU6OmxvYWRfc2hhZGVyc19mcm9tX3N0cmluZ3Mobm9ybWFsUHJvZ3JhbV8sIGxvZ29fdnR4X3NvdXJjZS5zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nb19mcmdfc291cmNlLnN0cigpKSkKICAgIHsKICAgICAgICBMb2c6OmVycm9yKCJObyB2YWxpZCBwcm9ncmFtIGZvciBub3JtYWwgbG9nbyByZW5kZXJpbmdcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG5vcm1hbFZlcnRleEluZGV4XyA9IG5vcm1hbFByb2dyYW1fW3ZlcnRleEF0dHJpYk5hbWVfXS5sb2NhdGlvbigpOwogICAgbm9ybWFsTm9ybWFsSW5kZXhfID0gbm9ybWFsUHJvZ3JhbV9bbm9ybWFsQXR0cmliTmFtZV9dLmxvY2F0aW9uKCk7CgogICAgLy8gVGhlIHByb2dyYW0gZm9yIGhhbmRsaW5nIHRoZSBmbGF0IG9iamVjdC4uLgogICAgc3RyaW5nIGxvZ29fZmxhdF92dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sb2dvLWZsYXQudmVydCIpOwogICAgc3RyaW5nIGxvZ29fZmxhdF9mcmdfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sb2dvLWZsYXQuZnJhZyIpOwogICAgU2hhZGVyU291cmNlIGxvZ29fZmxhdF92dHhfc291cmNlKGxvZ29fZmxhdF92dHhfZmlsZW5hbWUpOwogICAgU2hhZGVyU291cmNlIGxvZ29fZmxhdF9mcmdfc291cmNlKGxvZ29fZmxhdF9mcmdfZmlsZW5hbWUpOwogICAgaWYgKCFTY2VuZTo6bG9hZF9zaGFkZXJzX2Zyb21fc3RyaW5ncyhmbGF0UHJvZ3JhbV8sIGxvZ29fZmxhdF92dHhfc291cmNlLnN0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dvX2ZsYXRfZnJnX3NvdXJjZS5zdHIoKSkpCiAgICB7CiAgICAgICAgTG9nOjplcnJvcigiTm8gdmFsaWQgcHJvZ3JhbSBmb3IgZmxhdCBsb2dvIHJlbmRlcmluZ1xuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZmxhdFZlcnRleEluZGV4XyA9IGZsYXRQcm9ncmFtX1t2ZXJ0ZXhBdHRyaWJOYW1lX10ubG9jYXRpb24oKTsKCiAgICAvLyBUaGUgcHJvZ3JhbSBmb3IgaGFuZGxpbmcgdGhlIHNoYWRvdyBvYmplY3Qgd2l0aCB0ZXh0dXJpbmcuLi4KICAgIHN0cmluZyBsb2dvX3NoYWRvd192dHhfZmlsZW5hbWUoR0xNQVJLX0RBVEFfUEFUSCIvc2hhZGVycy9pZGVhcy1sb2dvLXNoYWRvdy52ZXJ0Iik7CiAgICBzdHJpbmcgbG9nb19zaGFkb3dfZnJnX2ZpbGVuYW1lKEdMTUFSS19EQVRBX1BBVEgiL3NoYWRlcnMvaWRlYXMtbG9nby1zaGFkb3cuZnJhZyIpOwogICAgU2hhZGVyU291cmNlIGxvZ29fc2hhZG93X3Z0eF9zb3VyY2UobG9nb19zaGFkb3dfdnR4X2ZpbGVuYW1lKTsKICAgIFNoYWRlclNvdXJjZSBsb2dvX3NoYWRvd19mcmdfc291cmNlKGxvZ29fc2hhZG93X2ZyZ19maWxlbmFtZSk7CiAgICBpZiAoIVNjZW5lOjpsb2FkX3NoYWRlcnNfZnJvbV9zdHJpbmdzKHNoYWRvd1Byb2dyYW1fLCBsb2dvX3NoYWRvd192dHhfc291cmNlLnN0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dvX3NoYWRvd19mcmdfc291cmNlLnN0cigpKSkKICAgIHsKICAgICAgICBMb2c6OmVycm9yKCJObyB2YWxpZCBwcm9ncmFtIGZvciBzaGFkb3cgbG9nbyByZW5kZXJpbmdcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHNoYWRvd1ZlcnRleEluZGV4XyA9IHNoYWRvd1Byb2dyYW1fW3ZlcnRleEF0dHJpYk5hbWVfXS5sb2NhdGlvbigpOwoKICAgIC8vIFdlIG5lZWQgMiBidWZmZXJzIGZvciBvdXIgd29yayBoZXJlLiAgT25lIGZvciB0aGUgdmVydGV4IGRhdGEuCiAgICAvLyBhbmQgb25lIGZvciB0aGUgaW5kZXggZGF0YS4KICAgIGdsR2VuQnVmZmVycygyLCAmYnVmZmVyT2JqZWN0c19bMF0pOwoKICAgIC8vIEZpcnN0LCBzZXR1cCB0aGUgdmVydGV4IGRhdGEgYnkgYmluZGluZyB0aGUgZmlyc3QgYnVmZmVyIG9iamVjdCwgCiAgICAvLyBhbGxvY2F0aW5nIGl0cyBkYXRhIHN0b3JlLCBhbmQgZmlsbGluZyBpdCBpbiB3aXRoIG91ciB2ZXJ0ZXggZGF0YS4KICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIGJ1ZmZlck9iamVjdHNfWzBdKTsKICAgIGdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIGRhdGFNYXBfLnRvdGFsU2l6ZSwgMCwgR0xfU1RBVElDX0RSQVcpOwogICAgZ2xCdWZmZXJTdWJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgZGF0YU1hcF8uc2N2T2Zmc2V0LCBkYXRhTWFwXy5zY3ZTaXplLAogICAgICAgICAgICAgICAgICAgICZzaW5nbGVDeWxpbmRlclZlcnRpY2VzXy5mcm9udCgpKTsKICAgIGdsQnVmZmVyU3ViRGF0YShHTF9BUlJBWV9CVUZGRVIsIGRhdGFNYXBfLnNjbk9mZnNldCwgZGF0YU1hcF8uc2NuU2l6ZSwKICAgICAgICAgICAgICAgICAgICAmc2luZ2xlQ3lsaW5kZXJOb3JtYWxzXy5mcm9udCgpKTsKICAgIGdsQnVmZmVyU3ViRGF0YShHTF9BUlJBWV9CVUZGRVIsIGRhdGFNYXBfLmRjdk9mZnNldCwgZGF0YU1hcF8uZGN2U2l6ZSwKICAgICAgICAgICAgICAgICAgICAmZG91YmxlQ3lsaW5kZXJWZXJ0aWNlc18uZnJvbnQoKSk7CiAgICBnbEJ1ZmZlclN1YkRhdGEoR0xfQVJSQVlfQlVGRkVSLCBkYXRhTWFwXy5kY25PZmZzZXQsIGRhdGFNYXBfLmRjblNpemUsCiAgICAgICAgICAgICAgICAgICAgJmRvdWJsZUN5bGluZGVyTm9ybWFsc18uZnJvbnQoKSk7CiAgICBnbEJ1ZmZlclN1YkRhdGEoR0xfQVJSQVlfQlVGRkVSLCBkYXRhTWFwXy5ldk9mZnNldCwgZGF0YU1hcF8uZXZTaXplLAogICAgICAgICAgICAgICAgICAgICZlbGJvd1ZlcnRpY2VzXy5mcm9udCgpKTsKICAgIGdsQnVmZmVyU3ViRGF0YShHTF9BUlJBWV9CVUZGRVIsIGRhdGFNYXBfLmVuT2Zmc2V0LCBkYXRhTWFwXy5lblNpemUsIAogICAgICAgICAgICAgICAgICAgICZlbGJvd05vcm1hbHNfLmZyb250KCkpOwogICAgZ2xCdWZmZXJTdWJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgZGF0YU1hcF8uZXN2T2Zmc2V0LCBkYXRhTWFwXy5lc3ZTaXplLCAKICAgICAgICAgICAgICAgICAgICAmZWxib3dTaGFkb3dWZXJ0aWNlc18uZnJvbnQoKSk7CgogICAgLy8gTm93IHJlcGVhdCBmb3Igb3VyIGluZGV4IGRhdGEuCiAgICBnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGJ1ZmZlck9iamVjdHNfWzFdKTsKICAgIGdsQnVmZmVyRGF0YShHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kZXhEYXRhXy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpLAogICAgICAgICAgICAgICAgICZpbmRleERhdGFfLmZyb250KCksIEdMX1NUQVRJQ19EUkFXKTsKCiAgICAvLyBTZXR1cCBvdXIgdGhlIHRleHR1cmUgdGhhdCB0aGUgc2hhZG93IHByb2dyYW0gd2lsbCB1c2UuLi4KICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmVOYW1lXyk7CiAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVOYW1lXyk7CiAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX1JFUEVBVCk7CiAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX1JFUEVBVCk7CiAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwogICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX0FMUEhBLAogICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvbHV0aW9uXywgdGV4dHVyZVJlc29sdXRpb25fLAogICAgICAgICAgICAgICAgIDAsIEdMX0FMUEhBLCBHTF9VTlNJR05FRF9CWVRFLCB0ZXh0dXJlSW1hZ2VfKTsKCiAgICAvLyBXZSdyZSByZWFkeSB0byBnby4KICAgIHZhbGlkXyA9IHRydWU7Cn0KCnZvaWQKU0dJTG9nbzo6YmVuZEZvcndhcmQoU3RhY2s0JiBtcykKewogICAgbXMudHJhbnNsYXRlKDAuMCwgMS4wLCAwLjApOwogICAgbXMucm90YXRlKDkwLjAsIDEuMCwgMC4wLCAwLjApOwogICAgbXMudHJhbnNsYXRlKDAuMCwgLTEuMCwgMC4wKTsKfQoKdm9pZApTR0lMb2dvOjpiZW5kTGVmdChTdGFjazQmIG1zKQp7CiAgICBtcy5yb3RhdGUoLTkwLjAsIDAuMCwgMC4wLCAxLjApOwogICAgbXMudHJhbnNsYXRlKDAuMCwgMS4wLCAwLjApOwogICAgbXMucm90YXRlKDkwLjAsIDEuMCwgMC4wLCAwLjApOwogICAgbXMudHJhbnNsYXRlKDAuMCwgLTEuMCwgMC4wKTsKfQoKdm9pZApTR0lMb2dvOjpiZW5kUmlnaHQoU3RhY2s0JiBtcykgCnsKICAgIG1zLnJvdGF0ZSg5MC4wLCAwLjAsIDAuMCwgMS4wKTsKICAgIG1zLnRyYW5zbGF0ZSgwLjAsIDEuMCwgMC4wKTsKICAgIG1zLnJvdGF0ZSg5MC4wLCAxLjAsIDAuMCwgMC4wKTsKICAgIG1zLnRyYW5zbGF0ZSgwLjAsIC0xLjAsIDAuMCk7Cn0KCnZvaWQKU0dJTG9nbzo6ZHJhd0RvdWJsZUN5bGluZGVyKHZvaWQpCnsKICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcih2ZXJ0ZXhJbmRleF8sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgCiAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHZvaWQqPihkYXRhTWFwXy5kY3ZPZmZzZXQpKTsKICAgIGlmIChkcmF3U3R5bGVfID09IExPR09fTk9STUFMKQogICAgewogICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihub3JtYWxOb3JtYWxJbmRleF8sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x2b2lkKj4oZGF0YU1hcF8uZGNuT2Zmc2V0KSk7CiAgICB9CiAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfU1RSSVAsIDAsIDE4KTsKfQoKdm9pZApTR0lMb2dvOjpkcmF3U2luZ2xlQ3lsaW5kZXIodm9pZCkKewogICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHZlcnRleEluZGV4XywgMywgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLAogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x2b2lkKj4oZGF0YU1hcF8uc2N2T2Zmc2V0KSk7CiAgICBpZiAoZHJhd1N0eWxlXyA9PSBMT0dPX05PUk1BTCkKICAgIHsKICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobm9ybWFsTm9ybWFsSW5kZXhfLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdm9pZCo+KGRhdGFNYXBfLnNjbk9mZnNldCkpOwogICAgfQogICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX1NUUklQLCAwLCAxOCk7Cn0KCnZvaWQKU0dJTG9nbzo6ZHJhd0VsYm93KHZvaWQpCnsKICAgIHVuc2lnbmVkIGludCBzdGFydElkeCgwKTsKICAgIHVuc2lnbmVkIGludCBlbmRJZHgoNik7CiAgICBpZiAoZHJhd1N0eWxlXyA9PSBMT0dPX05PUk1BTCkKICAgIHsKICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIodmVydGV4SW5kZXhfLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x2b2lkKj4oZGF0YU1hcF8uZXZPZmZzZXQpKTsKICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobm9ybWFsTm9ybWFsSW5kZXhfLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x2b2lkKj4oZGF0YU1hcF8uZW5PZmZzZXQpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBlbmRJZHggPSA4OwogICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcih2ZXJ0ZXhJbmRleF8sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHZvaWQqPihkYXRhTWFwXy5lc3ZPZmZzZXQpKTsKICAgIH0KCiAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gc3RhcnRJZHg7IGkgPCBlbmRJZHg7IGkrKykKICAgIHsKICAgICAgICB1bnNpZ25lZCBpbnQgY3VyT2Zmc2V0KGkgKiAxOCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwogICAgICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFX1NUUklQLCAxOCwgR0xfVU5TSUdORURfU0hPUlQsIAogICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHZvaWQqPihjdXJPZmZzZXQpKTsKICAgIH0KfQoKLy8gR2VuZXJhdGUgYSBub3JtYWwgbWF0cml4IGZyb20gYSBtb2RlbHZpZXcgbWF0cml4Ci8vCi8vIFNpbmNlIHdlIGNhbid0IHVuaXZlcnNhbGx5IGhhbmRsZSB0aGUgbm9ybWFsIG1hdHJpeCBpbnNpZGUgdGhlCi8vIHZlcnRleCBzaGFkZXIgKGludmVyc2UoKSBhbmQgdHJhbnNwb3NlKCkgYnVpbHQtaW5zIG5vdCBzdXBwb3J0ZWQgYnkKLy8gR0xTTCBFUywgZm9yIGV4YW1wbGUpLCB3ZSdsbCBnZW5lcmF0ZSBpdCBoZXJlLCBhbmQgbG9hZCBpdCBhcyBhCi8vIHVuaWZvcm0uCnZvaWQKU0dJTG9nbzo6dXBkYXRlWGZvcm0oY29uc3QgbWF0NCYgbXYsIFByb2dyYW0mIHByb2dyYW0pCnsKICAgIGlmIChkcmF3U3R5bGVfID09IExPR09fTk9STUFMKQogICAgewogICAgICAgIExpYk1hdHJpeDo6bWF0MyBub3JtYWxNYXRyaXgobXZbMF1bMF0sIG12WzFdWzBdLCBtdlsyXVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12WzBdWzFdLCBtdlsxXVsxXSwgbXZbMl1bMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdlswXVsyXSwgbXZbMV1bMl0sIG12WzJdWzJdKTsKICAgICAgICBub3JtYWxNYXRyaXgudHJhbnNwb3NlKCkuaW52ZXJzZSgpOwogICAgICAgIHByb2dyYW1bbm9ybWFsTWF0cml4TmFtZV9dID0gbm9ybWFsTWF0cml4OwogICAgfQogICAgcHJvZ3JhbVttb2RlbHZpZXdOYW1lX10gPSBtdjsKfQoKUHJvZ3JhbSYKU0dJTG9nbzo6Z2V0UHJvZ3JhbSgpCnsKICAgIHN3aXRjaCAoZHJhd1N0eWxlXykKICAgIHsKICAgICAgICBjYXNlIExPR09fTk9STUFMOgogICAgICAgICAgICByZXR1cm4gbm9ybWFsUHJvZ3JhbV87CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTE9HT19GTEFUOgogICAgICAgICAgICByZXR1cm4gZmxhdFByb2dyYW1fOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIExPR09fU0hBRE9XOgogICAgICAgICAgICByZXR1cm4gc2hhZG93UHJvZ3JhbV87CiAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAogICAgfQoKICAgIHJldHVybiBub3JtYWxQcm9ncmFtXzsKfQoKdm9pZApTR0lMb2dvOjpkcmF3KFN0YWNrNCYgbW9kZWx2aWV3LCAKICAgIFN0YWNrNCYgcHJvamVjdGlvbiwgCiAgICBjb25zdCB2ZWM0JiBsaWdodFBvc2l0aW9uLAogICAgRHJhd1N0eWxlIHN0eWxlLAogICAgY29uc3QgdXZlYzMmIGN1cnJlbnRDb2xvcikKewogICAgaWYgKCF2YWxpZF8pCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIGJ1ZmZlck9iamVjdHNfWzBdKTsKICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnVmZmVyT2JqZWN0c19bMV0pOwoKICAgIC8vIFNldHVwIHRoZSBwcm9ncmFtIHRvIHVzZSBiYXNlZCB1cG9uIGRyYXcgc3R5bGUgYW5kIHNldCBpdCBydW5uaW5nLgogICAgZHJhd1N0eWxlXyA9IHN0eWxlOwogICAgdmVjNCBsb2dvQ29sb3IoY3VycmVudENvbG9yLngoKSAvIDI1NS4wLCBjdXJyZW50Q29sb3IueSgpIC8gMjU1LjAsIGN1cnJlbnRDb2xvci56KCkgLyAyNTUuMCwgMS4wKTsKICAgIFByb2dyYW0mIGN1clByb2dyYW0gPSBnZXRQcm9ncmFtKCk7CiAgICBjdXJQcm9ncmFtLnN0YXJ0KCk7CiAgICBzd2l0Y2ggKGRyYXdTdHlsZV8pCiAgICB7CiAgICAgICAgY2FzZSBMT0dPX05PUk1BTDoKICAgICAgICAgICAgY3VyUHJvZ3JhbVtsaWdodFBvc2l0aW9uTmFtZV9dID0gbGlnaHRQb3NpdGlvbjsKICAgICAgICAgICAgdmVydGV4SW5kZXhfID0gbm9ybWFsVmVydGV4SW5kZXhfOwogICAgICAgICAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG5vcm1hbE5vcm1hbEluZGV4Xyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTE9HT19GTEFUOgogICAgICAgICAgICBjdXJQcm9ncmFtW2xvZ29Db2xvck5hbWVfXSA9IGxvZ29Db2xvcjsKICAgICAgICAgICAgdmVydGV4SW5kZXhfID0gZmxhdFZlcnRleEluZGV4XzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBMT0dPX1NIQURPVzoKICAgICAgICAgICAgdmVydGV4SW5kZXhfID0gc2hhZG93VmVydGV4SW5kZXhfOwogICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgIH0KCiAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHZlcnRleEluZGV4Xyk7CiAgICBjdXJQcm9ncmFtW3Byb2plY3Rpb25OYW1lX10gPSBwcm9qZWN0aW9uLmdldEN1cnJlbnQoKTsKICAgIG1vZGVsdmlldy50cmFuc2xhdGUoNS41MDAwMDAsIC0zLjUwMDAwMCwgNC41MDAwMDApOwogICAgbW9kZWx2aWV3LnRyYW5zbGF0ZSgwLjAsICAwLjAsICAtNy4wMDAwMDApOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RG91YmxlQ3lsaW5kZXIoKTsKICAgIGJlbmRGb3J3YXJkKG1vZGVsdmlldyk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdFbGJvdygpOwogICAgbW9kZWx2aWV3LnRyYW5zbGF0ZSgwLjAsIDAuMCwgLTcuMDAwMDAwKTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0RvdWJsZUN5bGluZGVyKCk7CiAgICBiZW5kRm9yd2FyZChtb2RlbHZpZXcpOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RWxib3coKTsKICAgIG1vZGVsdmlldy50cmFuc2xhdGUoMC4wLCAwLjAsIC01LjAwMDAwMCk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdTaW5nbGVDeWxpbmRlcigpOwogICAgYmVuZFJpZ2h0KG1vZGVsdmlldyk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdFbGJvdygpOwogICAgbW9kZWx2aWV3LnRyYW5zbGF0ZSgwLjAsIDAuMCwgLTcuMDAwMDAwKTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0RvdWJsZUN5bGluZGVyKCk7CiAgICBiZW5kRm9yd2FyZChtb2RlbHZpZXcpOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RWxib3coKTsKICAgIG1vZGVsdmlldy50cmFuc2xhdGUoMC4wLCAwLjAsIC03LjAwMDAwMCk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdEb3VibGVDeWxpbmRlcigpOwogICAgYmVuZEZvcndhcmQobW9kZWx2aWV3KTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0VsYm93KCk7CiAgICBtb2RlbHZpZXcudHJhbnNsYXRlKDAuMCwgMC4wLCAtNS4wMDAwMDApOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3U2luZ2xlQ3lsaW5kZXIoKTsKICAgIGJlbmRMZWZ0KG1vZGVsdmlldyk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdFbGJvdygpOwogICAgbW9kZWx2aWV3LnRyYW5zbGF0ZSgwLjAsIDAuMCwgLTcuMDAwMDAwKTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0RvdWJsZUN5bGluZGVyKCk7CiAgICBiZW5kRm9yd2FyZChtb2RlbHZpZXcpOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RWxib3coKTsKICAgIG1vZGVsdmlldy50cmFuc2xhdGUoMC4wLCAwLjAsIC03LjAwMDAwMCk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdEb3VibGVDeWxpbmRlcigpOwogICAgYmVuZEZvcndhcmQobW9kZWx2aWV3KTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0VsYm93KCk7CiAgICBtb2RlbHZpZXcudHJhbnNsYXRlKDAuMCwgMC4wLCAtNS4wMDAwMDApOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3U2luZ2xlQ3lsaW5kZXIoKTsKICAgIGJlbmRSaWdodChtb2RlbHZpZXcpOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RWxib3coKTsKICAgIG1vZGVsdmlldy50cmFuc2xhdGUoMC4wLCAwLjAsIC03LjAwMDAwMCk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdEb3VibGVDeWxpbmRlcigpOwogICAgYmVuZEZvcndhcmQobW9kZWx2aWV3KTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0VsYm93KCk7CiAgICBtb2RlbHZpZXcudHJhbnNsYXRlKDAuMCwgMC4wLCAtNy4wMDAwMDApOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RG91YmxlQ3lsaW5kZXIoKTsKICAgIGJlbmRGb3J3YXJkKG1vZGVsdmlldyk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdFbGJvdygpOwogICAgbW9kZWx2aWV3LnRyYW5zbGF0ZSgwLjAsIDAuMCwgLTUuMDAwMDAwKTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd1NpbmdsZUN5bGluZGVyKCk7CiAgICBiZW5kTGVmdChtb2RlbHZpZXcpOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RWxib3coKTsKICAgIG1vZGVsdmlldy50cmFuc2xhdGUoMC4wLCAwLjAsIC03LjAwMDAwMCk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdEb3VibGVDeWxpbmRlcigpOwogICAgYmVuZEZvcndhcmQobW9kZWx2aWV3KTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0VsYm93KCk7CiAgICBtb2RlbHZpZXcudHJhbnNsYXRlKDAuMCwgMC4wLCAtNy4wMDAwMDApOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RG91YmxlQ3lsaW5kZXIoKTsKICAgIGJlbmRGb3J3YXJkKG1vZGVsdmlldyk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdFbGJvdygpOwogICAgbW9kZWx2aWV3LnRyYW5zbGF0ZSgwLjAsIDAuMCwgLTUuMDAwMDAwKTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd1NpbmdsZUN5bGluZGVyKCk7CiAgICBiZW5kUmlnaHQobW9kZWx2aWV3KTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0VsYm93KCk7CiAgICBtb2RlbHZpZXcudHJhbnNsYXRlKDAuMCwgMC4wLCAtNy4wMDAwMDApOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RG91YmxlQ3lsaW5kZXIoKTsKICAgIGJlbmRGb3J3YXJkKG1vZGVsdmlldyk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdFbGJvdygpOwogICAgbW9kZWx2aWV3LnRyYW5zbGF0ZSgwLjAsIDAuMCwgLTcuMDAwMDAwKTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0RvdWJsZUN5bGluZGVyKCk7CiAgICBiZW5kRm9yd2FyZChtb2RlbHZpZXcpOwogICAgdXBkYXRlWGZvcm0obW9kZWx2aWV3LmdldEN1cnJlbnQoKSwgY3VyUHJvZ3JhbSk7CiAgICBkcmF3RWxib3coKTsKICAgIG1vZGVsdmlldy50cmFuc2xhdGUoMC4wLCAwLjAsIC01LjAwMDAwMCk7CiAgICB1cGRhdGVYZm9ybShtb2RlbHZpZXcuZ2V0Q3VycmVudCgpLCBjdXJQcm9ncmFtKTsKICAgIGRyYXdTaW5nbGVDeWxpbmRlcigpOwogICAgYmVuZExlZnQobW9kZWx2aWV3KTsKICAgIHVwZGF0ZVhmb3JtKG1vZGVsdmlldy5nZXRDdXJyZW50KCksIGN1clByb2dyYW0pOwogICAgZHJhd0VsYm93KCk7CiAgICBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh2ZXJ0ZXhJbmRleF8pOwogICAgc3dpdGNoIChkcmF3U3R5bGVfKQogICAgewogICAgICAgIGNhc2UgTE9HT19OT1JNQUw6CiAgICAgICAgICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG5vcm1hbE5vcm1hbEluZGV4Xyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTE9HT19GTEFUOgogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIExPR09fU0hBRE9XOgogICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgIH0KICAgIGN1clByb2dyYW0uc3RvcCgpOwoKICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApOwogICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCAwKTsKfQo=