0x608060405234801561001057600080fd5b50600436106102415760003560e01c80636ded82f811610145578063a694fc3a116100bd578063d66692a71161008c578063e6787b1b11610071578063e6787b1b14610519578063f2fde38b14610521578063fe1684771461053457600080fd5b8063d66692a714610508578063db2e21bc1461051157600080fd5b8063a694fc3a146104bc578063aa5c3ab4146104cf578063b187bd26146104d8578063c93c8f34146104e557600080fd5b80638da5cb5b116101145780639d76ea58116100f95780639d76ea581461048b578063a181a0ee146104ab578063a26dbf26146104b357600080fd5b80638da5cb5b146103fd5780639b3a258f1461041b57600080fd5b80636ded82f8146103b4578063715018a6146103d757806374a4f7d1146103e1578063750142e6146103f457600080fd5b80631cb95511116101d85780634206951e116101a75780634df861261161018c5780634df861261461038f57806350003ca6146103985780635b9f0016146103ab57600080fd5b80634206951e146103695780634373efa41461037c57600080fd5b80631cb955111461033c5780632e1a7d4d14610345578063372500ab146103585780633e3ff7b61461036057600080fd5b80630d932e70116102145780630d932e70146102a7578063125f9e33146102bf5780631a6f11c0146103045780631bbc4b831461031757600080fd5b80630214d56a146102465780630455444314610262578063096cf03f1461026b5780630ba36dcd14610274575b600080fd5b61024f600b5481565b6040519081526020015b60405180910390f35b61024f600d5481565b61024f600a5481565b610287610282366004612f2e565b61053d565b604080519485526020850193909352918301526060820152608001610259565b6102af6105c9565b6040519015158152602001610259565b6002546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610259565b6102af610312366004612f64565b610753565b600e546102df90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61024f60085481565b6102af610353366004612f64565b610972565b6102af610b7e565b61024f60075481565b6102af610377366004612f7d565b610be0565b61024f61038a366004612f2e565b610e55565b61024f610e1081565b61024f6103a6366004612f2e565b611080565b61024f60045481565b6102af6103c2366004612f2e565b60106020526000908152604090205460ff1681565b6103df6110a0565b005b61024f6103ef366004612f2e565b611113565b61024f60065481565b60005473ffffffffffffffffffffffffffffffffffffffff166102df565b61045e610429366004612f64565b601260205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610259565b6001546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b61024f6112b2565b61024f600c5481565b6102af6104ca366004612f64565b6112f5565b61024f60055481565b600e546102af9060ff1681565b6102af6104f3366004612f2e565b60116020526000908152604090205460ff1681565b61024f60035481565b6102af611588565b6102af6116f1565b6103df61052f366004612f2e565b611a40565b61024f60095481565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205481908190819060ff16156105b55750505073ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080546001820154600283015460049093015491935091906105c2565b5060009250829150819050805b9193509193565b600e5460009060ff16156106245760405162461bcd60e51b815260206004820152600f60248201527f436f6e747261637420706175736564000000000000000000000000000000000060448201526064015b60405180910390fd5b3360009081526011602052604090205460ff166106835760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f602052604090206004015414156106e75760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b600754421180156106f9575060085442105b6107455760405162461bcd60e51b815260206004820152600a60248201527f57726f6e672074696d6500000000000000000000000000000000000000000000604482015260640161061b565b61074e33611b3c565b905090565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146107bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b600754421180156107cd575060085442105b6108195760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600082116108695760405162461bcd60e51b815260206004820152600c60248201527f5a65726f20726577617264730000000000000000000000000000000000000000604482015260640161061b565b600254600090610892903390859073ffffffffffffffffffffffffffffffffffffffff16611c20565b9050806108e15760405162461bcd60e51b815260206004820152601460248201527f4572726f7220616464696e672072657761726473000000000000000000000000604482015260640161061b565b6108ff6108f66108ef6112b2565b8590611c36565b60085490611c93565b60085560065461090f9084611c93565b60065560055461091f9084611c93565b60055560095460085460408051928352602083019190915281018490527fe8be1615e377de21e764a1a5ee455b65842c637268d3db944aeb380fbf7c9dd99060600160405180910390a150600192915050565b60006109a761098e610e10600d54611cf990919063ffffffff16565b336000908152600f602052604090206001015490611c93565b4211610a1b5760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b336000908152600f6020526040902054821115610a7a5760405162461bcd60e51b815260206004820152600b60248201527f57726f6e672076616c7565000000000000000000000000000000000000000000604482015260640161061b565b600954336000908152600f60205260409020600401541415610b02576000610aa133611080565b1115610b02576000610ab1610b7e565b905080610b005760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b6000610b0d33610e55565b1115610b6e576000610b1d6116f1565b905080610b6c5760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b610b783383611d94565b92915050565b600080610b8a33611113565b11610bd75760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b61074e33611fbd565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b428411610cbd5760405162461bcd60e51b815260206004820152602960248201527f53746172742073686f756c64206265206d6f7265207468616e20626c6f636b2e60448201527f74696d657374616d700000000000000000000000000000000000000000000000606482015260840161061b565b838311610d325760405162461bcd60e51b815260206004820152602660248201527f456e6420626c6f636b2073686f756c642062652067726561746572207468616e60448201527f2073746172740000000000000000000000000000000000000000000000000000606482015260840161061b565b60008511610d825760405162461bcd60e51b815260206004820152601760248201527f526577617264206d75737420626520706f736974697665000000000000000000604482015260640161061b565b610d8a61223d565b6000610d958661235d565b905080610de45760405162461bcd60e51b815260206004820152600d60248201527f52657761726473206572726f7200000000000000000000000000000000000000604482015260640161061b565b610dee85856125b1565b600d8390556000600c556009546040805191825260208201879052810185905260608101849052608081018790527fc337ef8990512c5ba83d668712c84345b9b984e6eed2378c19bcf7b61f02073f9060a00160405180910390a150600195945050505050565b600e5460009060ff1615610eab5760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526011602052604090205460ff16610f205760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409020600401541415610f5a57506000919050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600f60208181526040808420600480820154808752601285529286206001810154600384015491909201549790965293909252600290910154909391929111610fc457506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600f602052604081205490611002620f4240610ffc8486611cf9565b90611c36565b905060006110218261101b620f4240610ffc878a611cf9565b90612676565b90506005548111156110755760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b979650505050505050565b600061108b82611113565b61109757506000919050565b610b78826126d4565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b61111160006127f5565b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205460ff166111885760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b60045461119757506000919050565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060040154146112365760405162461bcd60e51b815260206004820152602e60248201527f506c656173652072656e657720696e20746865206163746976652076616c696460448201527f20706572696f64436f756e746572000000000000000000000000000000000000606482015260840161061b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902054806112a95760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b50600192915050565b6000600654600014806112c55750600554155b156112d05750600090565b6000610b786112ec60075460085461267690919063ffffffff16565b60065490611c36565b6001546000903390839073ffffffffffffffffffffffffffffffffffffffff16600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156113c057600080fd5b505afa1580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190612faf565b9050808311156114705760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600e5460ff16156114c35760405162461bcd60e51b815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015260640161061b565b60075442101580156114d6575060085442105b6115225760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600086116115725760405162461bcd60e51b815260206004820152601460248201527f43616e2774207374616b65203020616d6f756e74000000000000000000000000604482015260640161061b565b61157c338761286a565b94505b50505050919050565b60006115a461098e610e10600d54611cf990919063ffffffff16565b42116116185760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b3360009081526011602052604090205460ff166116775760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b3360009081526010602052604090205460ff16156116d75760405162461bcd60e51b815260206004820152600c60248201527f416c726561647920506169640000000000000000000000000000000000000000604482015260640161061b565b336000818152600f602052604090205461074e9190611d94565b600e5460009060ff16156117475760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b3360009081526011602052604090205460ff166117a65760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f6020526040902060040154141561180a5760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b336000818152600f6020818152604080842060048082015480875260128552928620600181015460038401549190920154979096529390925260029091015490939192911161189b5760405162461bcd60e51b815260206004820152601b60248201527f416c726561647920636c61696d6564206f6c6420726577617264730000000000604482015260640161061b565b336000908152600f6020526040812054906118bd620f4240610ffc8486611cf9565b905060006118d68261101b620f4240610ffc878a611cf9565b905060055481111561192a5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b600086815260126020908152604080832060040154338452600f9092529091206002015560055461195b9082612676565b600555600254600090611987903390849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806119d65760405162461bcd60e51b815260206004820152600c60248201527f4572726f7220706179696e670000000000000000000000000000000000000000604482015260640161061b565b6002546001546040805187815260208101869052339373ffffffffffffffffffffffffffffffffffffffff9081169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a4600197505050505050505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314611aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff8116611b305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161061b565b611b39816127f5565b50565b6000611b46612cb1565b6000611b5183610e55565b1115611bb2576000611b616116f1565b905080611bb05760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060048082019290925542600182018190556002820155600a546003820155549054611c0491611c93565b600455600c54611c15906001611c93565b600c55506001919050565b6000611c2e84308585612d50565b949350505050565b6000808211611c875760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161061b565b6000611c2e8385612ff7565b600080611ca08385613032565b905083811015611cf25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161061b565b9392505050565b600082611d0857506000610b78565b6000611d14838561304a565b905082611d218583612ff7565b14611cf25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b6000611d9e612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902054611dce9083612676565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902055600e5460ff16158015611e30575060095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902060040154145b15611e4657600454611e429083612676565b6004555b600154600090611e6f908590859073ffffffffffffffffffffffffffffffffffffffff16612bc7565b905080611ebe5760405162461bcd60e51b815260206004820152601560248201527f4572726f7220647572696e672077697468647261770000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902054611fb35773ffffffffffffffffffffffffffffffffffffffff8416600090815260106020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001179091556011835281842080549091169055600954600f909252909120600401541415611f7157600c54611f6d906001612676565b600c555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260408120818155600181018290556002810182905560038101829055600401555b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154611fee612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205490612026620f4240610ffc8486611cf9565b9050600061204a8261101b620f4240610ffc600a5488611cf990919063ffffffff16565b90506000811161209c5760405162461bcd60e51b815260206004820152601460248201527f4e6f20726577617264732067656e657261746564000000000000000000000000604482015260640161061b565b6005548111156121145760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f756768207265776172647320696e2074686520636f6e74726160448201527f6374000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600a5473ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090206003810191909155426002909101556005546121589082612676565b600555600254600090612184908890849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806121d35760405162461bcd60e51b815260206004820152601760248201527f52657761726473207472616e73666572206661696c6564000000000000000000604482015260640161061b565b600254600154604080518781526020810186905273ffffffffffffffffffffffffffffffffffffffff8b81169481169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a45060019695505050505050565b600854421161228e5760405162461bcd60e51b815260206004820152601c60248201527f576169742074696c6c20656e64206f66207468697320706572696f6400000000604482015260640161061b565b612296612cb1565b6040518060c001604052806009548152602001600a5481526020016122b96112b2565b8152600754602080830191909152600854604080840191909152600580546060948501526009546000908152601284528281208651815593860151600180860191909155928601516002850155938501516003840155608085015160048085019190915560a09095015192019190915560068290559155600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b6002546001546000913391849173ffffffffffffffffffffffffffffffffffffffff90811691168114806123ab575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b6123f75760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156124a257600080fd5b505afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da9190612faf565b9050808311156125525760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b60065461255f9087611c93565b60065560055461256f9087611c93565b600555600254612598903390889073ffffffffffffffffffffffffffffffffffffffff16611c20565b6125a5576000945061157f565b50600195945050505050565b6000600654116126295760405162461bcd60e51b815260206004820152602260248201527f416464207265776172647320666f72207468697320706572696f64436f756e7460448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600782905560088190556009805490600061264383613087565b9091555050600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600b55565b6000828211156126c85760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161061b565b6000611c2e83856130c0565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154600a54600b544211612713575060009392505050565b600454612724575060009392505050565b6000600854421061274557600b5460085461273e91612676565b9050612756565b600b54612753904290612676565b90505b600061276a6127636112b2565b8390611cf9565b9050600061279461278d600454610ffc620f424086611cf990919063ffffffff16565b8590611c93565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600f60205260408120549192506127ce620f4240610ffc848a611cf9565b905060006127e78261101b620f4240610ffc8789611cf9565b9a9950505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612874612cb1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526011602052604090205460ff1661297b576040805160a081018252838152426020808301828152838501928352600a54606085019081526009546080860190815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600f909452959092209351845551600180850191909155915160028401555160038301559151600490910155600c5461292591611c93565b600c5573ffffffffffffffffffffffffffffffffffffffff8316600090815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055612b1b565b60095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f602052604090206004015414612a0c5760006129b784611b3c565b905080612a065760405162461bcd60e51b815260206004820152600e60248201527f4572726f722072656e6577696e67000000000000000000000000000000000000604482015260640161061b565b50612a68565b6000612a1784611fbd565b905080612a665760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409081902054815160a081019092529080612aa58386611c93565b8152426020808301829052604080840192909252600a5460608085019190915260095460809485015273ffffffffffffffffffffffffffffffffffffffff89166000908152600f835283902085518155918501516001830155918401516002820155908301516003820155910151600490910155505b600454612b289083611c93565b600455600354612b389083611c93565b600355600154612b61908490849073ffffffffffffffffffffffffffffffffffffffff16611c20565b612b6d57506000610b78565b60015460405183815273ffffffffffffffffffffffffffffffffffffffff8581169216907f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd79060200160405180910390a350600192915050565b60015460009073ffffffffffffffffffffffffffffffffffffffff83811691161480612c0d575060025473ffffffffffffffffffffffffffffffffffffffff8381169116145b612c595760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff85811682029290921792839055611fb39204168585612db9565b600b544211612cbc57565b600454612cc95742600b55565b60006008544210612cea57600b54600854612ce391612676565b9050612cfb565b600b54612cf8904290612676565b90505b6000612d086127636112b2565b9050612d32612d29600454610ffc620f424085611cf990919063ffffffff16565b600a5490611c93565b600a556008544210612d4857600854600b555050565b42600b555050565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84811682029290921792839055600092612dae9291900416868686612e6f565b506001949350505050565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6191906130d7565b612e6a57600080fd5b505050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd90606401602060405180830381600087803b158015612ee757600080fd5b505af1158015612efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1f91906130d7565b612f2857600080fd5b50505050565b600060208284031215612f4057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611cf257600080fd5b600060208284031215612f7657600080fd5b5035919050565b60008060008060808587031215612f9357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612fc157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261302d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000821982111561304557613045612fc8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561308257613082612fc8565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130b9576130b9612fc8565b5060010190565b6000828210156130d2576130d2612fc8565b500390565b6000602082840312156130e957600080fd5b81518015158114611cf257600080fdfea2646970667358221220b387a5e97b894af99c9d48fa4bc3be27f0a7ebcd7934b674397e3101873b0f7064736f6c63430008090033
0x60806040523480156200001157600080fd5b5060405162003318380380620033188339810160408190526200003491620001a1565b6200003f3362000134565b6001600160a01b038216620000905760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b60448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116620001005760405162461bcd60e51b815260206004820152601960248201527f5a65726f2072657761726420746f6b656e206164647265737300000000000000604482015260640162000087565b600280546001600160a01b0319166001600160a01b039290921691909117905550600e805460ff19166001179055620001d9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019c57600080fd5b919050565b60008060408385031215620001b557600080fd5b620001c08362000184565b9150620001d06020840162000184565b90509250929050565b61312f80620001e96000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80636ded82f811610145578063a694fc3a116100bd578063d66692a71161008c578063e6787b1b11610071578063e6787b1b14610519578063f2fde38b14610521578063fe1684771461053457600080fd5b8063d66692a714610508578063db2e21bc1461051157600080fd5b8063a694fc3a146104bc578063aa5c3ab4146104cf578063b187bd26146104d8578063c93c8f34146104e557600080fd5b80638da5cb5b116101145780639d76ea58116100f95780639d76ea581461048b578063a181a0ee146104ab578063a26dbf26146104b357600080fd5b80638da5cb5b146103fd5780639b3a258f1461041b57600080fd5b80636ded82f8146103b4578063715018a6146103d757806374a4f7d1146103e1578063750142e6146103f457600080fd5b80631cb95511116101d85780634206951e116101a75780634df861261161018c5780634df861261461038f57806350003ca6146103985780635b9f0016146103ab57600080fd5b80634206951e146103695780634373efa41461037c57600080fd5b80631cb955111461033c5780632e1a7d4d14610345578063372500ab146103585780633e3ff7b61461036057600080fd5b80630d932e70116102145780630d932e70146102a7578063125f9e33146102bf5780631a6f11c0146103045780631bbc4b831461031757600080fd5b80630214d56a146102465780630455444314610262578063096cf03f1461026b5780630ba36dcd14610274575b600080fd5b61024f600b5481565b6040519081526020015b60405180910390f35b61024f600d5481565b61024f600a5481565b610287610282366004612f2e565b61053d565b604080519485526020850193909352918301526060820152608001610259565b6102af6105c9565b6040519015158152602001610259565b6002546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610259565b6102af610312366004612f64565b610753565b600e546102df90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61024f60085481565b6102af610353366004612f64565b610972565b6102af610b7e565b61024f60075481565b6102af610377366004612f7d565b610be0565b61024f61038a366004612f2e565b610e55565b61024f610e1081565b61024f6103a6366004612f2e565b611080565b61024f60045481565b6102af6103c2366004612f2e565b60106020526000908152604090205460ff1681565b6103df6110a0565b005b61024f6103ef366004612f2e565b611113565b61024f60065481565b60005473ffffffffffffffffffffffffffffffffffffffff166102df565b61045e610429366004612f64565b601260205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610259565b6001546102df9073ffffffffffffffffffffffffffffffffffffffff1681565b61024f6112b2565b61024f600c5481565b6102af6104ca366004612f64565b6112f5565b61024f60055481565b600e546102af9060ff1681565b6102af6104f3366004612f2e565b60116020526000908152604090205460ff1681565b61024f60035481565b6102af611588565b6102af6116f1565b6103df61052f366004612f2e565b611a40565b61024f60095481565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205481908190819060ff16156105b55750505073ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080546001820154600283015460049093015491935091906105c2565b5060009250829150819050805b9193509193565b600e5460009060ff16156106245760405162461bcd60e51b815260206004820152600f60248201527f436f6e747261637420706175736564000000000000000000000000000000000060448201526064015b60405180910390fd5b3360009081526011602052604090205460ff166106835760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f602052604090206004015414156106e75760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b600754421180156106f9575060085442105b6107455760405162461bcd60e51b815260206004820152600a60248201527f57726f6e672074696d6500000000000000000000000000000000000000000000604482015260640161061b565b61074e33611b3c565b905090565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146107bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b600754421180156107cd575060085442105b6108195760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600082116108695760405162461bcd60e51b815260206004820152600c60248201527f5a65726f20726577617264730000000000000000000000000000000000000000604482015260640161061b565b600254600090610892903390859073ffffffffffffffffffffffffffffffffffffffff16611c20565b9050806108e15760405162461bcd60e51b815260206004820152601460248201527f4572726f7220616464696e672072657761726473000000000000000000000000604482015260640161061b565b6108ff6108f66108ef6112b2565b8590611c36565b60085490611c93565b60085560065461090f9084611c93565b60065560055461091f9084611c93565b60055560095460085460408051928352602083019190915281018490527fe8be1615e377de21e764a1a5ee455b65842c637268d3db944aeb380fbf7c9dd99060600160405180910390a150600192915050565b60006109a761098e610e10600d54611cf990919063ffffffff16565b336000908152600f602052604090206001015490611c93565b4211610a1b5760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b336000908152600f6020526040902054821115610a7a5760405162461bcd60e51b815260206004820152600b60248201527f57726f6e672076616c7565000000000000000000000000000000000000000000604482015260640161061b565b600954336000908152600f60205260409020600401541415610b02576000610aa133611080565b1115610b02576000610ab1610b7e565b905080610b005760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b6000610b0d33610e55565b1115610b6e576000610b1d6116f1565b905080610b6c5760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b610b783383611d94565b92915050565b600080610b8a33611113565b11610bd75760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b61074e33611fbd565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b428411610cbd5760405162461bcd60e51b815260206004820152602960248201527f53746172742073686f756c64206265206d6f7265207468616e20626c6f636b2e60448201527f74696d657374616d700000000000000000000000000000000000000000000000606482015260840161061b565b838311610d325760405162461bcd60e51b815260206004820152602660248201527f456e6420626c6f636b2073686f756c642062652067726561746572207468616e60448201527f2073746172740000000000000000000000000000000000000000000000000000606482015260840161061b565b60008511610d825760405162461bcd60e51b815260206004820152601760248201527f526577617264206d75737420626520706f736974697665000000000000000000604482015260640161061b565b610d8a61223d565b6000610d958661235d565b905080610de45760405162461bcd60e51b815260206004820152600d60248201527f52657761726473206572726f7200000000000000000000000000000000000000604482015260640161061b565b610dee85856125b1565b600d8390556000600c556009546040805191825260208201879052810185905260608101849052608081018790527fc337ef8990512c5ba83d668712c84345b9b984e6eed2378c19bcf7b61f02073f9060a00160405180910390a150600195945050505050565b600e5460009060ff1615610eab5760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526011602052604090205460ff16610f205760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409020600401541415610f5a57506000919050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600f60208181526040808420600480820154808752601285529286206001810154600384015491909201549790965293909252600290910154909391929111610fc457506000949350505050565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600f602052604081205490611002620f4240610ffc8486611cf9565b90611c36565b905060006110218261101b620f4240610ffc878a611cf9565b90612676565b90506005548111156110755760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b979650505050505050565b600061108b82611113565b61109757506000919050565b610b78826126d4565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b61111160006127f5565b565b73ffffffffffffffffffffffffffffffffffffffff811660009081526011602052604081205460ff166111885760405162461bcd60e51b815260206004820152601860248201527f4e6f207374616b657320666f756e6420666f7220757365720000000000000000604482015260640161061b565b60045461119757506000919050565b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060040154146112365760405162461bcd60e51b815260206004820152602e60248201527f506c656173652072656e657720696e20746865206163746976652076616c696460448201527f20706572696f64436f756e746572000000000000000000000000000000000000606482015260840161061b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902054806112a95760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b50600192915050565b6000600654600014806112c55750600554155b156112d05750600090565b6000610b786112ec60075460085461267690919063ffffffff16565b60065490611c36565b6001546000903390839073ffffffffffffffffffffffffffffffffffffffff16600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156113c057600080fd5b505afa1580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190612faf565b9050808311156114705760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600e5460ff16156114c35760405162461bcd60e51b815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015260640161061b565b60075442101580156114d6575060085442105b6115225760405162461bcd60e51b815260206004820152601560248201527f4e6f2061637469766520706f6f6c202874696d65290000000000000000000000604482015260640161061b565b600086116115725760405162461bcd60e51b815260206004820152601460248201527f43616e2774207374616b65203020616d6f756e74000000000000000000000000604482015260640161061b565b61157c338761286a565b94505b50505050919050565b60006115a461098e610e10600d54611cf990919063ffffffff16565b42116116185760405162461bcd60e51b815260206004820152602360248201527f43616e2774207769746864726177206265666f7265206c6f636b20647572617460448201527f696f6e0000000000000000000000000000000000000000000000000000000000606482015260840161061b565b3360009081526011602052604090205460ff166116775760405162461bcd60e51b815260206004820152601c60248201527f4e6f207374616b657320617661696c61626c6520666f72207573657200000000604482015260640161061b565b3360009081526010602052604090205460ff16156116d75760405162461bcd60e51b815260206004820152600c60248201527f416c726561647920506169640000000000000000000000000000000000000000604482015260640161061b565b336000818152600f602052604090205461074e9190611d94565b600e5460009060ff16156117475760405162461bcd60e51b815260206004820152600f60248201527f436f6e7472616374207061757365640000000000000000000000000000000000604482015260640161061b565b3360009081526011602052604090205460ff166117a65760405162461bcd60e51b815260206004820152601f60248201527f4e6f207374616b696e677320666f756e642c20706c65617365207374616b6500604482015260640161061b565b600954336000908152600f6020526040902060040154141561180a5760405162461bcd60e51b815260206004820152600f60248201527f416c72656164792072656e657765640000000000000000000000000000000000604482015260640161061b565b336000818152600f6020818152604080842060048082015480875260128552928620600181015460038401549190920154979096529390925260029091015490939192911161189b5760405162461bcd60e51b815260206004820152601b60248201527f416c726561647920636c61696d6564206f6c6420726577617264730000000000604482015260640161061b565b336000908152600f6020526040812054906118bd620f4240610ffc8486611cf9565b905060006118d68261101b620f4240610ffc878a611cf9565b905060055481111561192a5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820726577617264730000000000000000000000000000604482015260640161061b565b600086815260126020908152604080832060040154338452600f9092529091206002015560055461195b9082612676565b600555600254600090611987903390849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806119d65760405162461bcd60e51b815260206004820152600c60248201527f4572726f7220706179696e670000000000000000000000000000000000000000604482015260640161061b565b6002546001546040805187815260208101869052339373ffffffffffffffffffffffffffffffffffffffff9081169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a4600197505050505050505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314611aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff8116611b305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161061b565b611b39816127f5565b50565b6000611b46612cb1565b6000611b5183610e55565b1115611bb2576000611b616116f1565b905080611bb05760405162461bcd60e51b815260206004820152601860248201527f4572726f7220706179696e67206f6c6420726577617264730000000000000000604482015260640161061b565b505b60095473ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902060048082019290925542600182018190556002820155600a546003820155549054611c0491611c93565b600455600c54611c15906001611c93565b600c55506001919050565b6000611c2e84308585612d50565b949350505050565b6000808211611c875760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161061b565b6000611c2e8385612ff7565b600080611ca08385613032565b905083811015611cf25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161061b565b9392505050565b600082611d0857506000610b78565b6000611d14838561304a565b905082611d218583612ff7565b14611cf25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b6000611d9e612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040902054611dce9083612676565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902055600e5460ff16158015611e30575060095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902060040154145b15611e4657600454611e429083612676565b6004555b600154600090611e6f908590859073ffffffffffffffffffffffffffffffffffffffff16612bc7565b905080611ebe5760405162461bcd60e51b815260206004820152601560248201527f4572726f7220647572696e672077697468647261770000000000000000000000604482015260640161061b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f6020526040902054611fb35773ffffffffffffffffffffffffffffffffffffffff8416600090815260106020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081166001179091556011835281842080549091169055600954600f909252909120600401541415611f7157600c54611f6d906001612676565b600c555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260408120818155600181018290556002810182905560038101829055600401555b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154611fee612cb1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205490612026620f4240610ffc8486611cf9565b9050600061204a8261101b620f4240610ffc600a5488611cf990919063ffffffff16565b90506000811161209c5760405162461bcd60e51b815260206004820152601460248201527f4e6f20726577617264732067656e657261746564000000000000000000000000604482015260640161061b565b6005548111156121145760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f756768207265776172647320696e2074686520636f6e74726160448201527f6374000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600a5473ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090206003810191909155426002909101556005546121589082612676565b600555600254600090612184908890849073ffffffffffffffffffffffffffffffffffffffff16612bc7565b9050806121d35760405162461bcd60e51b815260206004820152601760248201527f52657761726473207472616e73666572206661696c6564000000000000000000604482015260640161061b565b600254600154604080518781526020810186905273ffffffffffffffffffffffffffffffffffffffff8b81169481169316917f0fd12da3890315fa38b862dc2fff7f24c95981f6508cc2be090640de791b671e910160405180910390a45060019695505050505050565b600854421161228e5760405162461bcd60e51b815260206004820152601c60248201527f576169742074696c6c20656e64206f66207468697320706572696f6400000000604482015260640161061b565b612296612cb1565b6040518060c001604052806009548152602001600a5481526020016122b96112b2565b8152600754602080830191909152600854604080840191909152600580546060948501526009546000908152601284528281208651815593860151600180860191909155928601516002850155938501516003840155608085015160048085019190915560a09095015192019190915560068290559155600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b6002546001546000913391849173ffffffffffffffffffffffffffffffffffffffff90811691168114806123ab575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b6123f75760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff848116820292909217928390556040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081528683166004820152306024820152600093919091049091169063dd62ed3e9060440160206040518083038186803b1580156124a257600080fd5b505afa1580156124b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124da9190612faf565b9050808311156125525760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360448201527f6500000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b60065461255f9087611c93565b60065560055461256f9087611c93565b600555600254612598903390889073ffffffffffffffffffffffffffffffffffffffff16611c20565b6125a5576000945061157f565b50600195945050505050565b6000600654116126295760405162461bcd60e51b815260206004820152602260248201527f416464207265776172647320666f72207468697320706572696f64436f756e7460448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161061b565b600782905560088190556009805490600061264383613087565b9091555050600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600b55565b6000828211156126c85760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161061b565b6000611c2e83856130c0565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812060030154600a54600b544211612713575060009392505050565b600454612724575060009392505050565b6000600854421061274557600b5460085461273e91612676565b9050612756565b600b54612753904290612676565b90505b600061276a6127636112b2565b8390611cf9565b9050600061279461278d600454610ffc620f424086611cf990919063ffffffff16565b8590611c93565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600f60205260408120549192506127ce620f4240610ffc848a611cf9565b905060006127e78261101b620f4240610ffc8789611cf9565b9a9950505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612874612cb1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526011602052604090205460ff1661297b576040805160a081018252838152426020808301828152838501928352600a54606085019081526009546080860190815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600f909452959092209351845551600180850191909155915160028401555160038301559151600490910155600c5461292591611c93565b600c5573ffffffffffffffffffffffffffffffffffffffff8316600090815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055612b1b565b60095473ffffffffffffffffffffffffffffffffffffffff84166000908152600f602052604090206004015414612a0c5760006129b784611b3c565b905080612a065760405162461bcd60e51b815260206004820152600e60248201527f4572726f722072656e6577696e67000000000000000000000000000000000000604482015260640161061b565b50612a68565b6000612a1784611fbd565b905080612a665760405162461bcd60e51b815260206004820152601460248201527f4572726f7220706179696e672072657761726473000000000000000000000000604482015260640161061b565b505b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f60205260409081902054815160a081019092529080612aa58386611c93565b8152426020808301829052604080840192909252600a5460608085019190915260095460809485015273ffffffffffffffffffffffffffffffffffffffff89166000908152600f835283902085518155918501516001830155918401516002820155908301516003820155910151600490910155505b600454612b289083611c93565b600455600354612b389083611c93565b600355600154612b61908490849073ffffffffffffffffffffffffffffffffffffffff16611c20565b612b6d57506000610b78565b60015460405183815273ffffffffffffffffffffffffffffffffffffffff8581169216907f5dac0c1b1112564a045ba943c9d50270893e8e826c49be8e7073adc713ab7bd79060200160405180910390a350600192915050565b60015460009073ffffffffffffffffffffffffffffffffffffffff83811691161480612c0d575060025473ffffffffffffffffffffffffffffffffffffffff8381169116145b612c595760405162461bcd60e51b815260206004820152601560248201527f496e76616c696420746f6b656e20616464726573730000000000000000000000604482015260640161061b565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff85811682029290921792839055611fb39204168585612db9565b600b544211612cbc57565b600454612cc95742600b55565b60006008544210612cea57600b54600854612ce391612676565b9050612cfb565b600b54612cf8904290612676565b90505b6000612d086127636112b2565b9050612d32612d29600454610ffc620f424085611cf990919063ffffffff16565b600a5490611c93565b600a556008544210612d4857600854600b555050565b42600b555050565b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84811682029290921792839055600092612dae9291900416868686612e6f565b506001949350505050565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6191906130d7565b612e6a57600080fd5b505050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd90606401602060405180830381600087803b158015612ee757600080fd5b505af1158015612efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1f91906130d7565b612f2857600080fd5b50505050565b600060208284031215612f4057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114611cf257600080fd5b600060208284031215612f7657600080fd5b5035919050565b60008060008060808587031215612f9357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612fc157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008261302d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000821982111561304557613045612fc8565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561308257613082612fc8565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130b9576130b9612fc8565b5060010190565b6000828210156130d2576130d2612fc8565b500390565b6000602082840312156130e957600080fd5b81518015158114611cf257600080fdfea2646970667358221220b387a5e97b894af99c9d48fa4bc3be27f0a7ebcd7934b674397e3101873b0f7064736f6c63430008090033000000000000000000000000619391ba76b316fc56bc50388b90d9c8f24fcfe7000000000000000000000000126e4dcd47c00054f367345202de31db570fe2a7