0x60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d2565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000175565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620000ec5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e39190620001b5565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200015d602783620000ee565b91506200016a82620000ff565b604082019050919050565b6000602082019050818103600083015262000190816200014e565b9050919050565b600060ff82169050919050565b620001af8162000197565b82525050565b6000602082019050620001cc6000830184620001a4565b92915050565b61556480620001e26000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a61161012557806395d89b41116100ad578063c3cda5201161007c578063c3cda52014610620578063d505accf1461063c578063dd62ed3e14610658578063f1127ed814610688578063f2fde38b146106b857610211565b806395d89b41146105725780639ab24eb014610590578063a457c2d7146105c0578063a9059cbb146105f057610211565b80638456cb59116100f45780638456cb59146104d857806384b0196e146104e25780638da5cb5b146105065780638e539e8c1461052457806391ddadf41461055457610211565b8063715018a61461047857806379cc6790146104825780637ecebe001461049e5780638129fc1c146104ce57610211565b80633f4ba83a116101a8578063587cde1e11610177578063587cde1e146103ae5780635c19a95c146103de5780635c975abb146103fa5780636fcfff451461041857806370a082311461044857610211565b80633f4ba83a1461034e57806340c10f191461035857806342966c68146103745780634bf5d7e91461039057610211565b8063313ce567116101e4578063313ce567146102b25780633644e515146102d057806339509351146102ee5780633a46b1a81461031e57610211565b806306fdde0314610216578063095ea7b31461023457806318160ddd1461026457806323b872dd14610282575b600080fd5b61021e6106d4565b60405161022b91906136f4565b60405180910390f35b61024e600480360381019061024991906137af565b610766565b60405161025b919061380a565b60405180910390f35b61026c610789565b6040516102799190613834565b60405180910390f35b61029c6004803603810190610297919061384f565b610793565b6040516102a9919061380a565b60405180910390f35b6102ba6107c2565b6040516102c791906138be565b60405180910390f35b6102d86107cb565b6040516102e591906138f2565b60405180910390f35b610308600480360381019061030391906137af565b6107da565b604051610315919061380a565b60405180910390f35b610338600480360381019061033391906137af565b610811565b6040516103459190613834565b60405180910390f35b6103566108b5565b005b610372600480360381019061036d91906137af565b6108c7565b005b61038e6004803603810190610389919061390d565b6108dd565b005b6103986108f1565b6040516103a591906136f4565b60405180910390f35b6103c860048036038101906103c3919061393a565b61097f565b6040516103d59190613976565b60405180910390f35b6103f860048036038101906103f3919061393a565b6109e9565b005b6104026109fd565b60405161040f919061380a565b60405180910390f35b610432600480360381019061042d919061393a565b610a14565b60405161043f91906139b0565b60405180910390f35b610462600480360381019061045d919061393a565b610a69565b60405161046f9190613834565b60405180910390f35b610480610ab2565b005b61049c600480360381019061049791906137af565b610ac6565b005b6104b860048036038101906104b3919061393a565b610ae6565b6040516104c59190613834565b60405180910390f35b6104d6610b37565b005b6104e0610d69565b005b6104ea610d7b565b6040516104fd9796959493929190613ac4565b60405180910390f35b61050e610e7c565b60405161051b9190613976565b60405180910390f35b61053e6004803603810190610539919061390d565b610ea6565b60405161054b9190613834565b60405180910390f35b61055c610f0c565b6040516105699190613b69565b60405180910390f35b61057a610f1c565b60405161058791906136f4565b60405180910390f35b6105aa60048036038101906105a5919061393a565b610fae565b6040516105b79190613834565b60405180910390f35b6105da60048036038101906105d591906137af565b6110b8565b6040516105e7919061380a565b60405180910390f35b61060a600480360381019061060591906137af565b61112f565b604051610617919061380a565b60405180910390f35b61063a60048036038101906106359190613bdc565b611152565b005b61065660048036038101906106519190613c69565b611256565b005b610672600480360381019061066d9190613d0b565b611398565b60405161067f9190613834565b60405180910390f35b6106a2600480360381019061069d9190613d77565b61141f565b6040516106af9190613e2c565b60405180910390f35b6106d260048036038101906106cd919061393a565b611530565b005b6060603680546106e390613e76565b80601f016020809104026020016040519081016040528092919081815260200182805461070f90613e76565b801561075c5780601f106107315761010080835404028352916020019161075c565b820191906000526020600020905b81548152906001019060200180831161073f57829003601f168201915b5050505050905090565b6000806107716115b3565b905061077e8185856115bb565b600191505092915050565b6000603554905090565b60008061079e6115b3565b90506107ab858285611784565b6107b6858585611810565b60019150509392505050565b60006012905090565b60006107d5611a89565b905090565b6000806107e56115b3565b90506108068185856107f78589611398565b6108019190613ed6565b6115bb565b600191505092915050565b600061081b610f0c565b65ffffffffffff168210610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90613f56565b60405180910390fd5b6108ad61016360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083611a98565b905092915050565b6108bd611be0565b6108c5611c5e565b565b6108cf611be0565b6108d98282611cc1565b5050565b6108ee6108e86115b3565b82611ccf565b50565b6060436108fc610f0c565b65ffffffffffff1614610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90613fc2565b60405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b600061016260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109fa6109f46115b3565b82611cdd565b50565b6000609760009054906101000a900460ff16905090565b6000610a6261016360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611df8565b9050919050565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aba611be0565b610ac46000611e4b565b565b610ad882610ad26115b3565b83611784565b610ae28282611ccf565b5050565b6000610b3061012f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f11565b9050919050565b60008060019054906101000a900460ff16159050808015610b685750600160008054906101000a900460ff1660ff16105b80610b955750610b7730611f1f565b158015610b945750600160008054906101000a900460ff1660ff16145b5b610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90614054565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c11576001600060016101000a81548160ff0219169083151502179055505b610c856040518060400160405280600781526020017f4162737472616b000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41534b0000000000000000000000000000000000000000000000000000000000815250611f42565b610c8d611f9f565b610c95611ff0565b610c9d612049565b610cdb6040518060400160405280600781526020017f4162737472616b000000000000000000000000000000000000000000000000008152506120a2565b610ce3612133565b610d0d33610cef6107c2565b600a610cfb91906141a7565b612710610d0891906141f2565b611cc1565b8015610d665760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d5d9190614279565b60405180910390a15b50565b610d71611be0565b610d79612184565b565b6000606080600080600060606000801b60fb54148015610d9f57506000801b60fc54145b610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd5906142e0565b60405180910390fd5b610de66121e7565b610dee612279565b46306000801b600067ffffffffffffffff811115610e0f57610e0e614300565b5b604051908082528060200260200182016040528015610e3d5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610eb0610f0c565b65ffffffffffff168210610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090613f56565b60405180910390fd5b610f0561016483611a98565b9050919050565b6000610f174361230b565b905090565b606060378054610f2b90613e76565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5790613e76565b8015610fa45780601f10610f7957610100808354040283529160200191610fa4565b820191906000526020600020905b815481529060010190602001808311610f8757829003601f168201915b5050505050905090565b60008061016360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000811461108f5761016360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018203815481106110545761105361432f565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611092565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b6000806110c36115b3565b905060006110d18286611398565b905083811015611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d906143d0565b60405180910390fd5b61112382868684036115bb565b60019250505092915050565b60008061113a6115b3565b9050611147818585611810565b600191505092915050565b83421115611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c9061443c565b60405180910390fd5b60006111f76111ef7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016111d4949392919061445c565b60405160208183030381529060405280519060200120612360565b85858561237a565b9050611202816123a5565b8614611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a906144ed565b60405180910390fd5b61124d8188611cdd565b50505050505050565b83421115611299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129090614559565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112c88c6123a5565b896040516020016112de96959493929190614579565b604051602081830303815290604052805190602001209050600061130182612360565b905060006113118287878761237a565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890614626565b60405180910390fd5b61138c8a8a8a6115bb565b50505050505050505050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611427613626565b61016360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff168154811061147f5761147e61432f565b5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b611538611be0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e906146b8565b60405180910390fd5b6115b081611e4b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361162a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116219061474a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906147dc565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117779190613834565b60405180910390a3505050565b60006117908484611398565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461180a57818110156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614848565b60405180910390fd5b61180984848484036115bb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361187f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611876906148da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e59061496c565b60405180910390fd5b6118f9838383612404565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611977906149fe565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a709190613834565b60405180910390a3611a8384848461241c565b50505050565b6000611a9361242c565b905090565b600080838054905090506000808290506005831115611b0e576000611abc84612490565b84611ac79190614a1e565b905085611ad48883612589565b60000160009054906101000a900463ffffffff1663ffffffff161115611afc57809150611b0c565b600181611b099190613ed6565b92505b505b5b80821015611b6e576000611b23838361259e565b905085611b308883612589565b60000160009054906101000a900463ffffffff1663ffffffff161115611b5857809150611b68565b600181611b659190613ed6565b92505b50611b0f565b60008114611bb457611b838660018303612589565b60000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611bb7565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935050505092915050565b611be86115b3565b73ffffffffffffffffffffffffffffffffffffffff16611c06610e7c565b73ffffffffffffffffffffffffffffffffffffffff1614611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5390614a9e565b60405180910390fd5b565b611c666125c4565b6000609760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611caa6115b3565b604051611cb79190613976565b60405180910390a1565b611ccb828261260d565b5050565b611cd9828261269b565b5050565b6000611ce88361097f565b90506000611cf584610a69565b90508261016260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611df28284836126ba565b50505050565b600063ffffffff8016821115611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90614b30565b60405180910390fd5b819050919050565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614bc2565b60405180910390fd5b611f9b82826128b5565b5050565b600060019054906101000a900460ff16611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590614bc2565b60405180910390fd5b565b600060019054906101000a900460ff1661203f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203690614bc2565b60405180910390fd5b612047612928565b565b600060019054906101000a900460ff16612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90614bc2565b60405180910390fd5b6120a0612994565b565b600060019054906101000a900460ff166120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890614bc2565b60405180910390fd5b612130816040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506129f5565b50565b600060019054906101000a900460ff16612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990614bc2565b60405180910390fd5b565b61218c612a7c565b6001609760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121d06115b3565b6040516121dd9190613976565b60405180910390a1565b606060fd80546121f690613e76565b80601f016020809104026020016040519081016040528092919081815260200182805461222290613e76565b801561226f5780601f106122445761010080835404028352916020019161226f565b820191906000526020600020905b81548152906001019060200180831161225257829003601f168201915b5050505050905090565b606060fe805461228890613e76565b80601f01602080910402602001604051908101604052809291908181526020018280546122b490613e76565b80156123015780601f106122d657610100808354040283529160200191612301565b820191906000526020600020905b8154815290600101906020018083116122e457829003601f168201915b5050505050905090565b600065ffffffffffff8016821115612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f90614c54565b60405180910390fd5b819050919050565b600061237361236d611a89565b83612ac6565b9050919050565b600080600061238b87878787612b07565b9150915061239881612be9565b8192505050949350505050565b60008061012f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506123f381611f11565b91506123fe81612d4f565b50919050565b61240c612a7c565b612417838383612d65565b505050565b612427838383612d6a565b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612457612d95565b61245f612e00565b4630604051602001612475959493929190614c74565b60405160208183030381529060405280519060200120905090565b60008082036124a25760009050612584565b600060016124af84612e6b565b901c6001901b905060018184816124c9576124c8614cc7565b5b048201901c905060018184816124e2576124e1614cc7565b5b048201901c905060018184816124fb576124fa614cc7565b5b048201901c9050600181848161251457612513614cc7565b5b048201901c9050600181848161252d5761252c614cc7565b5b048201901c9050600181848161254657612545614cc7565b5b048201901c9050600181848161255f5761255e614cc7565b5b048201901c90506125808182858161257a57612579614cc7565b5b04612f4c565b9150505b919050565b60008260005281602060002001905092915050565b600060028284186125af9190614cf6565b8284166125bc9190613ed6565b905092915050565b6125cc6109fd565b61260b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260290614d73565b60405180910390fd5b565b6126178282612f65565b61261f6130bc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612645610789565b1115612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90614e05565b60405180910390fd5b6126956101646130e0836130f6565b50505050565b6126a582826133d1565b6126b46101646135a0836130f6565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126f65750600081115b156128b057600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127d55760008061277e61016360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206135a0856130f6565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516127ca929190614e25565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128af5760008061285861016360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206130e0856130f6565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516128a4929190614e25565b60405180910390a250505b5b505050565b600060019054906101000a900460ff16612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90614bc2565b60405180910390fd5b81603690816129139190614ff0565b5080603790816129239190614ff0565b505050565b600060019054906101000a900460ff16612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296e90614bc2565b60405180910390fd5b6000609760006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff166129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90614bc2565b60405180910390fd5b6129f36129ee6115b3565b611e4b565b565b600060019054906101000a900460ff16612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90614bc2565b60405180910390fd5b8160fd9081612a539190614ff0565b508060fe9081612a639190614ff0565b506000801b60fb819055506000801b60fc819055505050565b612a846109fd565b15612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abb9061510e565b60405180910390fd5b565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612b42576000600391509150612be0565b600060018787878760405160008152602001604052604051612b67949392919061512e565b6020604051602081039080840390855afa158015612b89573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bd757600060019250925050612be0565b80600092509250505b94509492505050565b60006004811115612bfd57612bfc615173565b5b816004811115612c1057612c0f615173565b5b0315612d4c5760016004811115612c2a57612c29615173565b5b816004811115612c3d57612c3c615173565b5b03612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c74906151ee565b60405180910390fd5b60026004811115612c9157612c90615173565b5b816004811115612ca457612ca3615173565b5b03612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb9061525a565b60405180910390fd5b60036004811115612cf857612cf7615173565b5b816004811115612d0b57612d0a615173565b5b03612d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d42906152ec565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b505050565b612d758383836135b6565b612d90612d818461097f565b612d8a8461097f565b836126ba565b505050565b600080612da06121e7565b9050600081511115612dbc578080519060200120915050612dfd565b600060fb5490506000801b8114612dd7578092505050612dfd565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470925050505b90565b600080612e0b612279565b9050600081511115612e27578080519060200120915050612e68565b600060fc5490506000801b8114612e42578092505050612e68565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470925050505b90565b600080600090506000608084901c1115612e8d57608083901c92506080810190505b6000604084901c1115612ea857604083901c92506040810190505b6000602084901c1115612ec357602083901c92506020810190505b6000601084901c1115612ede57601083901c92506010810190505b6000600884901c1115612ef957600883901c92506008810190505b6000600484901c1115612f1457600483901c92506004810190505b6000600284901c1115612f2f57600283901c92506002810190505b6000600184901c1115612f43576001810190505b80915050919050565b6000818310612f5b5781612f5d565b825b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcb90615358565b60405180910390fd5b612fe060008383612404565b8060356000828254612ff29190613ed6565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130a49190613834565b60405180910390a36130b86000838361241c565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b600081836130ee9190613ed6565b905092915050565b60008060008580549050905060008082146131bc576131188760018403612589565b6040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815250506131f8565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152505b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935061322d84868863ffffffff16565b92506000821180156132575750613242610f0c565b65ffffffffffff16816000015163ffffffff16145b156132c857613265836135bb565b6132728860018503612589565b60000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506133c7565b8660405180604001604052806132ec6132df610f0c565b65ffffffffffff16611df8565b63ffffffff168152602001613300866135bb565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b5050935093915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613440576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613437906153ea565b60405180910390fd5b61344c82600083612404565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ca9061547c565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135879190613834565b60405180910390a361359b8360008461241c565b505050565b600081836135ae9190614a1e565b905092915050565b505050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561361e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136159061550e565b60405180910390fd5b819050919050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561369e578082015181840152602081019050613683565b60008484015250505050565b6000601f19601f8301169050919050565b60006136c682613664565b6136d0818561366f565b93506136e0818560208601613680565b6136e9816136aa565b840191505092915050565b6000602082019050818103600083015261370e81846136bb565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137468261371b565b9050919050565b6137568161373b565b811461376157600080fd5b50565b6000813590506137738161374d565b92915050565b6000819050919050565b61378c81613779565b811461379757600080fd5b50565b6000813590506137a981613783565b92915050565b600080604083850312156137c6576137c5613716565b5b60006137d485828601613764565b92505060206137e58582860161379a565b9150509250929050565b60008115159050919050565b613804816137ef565b82525050565b600060208201905061381f60008301846137fb565b92915050565b61382e81613779565b82525050565b60006020820190506138496000830184613825565b92915050565b60008060006060848603121561386857613867613716565b5b600061387686828701613764565b935050602061388786828701613764565b92505060406138988682870161379a565b9150509250925092565b600060ff82169050919050565b6138b8816138a2565b82525050565b60006020820190506138d360008301846138af565b92915050565b6000819050919050565b6138ec816138d9565b82525050565b600060208201905061390760008301846138e3565b92915050565b60006020828403121561392357613922613716565b5b60006139318482850161379a565b91505092915050565b6000602082840312156139505761394f613716565b5b600061395e84828501613764565b91505092915050565b6139708161373b565b82525050565b600060208201905061398b6000830184613967565b92915050565b600063ffffffff82169050919050565b6139aa81613991565b82525050565b60006020820190506139c560008301846139a1565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b613a00816139cb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a3b81613779565b82525050565b6000613a4d8383613a32565b60208301905092915050565b6000602082019050919050565b6000613a7182613a06565b613a7b8185613a11565b9350613a8683613a22565b8060005b83811015613ab7578151613a9e8882613a41565b9750613aa983613a59565b925050600181019050613a8a565b5085935050505092915050565b600060e082019050613ad9600083018a6139f7565b8181036020830152613aeb81896136bb565b90508181036040830152613aff81886136bb565b9050613b0e6060830187613825565b613b1b6080830186613967565b613b2860a08301856138e3565b81810360c0830152613b3a8184613a66565b905098975050505050505050565b600065ffffffffffff82169050919050565b613b6381613b48565b82525050565b6000602082019050613b7e6000830184613b5a565b92915050565b613b8d816138a2565b8114613b9857600080fd5b50565b600081359050613baa81613b84565b92915050565b613bb9816138d9565b8114613bc457600080fd5b50565b600081359050613bd681613bb0565b92915050565b60008060008060008060c08789031215613bf957613bf8613716565b5b6000613c0789828a01613764565b9650506020613c1889828a0161379a565b9550506040613c2989828a0161379a565b9450506060613c3a89828a01613b9b565b9350506080613c4b89828a01613bc7565b92505060a0613c5c89828a01613bc7565b9150509295509295509295565b600080600080600080600060e0888a031215613c8857613c87613716565b5b6000613c968a828b01613764565b9750506020613ca78a828b01613764565b9650506040613cb88a828b0161379a565b9550506060613cc98a828b0161379a565b9450506080613cda8a828b01613b9b565b93505060a0613ceb8a828b01613bc7565b92505060c0613cfc8a828b01613bc7565b91505092959891949750929550565b60008060408385031215613d2257613d21613716565b5b6000613d3085828601613764565b9250506020613d4185828601613764565b9150509250929050565b613d5481613991565b8114613d5f57600080fd5b50565b600081359050613d7181613d4b565b92915050565b60008060408385031215613d8e57613d8d613716565b5b6000613d9c85828601613764565b9250506020613dad85828601613d62565b9150509250929050565b613dc081613991565b82525050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b613df781613dc6565b82525050565b604082016000820151613e136000850182613db7565b506020820151613e266020850182613dee565b50505050565b6000604082019050613e416000830184613dfd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e8e57607f821691505b602082108103613ea157613ea0613e47565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee182613779565b9150613eec83613779565b9250828201905080821115613f0457613f03613ea7565b5b92915050565b7f4552433230566f7465733a20667574757265206c6f6f6b757000000000000000600082015250565b6000613f4060198361366f565b9150613f4b82613f0a565b602082019050919050565b60006020820190508181036000830152613f6f81613f33565b9050919050565b7f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f6465000000600082015250565b6000613fac601d8361366f565b9150613fb782613f76565b602082019050919050565b60006020820190508181036000830152613fdb81613f9f565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061403e602e8361366f565b915061404982613fe2565b604082019050919050565b6000602082019050818103600083015261406d81614031565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156140cb578086048111156140a7576140a6613ea7565b5b60018516156140b65780820291505b80810290506140c485614074565b945061408b565b94509492505050565b6000826140e457600190506141a0565b816140f257600090506141a0565b8160018114614108576002811461411257614141565b60019150506141a0565b60ff84111561412457614123613ea7565b5b8360020a91508482111561413b5761413a613ea7565b5b506141a0565b5060208310610133831016604e8410600b84101617156141765782820a90508381111561417157614170613ea7565b5b6141a0565b6141838484846001614081565b9250905081840481111561419a57614199613ea7565b5b81810290505b9392505050565b60006141b282613779565b91506141bd836138a2565b92506141ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846140d4565b905092915050565b60006141fd82613779565b915061420883613779565b925082820261421681613779565b9150828204841483151761422d5761422c613ea7565b5b5092915050565b6000819050919050565b6000819050919050565b600061426361425e61425984614234565b61423e565b6138a2565b9050919050565b61427381614248565b82525050565b600060208201905061428e600083018461426a565b92915050565b7f4549503731323a20556e696e697469616c697a65640000000000000000000000600082015250565b60006142ca60158361366f565b91506142d582614294565b602082019050919050565b600060208201905081810360008301526142f9816142bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143ba60258361366f565b91506143c58261435e565b604082019050919050565b600060208201905081810360008301526143e9816143ad565b9050919050565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b6000614426601d8361366f565b9150614431826143f0565b602082019050919050565b6000602082019050818103600083015261445581614419565b9050919050565b600060808201905061447160008301876138e3565b61447e6020830186613967565b61448b6040830185613825565b6144986060830184613825565b95945050505050565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b60006144d760198361366f565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b6000614543601d8361366f565b915061454e8261450d565b602082019050919050565b6000602082019050818103600083015261457281614536565b9050919050565b600060c08201905061458e60008301896138e3565b61459b6020830188613967565b6145a86040830187613967565b6145b56060830186613825565b6145c26080830185613825565b6145cf60a0830184613825565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b6000614610601e8361366f565b915061461b826145da565b602082019050919050565b6000602082019050818103600083015261463f81614603565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146a260268361366f565b91506146ad82614646565b604082019050919050565b600060208201905081810360008301526146d181614695565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061473460248361366f565b915061473f826146d8565b604082019050919050565b6000602082019050818103600083015261476381614727565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147c660228361366f565b91506147d18261476a565b604082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614832601d8361366f565b915061483d826147fc565b602082019050919050565b6000602082019050818103600083015261486181614825565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148c460258361366f565b91506148cf82614868565b604082019050919050565b600060208201905081810360008301526148f3816148b7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061495660238361366f565b9150614961826148fa565b604082019050919050565b6000602082019050818103600083015261498581614949565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006149e860268361366f565b91506149f38261498c565b604082019050919050565b60006020820190508181036000830152614a17816149db565b9050919050565b6000614a2982613779565b9150614a3483613779565b9250828203905081811115614a4c57614a4b613ea7565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a8860208361366f565b9150614a9382614a52565b602082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b6000614b1a60268361366f565b9150614b2582614abe565b604082019050919050565b60006020820190508181036000830152614b4981614b0d565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000614bac602b8361366f565b9150614bb782614b50565b604082019050919050565b60006020820190508181036000830152614bdb81614b9f565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203460008201527f3820626974730000000000000000000000000000000000000000000000000000602082015250565b6000614c3e60268361366f565b9150614c4982614be2565b604082019050919050565b60006020820190508181036000830152614c6d81614c31565b9050919050565b600060a082019050614c8960008301886138e3565b614c9660208301876138e3565b614ca360408301866138e3565b614cb06060830185613825565b614cbd6080830184613967565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d0182613779565b9150614d0c83613779565b925082614d1c57614d1b614cc7565b5b828204905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614d5d60148361366f565b9150614d6882614d27565b602082019050919050565b60006020820190508181036000830152614d8c81614d50565b9050919050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b6000614def60308361366f565b9150614dfa82614d93565b604082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b6000604082019050614e3a6000830185613825565b614e476020830184613825565b9392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614eb07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614e73565b614eba8683614e73565b95508019841693508086168417925050509392505050565b6000614eed614ee8614ee384613779565b61423e565b613779565b9050919050565b6000819050919050565b614f0783614ed2565b614f1b614f1382614ef4565b848454614e80565b825550505050565b600090565b614f30614f23565b614f3b818484614efe565b505050565b5b81811015614f5f57614f54600082614f28565b600181019050614f41565b5050565b601f821115614fa457614f7581614e4e565b614f7e84614e63565b81016020851015614f8d578190505b614fa1614f9985614e63565b830182614f40565b50505b505050565b600082821c905092915050565b6000614fc760001984600802614fa9565b1980831691505092915050565b6000614fe08383614fb6565b9150826002028217905092915050565b614ff982613664565b67ffffffffffffffff81111561501257615011614300565b5b61501c8254613e76565b615027828285614f63565b600060209050601f83116001811461505a5760008415615048578287015190505b6150528582614fd4565b8655506150ba565b601f19841661506886614e4e565b60005b828110156150905784890151825560018201915060208501945060208101905061506b565b868310156150ad57848901516150a9601f891682614fb6565b8355505b6001600288020188555050505b505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006150f860108361366f565b9150615103826150c2565b602082019050919050565b60006020820190508181036000830152615127816150eb565b9050919050565b600060808201905061514360008301876138e3565b61515060208301866138af565b61515d60408301856138e3565b61516a60608301846138e3565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006151d860188361366f565b91506151e3826151a2565b602082019050919050565b60006020820190508181036000830152615207816151cb565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000615244601f8361366f565b915061524f8261520e565b602082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006152d660228361366f565b91506152e18261527a565b604082019050919050565b60006020820190508181036000830152615305816152c9565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000615342601f8361366f565b915061534d8261530c565b602082019050919050565b6000602082019050818103600083015261537181615335565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006153d460218361366f565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061546660228361366f565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b60006154f860278361366f565b91506155038261549c565b604082019050919050565b60006020820190508181036000830152615527816154eb565b905091905056fea264697066735822122086089c68bf5ad0ba1a509ca7d300c20c91fcf3f596b2fbe32201b8b39e8bcc9264736f6c63430008120033