0x608060405234801561001057600080fd5b506004361061025c5760003560e01c806372c7ec8311610145578063c87b56dd116100bd578063e0df5b6f1161008c578063e985e9c511610071578063e985e9c5146105d3578063f28ca1dd14610601578063f2fde38b1461060957600080fd5b8063e0df5b6f146105a0578063e8c61831146105b357600080fd5b8063c87b56dd14610547578063d547cfb71461055a578063dd62ed3e14610562578063e0d11a471461058d57600080fd5b80639b19251a11610114578063a9059cbb116100f9578063a9059cbb146104f6578063b65fa14f14610509578063b88d4fde1461053457600080fd5b80639b19251a146104c0578063a22cb465146104e357600080fd5b806372c7ec831461046a57806384b0196e1461047d5780638da5cb5b1461049857806395d89b41146104b857600080fd5b80632b968958116101d857806353bcb951116101a75780636352211e1161018c5780636352211e1461040157806364be947e1461041457806370a082311461044a57600080fd5b806353bcb951146103e557806353d6fd59146103ee57600080fd5b80632b96895814610388578063313ce5671461039057806342842e0e146103c95780634f02c420146103dc57600080fd5b8063095ea7b31161022f57806318d217c31161021457806318d217c31461035757806319c51b591461036c57806323b872dd1461037557600080fd5b8063095ea7b31461030d57806318160ddd1461033057600080fd5b8063027752401461026157806305afb3a41461027d57806306fdde031461029d578063081812fc146102b2575b600080fd5b61026a61164481565b6040519081526020015b60405180910390f35b61026a61028b366004612a10565b60126020526000908152604090205481565b6102a561061c565b6040516102749190612a99565b6102e86102c0366004612aac565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610274565b61032061031b366004612ac5565b6106aa565b6040519015158152602001610274565b61026a7f00000000000000000000000000000000000000000000014542ba12a337c0000081565b61036a610365366004612b1e565b610861565b005b61026a61177081565b61036a610383366004612bed565b6108c2565b61036a610dae565b6103b77f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610274565b61036a6103d7366004612bed565b610e53565b61026a60035481565b61026a600f5481565b61036a6103fc366004612c39565b610f8c565b6102e861040f366004612aac565b611033565b61026a610422366004612a10565b73ffffffffffffffffffffffffffffffffffffffff1660009081526012602052604090205490565b61026a610458366004612a10565b60046020526000908152604090205481565b61036a610478366004612c6c565b611094565b61048561164b565b6040516102749796959493929190612ca7565b6000546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b6102a56116f0565b6103206104ce366004612a10565b600b6020526000908152604090205460ff1681565b61036a6104f1366004612c39565b6116fd565b610320610504366004612ac5565b611794565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526004602052604090205461026a565b61036a610542366004612d66565b6117a8565b6102a5610555366004612aac565b6118cf565b6102a5611956565b61026a610570366004612e01565b600560209081526000928352604080842090915290825290205481565b61036a61059b366004612a10565b611963565b61036a6105ae366004612b1e565b6119fb565b600e546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103206105e1366004612e01565b600760209081526000928352604080842090915290825290205460ff1681565b6102a5611a58565b61036a610617366004612a10565b611a65565b6001805461062990612e2b565b80601f016020809104026020016040519081016040528092919081815260200182805461065590612e2b565b80156106a25780601f10610677576101008083540402835291602001916106a2565b820191906000526020600020905b81548152906001019060200180831161068557829003601f168201915b505050505081565b600060035482111580156106be5750600082115b156107ee5760008281526008602052604090205473ffffffffffffffffffffffffffffffffffffffff16338114801590610729575073ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff16155b15610760576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526006602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610857565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108b2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60106108be8282612ecc565b5050565b6003548111610d075760008181526008602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461092b576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610978576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8416148015906109cf575073ffffffffffffffffffffffffffffffffffffffff8316600090815260076020908152604080832033845290915290205460ff16155b80156109ff575060008181526006602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610a36576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3e611b73565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054909190610a73908490613015565b90915550610a819050611b73565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260046020908152604080832080549096019095558582526008815284822080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690941790556006815284822080549093169092559186168252600990529081208054610b1090600190613015565b81548110610b2057610b20613028565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff87168352600982526040808420868552600a90935290922054815492935083928110610b7157610b71613028565b600091825260208083209091019290925573ffffffffffffffffffffffffffffffffffffffff86168152600990915260409020805480610bb357610bb3613057565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255838252600a81526040808320548484528184205573ffffffffffffffffffffffffffffffffffffffff8616808452600983529083208054600181810183558286529385200186905592529054610c429190613015565b6000838152600a6020526040808220929092559051839173ffffffffffffffffffffffffffffffffffffffff80871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610cf0611b73565b60405190815260200160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d9b57610d698282613015565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083203384529091529020555b610da6848484611ba5565b50505b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dff576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610e5e8383836108c2565b73ffffffffffffffffffffffffffffffffffffffff82163b15801590610f5557506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f309190613086565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b15610da9576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610fdd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008181526008602052604090205473ffffffffffffffffffffffffffffffffffffffff168061108f576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60006110a66040830160208401612a10565b73ffffffffffffffffffffffffffffffffffffffff160361114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43617079626172613a206d696e7465722063616e206e6f74206265207a65726f60448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3361115f6040830160208401612a10565b73ffffffffffffffffffffffffffffffffffffffff16146111dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43617079626172613a20696e76616c6964206d696e74657200000000000000006044820152606401611145565b333b15611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43617079626172613a2063616c6c6572206d75737420626520454f41000000006044820152606401611145565b6112654261125960608401604085016130c8565b65ffffffffffff161090565b156112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43617079626172613a206f75746461746564206d696e740000000000000000006044820152606401611145565b611644600f5410611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43617079626172613a206d696e74206c696d69742072656163686564000000006044820152606401611145565b61134960808201606083016130f0565b1561148d5733600090815260126020526040902054156113c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43617079626172613a20416c7265616479206d696e74656400000000000000006044820152606401611145565b336113d36020830183612a10565b73ffffffffffffffffffffffffffffffffffffffff161461148d57601260006113ff6020840184612a10565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020541561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43617079626172613a20416c7265616479206d696e74656400000000000000006044820152606401611145565b600061149882611dc2565b90506114c581836114a7611e87565b600e5473ffffffffffffffffffffffffffffffffffffffff16611fbf565b61152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43617079626172613a20696e76616c6964207369676e617475726500000000006044820152606401611145565b6000546115799073ffffffffffffffffffffffffffffffffffffffff16336115747f0000000000000000000000000000000000000000000000000000000000000012600a61322b565b611ba5565b50336000908152600960205260409020805461159790600190613015565b815481106115a7576115a7613028565b600091825260208083209091015433808452601283526040909320556115cf90840184612a10565b73ffffffffffffffffffffffffffffffffffffffff161461163257336000908152601260208181526040832054929061160a90860186612a10565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020555b600f80549060006116428361323a565b91905055505050565b60006060808280808361167f7f4361707962617261000000000000000000000000000000000000000000000008600c6120d2565b6116aa7f3100000000000000000000000000000000000000000000000000000000000001600d6120d2565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b6002805461062990612e2b565b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006117a1338484611ba5565b9392505050565b6117b38585856108c2565b73ffffffffffffffffffffffffffffffffffffffff84163b1580159061189857506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063150b7a02906118309033908a90899089908990600401613272565b6020604051808303816000875af115801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190613086565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b15610da6576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000601180546118e090612e2b565b9050111561191a5760116118f38361217d565b604051602001611904929190613382565b6040516020818303038152906040529050919050565b6119238261217d565b6010611944611934612710866133d6565b61193f9060016133ea565b61217d565b604051602001611904939291906133fd565b6011805461062990612e2b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146119b4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a4c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60116108be8282612ecc565b6010805461062990612e2b565b60005473ffffffffffffffffffffffffffffffffffffffff163314611ab6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611b03576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000611ba07f0000000000000000000000000000000000000000000000000000000000000012600a61322b565b905090565b600080611bb0611b73565b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600460205260408082208054948a1683529082205492825293945091929091869190611bf98386613015565b909155505073ffffffffffffffffffffffffffffffffffffffff808716600090815260046020908152604080832080548a019055928a168252600b9052205460ff16611caf5773ffffffffffffffffffffffffffffffffffffffff8716600090815260046020526040812054611c709085906134d6565b611c7a85856134d6565b611c849190613015565b905060005b81811015611cac57611c9a8961223b565b80611ca48161323a565b915050611c89565b50505b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b602052604090205460ff16611d4e576000611ce884836134d6565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260046020526040902054611d199086906134d6565b611d239190613015565b905060005b81811015611d4b57611d39886123f3565b80611d438161323a565b915050611d28565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611dad91815260200190565b60405180910390a35060019695505050505050565b60007f6664f71ab04fd2b50dbc4c3fd43e421c364e1d9a1ac0ffa166017f3aa3c529f6611df26020840184612a10565b611e026040850160208601612a10565b611e1260608601604087016130c8565b611e2260808701606088016130f0565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff9485169086015292909116606084015265ffffffffffff166080830152151560a082015260c001604051602081830303815290604052805190602001209050919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ce5a1d0d9a4d19fc71c3b3426c463907cdfd31716148015611eed57507f000000000000000000000000000000000000000000000000000000000000000146145b15611f1757507f4de47551c5a3cf6b774f210d4e20e3476d216083bed3ed7e7f23dce706298c6790565b611ba0604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f09bbb09152a1ddec402c41e15032be9bd2a3a245233af29d803794ca29653a9d918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101839052604281018590526000908190606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120905060006120838261204960808901896134ea565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061257c92505050565b905073ffffffffffffffffffffffffffffffffffffffff81166120ab576000925050506120ca565b73ffffffffffffffffffffffffffffffffffffffff8481169116149150505b949350505050565b606060ff83146120ec576120e5836125a0565b905061085b565b8180546120f890612e2b565b80601f016020809104026020016040519081016040528092919081815260200182805461212490612e2b565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050905061085b565b6060600061218a836125df565b600101905060008167ffffffffffffffff8111156121aa576121aa612aef565b6040519080825280601f01601f1916602001820160405280156121d4576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846121de57509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116612288576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260096020526040812080546122bb90600190613015565b815481106122cb576122cb613028565b90600052602060002001549050600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061232657612326613057565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255828252600a815260408083208390556008825280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600690925280832080549092169091555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b73ffffffffffffffffffffffffffffffffffffffff8116612440576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001019081905560008181526008602052604090205473ffffffffffffffffffffffffffffffffffffffff16156124a7576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260086020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87169081179091558084526009835290832080546001818101835582865293852001859055925290546125249190613015565b6000828152600a6020526040808220929092559051829173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080600061258b85856126c1565b9150915061259881612706565b509392505050565b606060006125ad836128bc565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612628577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612654576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061267257662386f26fc10000830492506010015b6305f5e100831061268a576305f5e100830492506008015b612710831061269e57612710830492506004015b606483106126b0576064830492506002015b600a831061085b5760010192915050565b60008082516041036126f75760208301516040840151606085015160001a6126eb878285856128fd565b945094505050506126ff565b506000905060025b9250929050565b600081600481111561271a5761271a61354f565b036127225750565b60018160048111156127365761273661354f565b0361279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611145565b60028160048111156127b1576127b161354f565b03612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611145565b600381600481111561282c5761282c61354f565b036128b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611145565b50565b600060ff8216601f81111561085b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561293457506000905060036129e3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612988573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166129dc576000600192509250506129e3565b9150600090505b94509492505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461108f57600080fd5b600060208284031215612a2257600080fd5b6117a1826129ec565b60005b83811015612a46578181015183820152602001612a2e565b50506000910152565b60008151808452612a67816020860160208601612a2b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117a16020830184612a4f565b600060208284031215612abe57600080fd5b5035919050565b60008060408385031215612ad857600080fd5b612ae1836129ec565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612b3057600080fd5b813567ffffffffffffffff80821115612b4857600080fd5b818401915084601f830112612b5c57600080fd5b813581811115612b6e57612b6e612aef565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612bb457612bb4612aef565b81604052828152876020848701011115612bcd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080600060608486031215612c0257600080fd5b612c0b846129ec565b9250612c19602085016129ec565b9150604084013590509250925092565b8035801515811461108f57600080fd5b60008060408385031215612c4c57600080fd5b612c55836129ec565b9150612c6360208401612c29565b90509250929050565b600060208284031215612c7e57600080fd5b813567ffffffffffffffff811115612c9557600080fd5b820160a081850312156117a157600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152612ce360e084018a612a4f565b8381036040850152612cf5818a612a4f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612d5457835183529284019291840191600101612d38565b50909c9b505050505050505050505050565b600080600080600060808688031215612d7e57600080fd5b612d87866129ec565b9450612d95602087016129ec565b935060408601359250606086013567ffffffffffffffff80821115612db957600080fd5b818801915088601f830112612dcd57600080fd5b813581811115612ddc57600080fd5b896020828501011115612dee57600080fd5b9699959850939650602001949392505050565b60008060408385031215612e1457600080fd5b612e1d836129ec565b9150612c63602084016129ec565b600181811c90821680612e3f57607f821691505b602082108103612e78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610da957600081815260208120601f850160051c81016020861015612ea55750805b601f850160051c820191505b81811015612ec457828155600101612eb1565b505050505050565b815167ffffffffffffffff811115612ee657612ee6612aef565b612efa81612ef48454612e2b565b84612e7e565b602080601f831160018114612f4d5760008415612f175750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612ec4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612f9a57888601518255948401946001909101908401612f7b565b5085821015612fd657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561085b5761085b612fe6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006020828403121561309857600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146117a157600080fd5b6000602082840312156130da57600080fd5b813565ffffffffffff811681146117a157600080fd5b60006020828403121561310257600080fd5b6117a182612c29565b600181815b8085111561316457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561314a5761314a612fe6565b8085161561315757918102915b93841c9390800290613110565b509250929050565b60008261317b5750600161085b565b816131885750600061085b565b816001811461319e57600281146131a8576131c4565b600191505061085b565b60ff8411156131b9576131b9612fe6565b50506001821b61085b565b5060208310610133831016604e8410600b84101617156131e7575081810a61085b565b6131f1838361310b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561322357613223612fe6565b029392505050565b60006117a160ff84168361316c565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361326b5761326b612fe6565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b600081546132fe81612e2b565b60018281168015613316576001811461334957613378565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450613378565b8560005260208060002060005b8581101561336f5781548a820152908401908201613356565b50505082870194505b5050505092915050565b600061338e82856132f1565b835161339e818360208801612a2b565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826133e5576133e56133a7565b500690565b8082018082111561085b5761085b612fe6565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081527f7b226e616d65223a202243415059424152412043524557202300000000000000601b8201526000845161345b816034850160208901612a2b565b7f222c22696d616765223a22000000000000000000000000000000000000000000603491840191820152613492603f8201866132f1565b905083516134a4818360208801612a2b565b7f2e706e67227d0000000000000000000000000000000000000000000000000000910190815260060195945050505050565b6000826134e5576134e56133a7565b500490565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261351f57600080fd5b83018035915067ffffffffffffffff82111561353a57600080fd5b6020019150368190038213156126ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220c6d682cf8867468aaf6d299560f7337db3aa92082c66d49f404d24c7191be3fc64736f6c63430008130033
0x610220604052604d6101a08181529062003d396101c0396010906200002590826200042b565b503480156200003357600080fd5b5060405162003d8638038062003d86833981016040819052620000569162000514565b60405180604001604052806008815260200167436170796261726160c01b815250604051806040016040528060018152602001603160f81b8152506040518060400160405280600d81526020016c4341505942415241204352455760981b81525060405180604001604052806008815260200167434150594241524160c01b8152506012611770878060006001600160a01b0316816001600160a01b03160362000113576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016200016a86826200042b565b5060026200017985826200042b565b5060ff831660808190526200019090600a6200065f565b6200019c908362000677565b60a05250620001b49350859250600c915050620002ab565b61016052620001c581600d620002ab565b61018052815160208084019190912061012052815190820120610140524660e052620002556101205161014051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60c0525050306101005260a0516001600160a01b03838116600090815260046020526040902091909155600e80546001600160a01b031916918316919091179055620002a3826001620002e4565b505062000706565b6000602083511015620002cb57620002c3836200033a565b9050620002de565b81620002d884826200042b565b5060ff90505b92915050565b6000546001600160a01b031633146200030f576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b600080829050601f8151111562000371578260405163305a27a960e01b815260040162000368919062000691565b60405180910390fd5b80516200037e82620006e1565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003b157607f821691505b602082108103620003d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042657600081815260208120601f850160051c81016020861015620004015750805b601f850160051c820191505b8181101562000422578281556001016200040d565b5050505b505050565b81516001600160401b0381111562000447576200044762000386565b6200045f816200045884546200039c565b84620003d8565b602080601f8311600181146200049757600084156200047e5750858301515b600019600386901b1c1916600185901b17855562000422565b600085815260208120601f198616915b82811015620004c857888601518255948401946001909101908401620004a7565b5085821015620004e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200050f57600080fd5b919050565b600080604083850312156200052857600080fd5b6200053383620004f7565b91506200054360208401620004f7565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005a35781600019048211156200058757620005876200054c565b808516156200059557918102915b93841c939080029062000567565b509250929050565b600082620005bc57506001620002de565b81620005cb57506000620002de565b8160018114620005e45760028114620005ef576200060f565b6001915050620002de565b60ff8411156200060357620006036200054c565b50506001821b620002de565b5060208310610133831016604e8410600b841016171562000634575081810a620002de565b62000640838362000562565b80600019048211156200065757620006576200054c565b029392505050565b60006200067060ff841683620005ab565b9392505050565b8082028115828204841417620002de57620002de6200054c565b600060208083528351808285015260005b81811015620006c057858101830151858201604001528201620006a2565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003d25760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516135b46200078560003960006116840152600061165901526000611f6e01526000611f4601526000611ea101526000611ecb01526000611ef5015260006103350152600081816103950152818161154e0152611b7a01526135b46000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806372c7ec8311610145578063c87b56dd116100bd578063e0df5b6f1161008c578063e985e9c511610071578063e985e9c5146105d3578063f28ca1dd14610601578063f2fde38b1461060957600080fd5b8063e0df5b6f146105a0578063e8c61831146105b357600080fd5b8063c87b56dd14610547578063d547cfb71461055a578063dd62ed3e14610562578063e0d11a471461058d57600080fd5b80639b19251a11610114578063a9059cbb116100f9578063a9059cbb146104f6578063b65fa14f14610509578063b88d4fde1461053457600080fd5b80639b19251a146104c0578063a22cb465146104e357600080fd5b806372c7ec831461046a57806384b0196e1461047d5780638da5cb5b1461049857806395d89b41146104b857600080fd5b80632b968958116101d857806353bcb951116101a75780636352211e1161018c5780636352211e1461040157806364be947e1461041457806370a082311461044a57600080fd5b806353bcb951146103e557806353d6fd59146103ee57600080fd5b80632b96895814610388578063313ce5671461039057806342842e0e146103c95780634f02c420146103dc57600080fd5b8063095ea7b31161022f57806318d217c31161021457806318d217c31461035757806319c51b591461036c57806323b872dd1461037557600080fd5b8063095ea7b31461030d57806318160ddd1461033057600080fd5b8063027752401461026157806305afb3a41461027d57806306fdde031461029d578063081812fc146102b2575b600080fd5b61026a61164481565b6040519081526020015b60405180910390f35b61026a61028b366004612a10565b60126020526000908152604090205481565b6102a561061c565b6040516102749190612a99565b6102e86102c0366004612aac565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610274565b61032061031b366004612ac5565b6106aa565b6040519015158152602001610274565b61026a7f000000000000000000000000000000000000000000000000000000000000000081565b61036a610365366004612b1e565b610861565b005b61026a61177081565b61036a610383366004612bed565b6108c2565b61036a610dae565b6103b77f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610274565b61036a6103d7366004612bed565b610e53565b61026a60035481565b61026a600f5481565b61036a6103fc366004612c39565b610f8c565b6102e861040f366004612aac565b611033565b61026a610422366004612a10565b73ffffffffffffffffffffffffffffffffffffffff1660009081526012602052604090205490565b61026a610458366004612a10565b60046020526000908152604090205481565b61036a610478366004612c6c565b611094565b61048561164b565b6040516102749796959493929190612ca7565b6000546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b6102a56116f0565b6103206104ce366004612a10565b600b6020526000908152604090205460ff1681565b61036a6104f1366004612c39565b6116fd565b610320610504366004612ac5565b611794565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526004602052604090205461026a565b61036a610542366004612d66565b6117a8565b6102a5610555366004612aac565b6118cf565b6102a5611956565b61026a610570366004612e01565b600560209081526000928352604080842090915290825290205481565b61036a61059b366004612a10565b611963565b61036a6105ae366004612b1e565b6119fb565b600e546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103206105e1366004612e01565b600760209081526000928352604080842090915290825290205460ff1681565b6102a5611a58565b61036a610617366004612a10565b611a65565b6001805461062990612e2b565b80601f016020809104026020016040519081016040528092919081815260200182805461065590612e2b565b80156106a25780601f10610677576101008083540402835291602001916106a2565b820191906000526020600020905b81548152906001019060200180831161068557829003601f168201915b505050505081565b600060035482111580156106be5750600082115b156107ee5760008281526008602052604090205473ffffffffffffffffffffffffffffffffffffffff16338114801590610729575073ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff16155b15610760576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526006602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610857565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108b2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60106108be8282612ecc565b5050565b6003548111610d075760008181526008602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461092b576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610978576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8416148015906109cf575073ffffffffffffffffffffffffffffffffffffffff8316600090815260076020908152604080832033845290915290205460ff16155b80156109ff575060008181526006602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610a36576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3e611b73565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054909190610a73908490613015565b90915550610a819050611b73565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260046020908152604080832080549096019095558582526008815284822080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690941790556006815284822080549093169092559186168252600990529081208054610b1090600190613015565b81548110610b2057610b20613028565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff87168352600982526040808420868552600a90935290922054815492935083928110610b7157610b71613028565b600091825260208083209091019290925573ffffffffffffffffffffffffffffffffffffffff86168152600990915260409020805480610bb357610bb3613057565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255838252600a81526040808320548484528184205573ffffffffffffffffffffffffffffffffffffffff8616808452600983529083208054600181810183558286529385200186905592529054610c429190613015565b6000838152600a6020526040808220929092559051839173ffffffffffffffffffffffffffffffffffffffff80871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610cf0611b73565b60405190815260200160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d9b57610d698282613015565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083203384529091529020555b610da6848484611ba5565b50505b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dff576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610e5e8383836108c2565b73ffffffffffffffffffffffffffffffffffffffff82163b15801590610f5557506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f309190613086565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b15610da9576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610fdd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008181526008602052604090205473ffffffffffffffffffffffffffffffffffffffff168061108f576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60006110a66040830160208401612a10565b73ffffffffffffffffffffffffffffffffffffffff160361114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43617079626172613a206d696e7465722063616e206e6f74206265207a65726f60448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3361115f6040830160208401612a10565b73ffffffffffffffffffffffffffffffffffffffff16146111dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43617079626172613a20696e76616c6964206d696e74657200000000000000006044820152606401611145565b333b15611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43617079626172613a2063616c6c6572206d75737420626520454f41000000006044820152606401611145565b6112654261125960608401604085016130c8565b65ffffffffffff161090565b156112cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43617079626172613a206f75746461746564206d696e740000000000000000006044820152606401611145565b611644600f5410611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43617079626172613a206d696e74206c696d69742072656163686564000000006044820152606401611145565b61134960808201606083016130f0565b1561148d5733600090815260126020526040902054156113c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43617079626172613a20416c7265616479206d696e74656400000000000000006044820152606401611145565b336113d36020830183612a10565b73ffffffffffffffffffffffffffffffffffffffff161461148d57601260006113ff6020840184612a10565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020541561148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43617079626172613a20416c7265616479206d696e74656400000000000000006044820152606401611145565b600061149882611dc2565b90506114c581836114a7611e87565b600e5473ffffffffffffffffffffffffffffffffffffffff16611fbf565b61152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43617079626172613a20696e76616c6964207369676e617475726500000000006044820152606401611145565b6000546115799073ffffffffffffffffffffffffffffffffffffffff16336115747f0000000000000000000000000000000000000000000000000000000000000000600a61322b565b611ba5565b50336000908152600960205260409020805461159790600190613015565b815481106115a7576115a7613028565b600091825260208083209091015433808452601283526040909320556115cf90840184612a10565b73ffffffffffffffffffffffffffffffffffffffff161461163257336000908152601260208181526040832054929061160a90860186612a10565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020555b600f80549060006116428361323a565b91905055505050565b60006060808280808361167f7f0000000000000000000000000000000000000000000000000000000000000000600c6120d2565b6116aa7f0000000000000000000000000000000000000000000000000000000000000000600d6120d2565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b6002805461062990612e2b565b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006117a1338484611ba5565b9392505050565b6117b38585856108c2565b73ffffffffffffffffffffffffffffffffffffffff84163b1580159061189857506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063150b7a02906118309033908a90899089908990600401613272565b6020604051808303816000875af115801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190613086565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b15610da6576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606000601180546118e090612e2b565b9050111561191a5760116118f38361217d565b604051602001611904929190613382565b6040516020818303038152906040529050919050565b6119238261217d565b6010611944611934612710866133d6565b61193f9060016133ea565b61217d565b604051602001611904939291906133fd565b6011805461062990612e2b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146119b4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a4c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60116108be8282612ecc565b6010805461062990612e2b565b60005473ffffffffffffffffffffffffffffffffffffffff163314611ab6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611b03576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000611ba07f0000000000000000000000000000000000000000000000000000000000000000600a61322b565b905090565b600080611bb0611b73565b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600460205260408082208054948a1683529082205492825293945091929091869190611bf98386613015565b909155505073ffffffffffffffffffffffffffffffffffffffff808716600090815260046020908152604080832080548a019055928a168252600b9052205460ff16611caf5773ffffffffffffffffffffffffffffffffffffffff8716600090815260046020526040812054611c709085906134d6565b611c7a85856134d6565b611c849190613015565b905060005b81811015611cac57611c9a8961223b565b80611ca48161323a565b915050611c89565b50505b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b602052604090205460ff16611d4e576000611ce884836134d6565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260046020526040902054611d199086906134d6565b611d239190613015565b905060005b81811015611d4b57611d39886123f3565b80611d438161323a565b915050611d28565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611dad91815260200190565b60405180910390a35060019695505050505050565b60007f6664f71ab04fd2b50dbc4c3fd43e421c364e1d9a1ac0ffa166017f3aa3c529f6611df26020840184612a10565b611e026040850160208601612a10565b611e1260608601604087016130c8565b611e2260808701606088016130f0565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff9485169086015292909116606084015265ffffffffffff166080830152151560a082015260c001604051602081830303815290604052805190602001209050919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015611eed57507f000000000000000000000000000000000000000000000000000000000000000046145b15611f1757507f000000000000000000000000000000000000000000000000000000000000000090565b611ba0604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101839052604281018590526000908190606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120905060006120838261204960808901896134ea565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061257c92505050565b905073ffffffffffffffffffffffffffffffffffffffff81166120ab576000925050506120ca565b73ffffffffffffffffffffffffffffffffffffffff8481169116149150505b949350505050565b606060ff83146120ec576120e5836125a0565b905061085b565b8180546120f890612e2b565b80601f016020809104026020016040519081016040528092919081815260200182805461212490612e2b565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050905061085b565b6060600061218a836125df565b600101905060008167ffffffffffffffff8111156121aa576121aa612aef565b6040519080825280601f01601f1916602001820160405280156121d4576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846121de57509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116612288576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260096020526040812080546122bb90600190613015565b815481106122cb576122cb613028565b90600052602060002001549050600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061232657612326613057565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255828252600a815260408083208390556008825280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600690925280832080549092169091555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b73ffffffffffffffffffffffffffffffffffffffff8116612440576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001019081905560008181526008602052604090205473ffffffffffffffffffffffffffffffffffffffff16156124a7576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260086020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87169081179091558084526009835290832080546001818101835582865293852001859055925290546125249190613015565b6000828152600a6020526040808220929092559051829173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080600061258b85856126c1565b9150915061259881612706565b509392505050565b606060006125ad836128bc565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612628577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612654576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061267257662386f26fc10000830492506010015b6305f5e100831061268a576305f5e100830492506008015b612710831061269e57612710830492506004015b606483106126b0576064830492506002015b600a831061085b5760010192915050565b60008082516041036126f75760208301516040840151606085015160001a6126eb878285856128fd565b945094505050506126ff565b506000905060025b9250929050565b600081600481111561271a5761271a61354f565b036127225750565b60018160048111156127365761273661354f565b0361279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611145565b60028160048111156127b1576127b161354f565b03612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611145565b600381600481111561282c5761282c61354f565b036128b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611145565b50565b600060ff8216601f81111561085b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561293457506000905060036129e3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612988573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166129dc576000600192509250506129e3565b9150600090505b94509492505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461108f57600080fd5b600060208284031215612a2257600080fd5b6117a1826129ec565b60005b83811015612a46578181015183820152602001612a2e565b50506000910152565b60008151808452612a67816020860160208601612a2b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006117a16020830184612a4f565b600060208284031215612abe57600080fd5b5035919050565b60008060408385031215612ad857600080fd5b612ae1836129ec565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612b3057600080fd5b813567ffffffffffffffff80821115612b4857600080fd5b818401915084601f830112612b5c57600080fd5b813581811115612b6e57612b6e612aef565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612bb457612bb4612aef565b81604052828152876020848701011115612bcd57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080600060608486031215612c0257600080fd5b612c0b846129ec565b9250612c19602085016129ec565b9150604084013590509250925092565b8035801515811461108f57600080fd5b60008060408385031215612c4c57600080fd5b612c55836129ec565b9150612c6360208401612c29565b90509250929050565b600060208284031215612c7e57600080fd5b813567ffffffffffffffff811115612c9557600080fd5b820160a081850312156117a157600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152612ce360e084018a612a4f565b8381036040850152612cf5818a612a4f565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612d5457835183529284019291840191600101612d38565b50909c9b505050505050505050505050565b600080600080600060808688031215612d7e57600080fd5b612d87866129ec565b9450612d95602087016129ec565b935060408601359250606086013567ffffffffffffffff80821115612db957600080fd5b818801915088601f830112612dcd57600080fd5b813581811115612ddc57600080fd5b896020828501011115612dee57600080fd5b9699959850939650602001949392505050565b60008060408385031215612e1457600080fd5b612e1d836129ec565b9150612c63602084016129ec565b600181811c90821680612e3f57607f821691505b602082108103612e78577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610da957600081815260208120601f850160051c81016020861015612ea55750805b601f850160051c820191505b81811015612ec457828155600101612eb1565b505050505050565b815167ffffffffffffffff811115612ee657612ee6612aef565b612efa81612ef48454612e2b565b84612e7e565b602080601f831160018114612f4d5760008415612f175750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612ec4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612f9a57888601518255948401946001909101908401612f7b565b5085821015612fd657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561085b5761085b612fe6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006020828403121561309857600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146117a157600080fd5b6000602082840312156130da57600080fd5b813565ffffffffffff811681146117a157600080fd5b60006020828403121561310257600080fd5b6117a182612c29565b600181815b8085111561316457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561314a5761314a612fe6565b8085161561315757918102915b93841c9390800290613110565b509250929050565b60008261317b5750600161085b565b816131885750600061085b565b816001811461319e57600281146131a8576131c4565b600191505061085b565b60ff8411156131b9576131b9612fe6565b50506001821b61085b565b5060208310610133831016604e8410600b84101617156131e7575081810a61085b565b6131f1838361310b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561322357613223612fe6565b029392505050565b60006117a160ff84168361316c565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361326b5761326b612fe6565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b600081546132fe81612e2b565b60018281168015613316576001811461334957613378565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450613378565b8560005260208060002060005b8581101561336f5781548a820152908401908201613356565b50505082870194505b5050505092915050565b600061338e82856132f1565b835161339e818360208801612a2b565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826133e5576133e56133a7565b500690565b8082018082111561085b5761085b612fe6565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081527f7b226e616d65223a202243415059424152412043524557202300000000000000601b8201526000845161345b816034850160208901612a2b565b7f222c22696d616765223a22000000000000000000000000000000000000000000603491840191820152613492603f8201866132f1565b905083516134a4818360208801612a2b565b7f2e706e67227d0000000000000000000000000000000000000000000000000000910190815260060195945050505050565b6000826134e5576134e56133a7565b500490565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261351f57600080fd5b83018035915067ffffffffffffffff82111561353a57600080fd5b6020019150368190038213156126ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220c6d682cf8867468aaf6d299560f7337db3aa92082c66d49f404d24c7191be3fc64736f6c6343000813003368747470733a2f2f697066732e7061727469636c652e6e6574776f726b2f516d4e7973586b584470436137684670416731747a3372504246786d6e59324170576762507a386b64556e6674352f000000000000000000000000351aba1c45254dec71f7681decd283b9b1c1a5f0000000000000000000000000afe7ef08a99d0dec704d404d874021e666269d47