0x608060405234801561001057600080fd5b50611ca7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063775c300c11610076578063ebfad63c1161005b578063ebfad63c146101cf578063f873e6dd146101e2578063f9b7e521146101f557600080fd5b8063775c300c146101ac578063c5c03699146101b457600080fd5b80632706072b116100a75780632706072b1461015b57806338044b991461017c5780636ea683601461019157600080fd5b80630c4f65bd146100c35780631626ba7e146100f5575b600080fd5b6100cb610210565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012a61010336600461122f565b7f1626ba7e0000000000000000000000000000000000000000000000000000000092915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100ec565b61016e61016936600461129b565b610390565b6040516100ec929190611310565b61018f61018a366004611388565b61057c565b005b6100cb73a8280e16647767782fa313ddac9837ba217fe15b81565b6100cb6105ed565b6100cb7357e037f4d2c8bea011ad8a9a5af4aaeed508650f81565b61018f6101dd3660046113dd565b61061d565b61018f6101f0366004611412565b61067f565b6100cb73d93f8720a0f754b817e43b29f004b97bfeb7580281565b6040805160048152602480820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f775c300c00000000000000000000000000000000000000000000000000000000179052915160009283917febfad63c000000000000000000000000000000000000000000000000000000009161029c918591016114ca565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051909150600090309061032e9084906114dd565b6000604051808303816000865af19150503d806000811461036b576040519150601f19603f3d011682016040523d82523d6000602084013e610370565b606091505b509150508080602001905181019061038891906114f9565b935050505090565b600060608273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906114f9565b6040517f0206b4400000000000000000000000000000000000000000000000000000000081526001600482015290925060009073ffffffffffffffffffffffffffffffffffffffff851690630206b44090602401600060405180830381865afa158015610474573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104ba9190810190611516565b9050805167ffffffffffffffff8111156104d6576104d66110fa565b6040519080825280602002602001820160405280156104ff578160200160208202803683370190505b50915060005b81518110156105755781818151811061052057610520611613565b60200260200101516000015183828151811061053e5761053e611613565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101528061056d81611642565b915050610505565b5050915091565b8273ffffffffffffffffffffffffffffffffffffffff1682826040516105a39291906116a2565b6000604051808303816000865af19150503d80600081146105e0576040519150601f19603f3d011682016040523d82523d6000602084013e6105e5565b606091505b505050505050565b60006040516105fb906110ed565b604051809103906000f080158015610617573d6000803e3d6000fd5b50905090565b604051309061062d9083906114dd565b6000604051808303816000865af19150503d806000811461066a576040519150601f19603f3d011682016040523d82523d6000602084013e61066f565b606091505b5050506040513d806000833e8082fd5b6000610689610210565b905060006106978484610eee565b90506000806106a583610390565b6040805173ffffffffffffffffffffffffffffffffffffffff8781166024808401919091526000604480850182905285518086038201815260649095018652602080860180517fba324ac6000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff918216179091528751958e168686015287518087038601815295909201875284810180517ecbe56300000000000000000000000000000000000000000000000000000000908416179052865160048152808501885290810180519092167f775c300c0000000000000000000000000000000000000000000000000000000017909152945196985094965091949093927f2e9feb7900000000000000000000000000000000000000000000000000000000926107ec923092869290918391016116b2565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152918152602080830180517fffffffff00000000000000000000000000000000000000000000000000000000959095167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9586161790528151306024808301919091526000604480840182905285518085038201815260649094018652838501805189167fba324ac600000000000000000000000000000000000000000000000000000000179052855173d93f8720a0f754b817e43b29f004b97bfeb75802818501528651808203909401845201855281840180519097167fa526d83b00000000000000000000000000000000000000000000000000000000179096528351600280825260608201865295975091959094909391929091908301908036833701905050905073d93f8720a0f754b817e43b29f004b97bfeb7580273ffffffffffffffffffffffffffffffffffffffff8b161015610a1e57898160008151811061097d5761097d611613565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073d93f8720a0f754b817e43b29f004b97bfeb75802816001815181106109df576109df611613565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610acf565b73d93f8720a0f754b817e43b29f004b97bfeb7580281600081518110610a4657610a46611613565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508981600181518110610a9457610a94611613565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b60408051600280825260608201909252600091816020015b6060815260200190600190039081610ae75750506040805160018082528183019092529192506020820181803683370190505081600081518110610b2d57610b2d611613565b6020908102919091010152604080516001808252818301909252906020820181803683370190505081600181518110610b6857610b68611613565b60200260200101819052506000637be5fdc360e01b60405180608001604052808581526020018481526020016402540be3ff81526020018d73ffffffffffffffffffffffffffffffffffffffff1681525073a8280e16647767782fa313ddac9837ba217fe15b604051602401610bdf929190611816565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935280516080810182528681529283018590526402540be3ff8382015273ffffffffffffffffffffffffffffffffffffffff8e166060840152519092506000917f01a44c250000000000000000000000000000000000000000000000000000000091610ccc91908d9060240161184e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935280516007808252610100820190925291935060009282015b6060815260200190600190039081610d635790505090508981600081518110610d8e57610d8e611613565b60200260200101819052508881600181518110610dad57610dad611613565b60200260200101819052508781600281518110610dcc57610dcc611613565b60200260200101819052508681600381518110610deb57610deb611613565b60200260200101819052508581600481518110610e0a57610e0a611613565b60200260200101819052508281600581518110610e2957610e29611613565b60200260200101819052508181600681518110610e4857610e48611613565b6020026020010181905250610e5d8d82610f8e565b6040517ecbe56300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d811660048301528e169062cbe56390602401600060405180830381600087803b158015610ec457600080fd5b505af1158015610ed8573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b6000807357e037f4d2c8bea011ad8a9a5af4aaeed508650f73ffffffffffffffffffffffffffffffffffffffff168484604051610f2c9291906116a2565b6000604051808303816000865af19150503d8060008114610f69576040519150601f19603f3d011682016040523d82523d6000602084013e610f6e565b606091505b5091505080806020019051810190610f8691906114f9565b949350505050565b600063e4c3d6b260e01b82604051602401610fa9919061187c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905073ffffffffffffffffffffffffffffffffffffffff83166309779927846064600080620927c08180808a60016040519080825280601f01601f19166020018201604052801561107e576020820181803683370190505b506040518b63ffffffff1660e01b81526004016110a49a9998979695949392919061188f565b6020604051808303816000875af11580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190611918565b50505050565b6103378061193b83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561114c5761114c6110fa565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611199576111996110fa565b604052919050565b600082601f8301126111b257600080fd5b813567ffffffffffffffff8111156111cc576111cc6110fa565b6111fd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611152565b81815284602083860101111561121257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561124257600080fd5b82359150602083013567ffffffffffffffff81111561126057600080fd5b61126c858286016111a1565b9150509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461129857600080fd5b50565b6000602082840312156112ad57600080fd5b81356112b881611276565b9392505050565b600081518084526020808501945080840160005b8381101561130557815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016112d3565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000610f8660408301846112bf565b60008083601f84011261135157600080fd5b50813567ffffffffffffffff81111561136957600080fd5b60208301915083602082850101111561138157600080fd5b9250929050565b60008060006040848603121561139d57600080fd5b83356113a881611276565b9250602084013567ffffffffffffffff8111156113c457600080fd5b6113d08682870161133f565b9497909650939450505050565b6000602082840312156113ef57600080fd5b813567ffffffffffffffff81111561140657600080fd5b610f86848285016111a1565b6000806020838503121561142557600080fd5b823567ffffffffffffffff81111561143c57600080fd5b6114488582860161133f565b90969095509350505050565b60005b8381101561146f578181015183820152602001611457565b838111156110e75750506000910152565b60008151808452611498816020860160208601611454565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112b86020830184611480565b600082516114ef818460208701611454565b9190910192915050565b60006020828403121561150b57600080fd5b81516112b881611276565b6000602080838503121561152957600080fd5b825167ffffffffffffffff8082111561154157600080fd5b818501915085601f83011261155557600080fd5b815181811115611567576115676110fa565b611575848260051b01611152565b8181526060918202840185019185820191908984111561159457600080fd5b948601945b838610156116065780868b0312156115b15760008081fd5b6115b9611129565b86516115c481611276565b81528688015160ff811681146115da5760008081fd5b8189015260408781015187811681146115f35760008081fd5b9082015283529485019491860191611599565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561169b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b8183823760009101908152919050565b73ffffffffffffffffffffffffffffffffffffffff8516815260ff841660208201526080604082015260006116ea6080830185611480565b9050821515606083015295945050505050565b600082825180855260208086019550808260051b84010181860160005b84811015611766577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952611754838351611480565b9884019892509083019060010161171a565b5090979650505050505050565b8051608080845281519084018190526000916020919082019060a0860190845b818110156117c557835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611793565b5050828501519150858103838701526117de81836116fd565b925050506040830151604085015273ffffffffffffffffffffffffffffffffffffffff60608401511660608501528091505092915050565b6040815260006118296040830185611773565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b6040815260006118616040830185611773565b828103602084015261187381856112bf565b95945050505050565b6020815260006112b860208301846116fd565b600061014073ffffffffffffffffffffffffffffffffffffffff808e1684528c6020850152808c1660408501528a60608501528960808501528860a085015280881660c08501525085151560e0840152806101008401526118f281840186611480565b90508281036101208401526119078185611480565b9d9c50505050505050505050505050565b60006020828403121561192a57600080fd5b815180151581146112b857600080fdfe608060405234801561001057600080fd5b50610317806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631626ba7e1461003b57806338044b99146100a5575b600080fd5b61007061004936600461015a565b7f1626ba7e0000000000000000000000000000000000000000000000000000000092915050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b6100b86100b3366004610233565b6100ba565b005b8273ffffffffffffffffffffffffffffffffffffffff1682826040516100e19291906102d1565b6000604051808303816000865af19150503d806000811461011e576040519150601f19603f3d011682016040523d82523d6000602084013e610123565b606091505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561016d57600080fd5b82359150602083013567ffffffffffffffff8082111561018c57600080fd5b818501915085601f8301126101a057600080fd5b8135818111156101b2576101b261012b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156101f8576101f861012b565b8160405282815288602084870101111561021157600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060006040848603121561024857600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461026c57600080fd5b9250602084013567ffffffffffffffff8082111561028957600080fd5b818601915086601f83011261029d57600080fd5b8135818111156102ac57600080fd5b8760208285010111156102be57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea2646970667358221220c97129fa75a2d84726da95432df96dfd3c503ae05c114bba5278aa403aa8a85c64736f6c634300080b0033a26469706673582212206e09d6b01dcc7bc0fd74ecaefbc2b3d77a7a6b6ffbbc6a5f610c747a5e3b8b8264736f6c634300080b0033