diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 581915ec..87042a0b 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -15,14 +15,14 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - go: ["1.20.x", "1.21.x"] + go: ["1.22.x", "1.23.x"] steps: - name: Check out code into the Go module directory - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Go ${{ matrix.go }} - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ matrix.go }} id: go diff --git a/.gitignore b/.gitignore index 971ffc61..8017b54f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,9 @@ build/ dist/ __pycache__/ .vscode/ +*.pem +*.crt +*.csr +*.exe .idea/ +__debug* \ No newline at end of file diff --git a/Makefile b/Makefile index ba98c752..40343dda 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # go test -count=1 disables the test cache so that all tests are run every time. -all: test integration examples +all: test integration selfintegration examples test: go test -count=1 -race ./... @@ -9,22 +9,26 @@ lint: staticcheck ./... integration: - go test -count=1 -race -v -tags=integration ./uatest/... + go test -count=1 -race -v -tags=integration ./tests/python... + +selfintegration: + go test -count=1 -race -v -tags=integration ./tests/go... examples: go build -o build/ ./examples/... test-race: go test -count=1 -race ./... - go test -count=1 -race -v -tags=integration ./uatest/... + go test -count=1 -race -v -tags=integration ./tests/python... + go test -count=1 -race -v -tags=integration ./tests/go... install-py-opcua: pip3 install opcua gen: - go install golang.org/x/tools/cmd/stringer@latest + which stringer || go install golang.org/x/tools/cmd/stringer@latest + find . -name '*_gen.go' -delete go generate ./... - go mod tidy release: GITHUB_TOKEN=$$(security find-generic-password -gs GITHUB_TOKEN -w) goreleaser --clean diff --git a/README.md b/README.md index 26d26878..32567ca0 100644 --- a/README.md +++ b/README.md @@ -169,7 +169,7 @@ We would be happy if you can add your equipment to the list. Just open a PR :) | OMRON NX102-9020 |v0.3.x | production | [IOTech Systems](https://www.iotechsys.com/) | | InfluxDB Telegraf plugin | v0.3.x | ? | Community | -## Supported Features +## Supported Client Features The current focus is on the OPC UA Binary protocol over TCP. No other protocols are supported at this point. @@ -191,51 +191,78 @@ The current focus is on the OPC UA Binary protocol over TCP. No other protocols | | User Name Password | Yes | | | | X509 Certificate | Yes | | +## Supported Server Features + +The current focus is on the OPC UA Binary protocol over TCP. No other protocols are supported at this point. + +| Categories | Features | Supported | Notes | +|----------------|----------------------------------|-----------|-------------| +| Encoding | OPC UA Binary | Yes | | +| | OPC UA JSON | | not planned | +| | OPC UA XML | | not planned | +| Transport | UA-TCP UA-SC UA Binary | Yes | | +| | OPC UA HTTPS | | not planned | +| | SOAP-HTTP WS-SC UA Binary | | not planned | +| | SOAP-HTTP WS-SC UA XML | | not planned | +| | SOAP-HTTP WS-SC UA XML-UA Binary | | not planned | +| Encryption | None | Yes | | +| | Basic128Rsa15 | Untested | | +| | Basic256 | Untested | | +| | Basic256Sha256 | Untested | | +| Authentication | Anonymous | Yes | | +| | User Name Password | Untested | | +| | X509 Certificate | Untested | | + + ### Services Here is the current set of supported services. For low-level access use the client `Send` function directly. -| Service Set | Service | Client | Notes | -|-----------------------------|-------------------------------|--------|--------------| -| Discovery Service Set | FindServers | Yes | | -| | FindServersOnNetwork | Yes | | -| | GetEndpoints | Yes | | -| | RegisterServer | | | -| | RegisterServer2 | | | -| Secure Channel Service Set | OpenSecureChannel | Yes | | -| | CloseSecureChannel | Yes | | -| Session Service Set | CreateSession | Yes | | -| | CloseSession | Yes | | -| | ActivateSession | Yes | | -| | Cancel | | | -| Node Management Service Set | AddNodes | | | -| | AddReferences | | | -| | DeleteNodes | | | -| | DeleteReferences | | | -| View Service Set | Browse | Yes | | -| | BrowseNext | Yes | | -| | TranslateBrowsePathsToNodeIds | | | -| | RegisterNodes | Yes | | -| | UnregisterNodes | Yes | | -| Query Service Set | QueryFirst | | | -| | QueryNext | | | -| Attribute Service Set | Read | Yes | | -| | Write | Yes | | -| | HistoryRead | Yes | | -| | HistoryUpdate | | | -| Method Service Set | Call | Yes | | -| MonitoredItems Service Set | CreateMonitoredItems | Yes | | -| | DeleteMonitoredItems | Yes | | -| | ModifyMonitoredItems | Yes | | -| | SetMonitoringMode | Yes | | -| | SetTriggering | | | -| Subscription Service Set | CreateSubscription | Yes | | -| | ModifySubscription | | | -| | SetPublishingMode | | | -| | Publish | Yes | | -| | Republish | | | -| | DeleteSubscriptions | Yes | | -| | TransferSubscriptions | | | + +| Service Set | Service | Client | Server | Notes | +|-----------------------------|-------------------------------|--------|--------|--------------| +| Discovery Service Set | FindServers | Yes | | | +| | FindServersOnNetwork | Yes | | | +| | GetEndpoints | Yes | | | +| | RegisterServer | | | | +| | RegisterServer2 | | | | +| Secure Channel Service Set | OpenSecureChannel | Yes | Yes* | | +| | CloseSecureChannel | Yes | Yes* | | +| Session Service Set | CreateSession | Yes | Yes | | +| | CloseSession | Yes | Yes | | +| | ActivateSession | Yes | Yes | | +| | Cancel | | | | +| Node Management Service Set | AddNodes | | | | +| | AddReferences | | | | +| | DeleteNodes | | | | +| | DeleteReferences | | | | +| View Service Set | Browse | Yes | Yes | | +| | BrowseNext | Yes | | | +| | TranslateBrowsePathsToNodeIds | | | | +| | RegisterNodes | Yes | | | +| | UnregisterNodes | Yes | | | +| Query Service Set | QueryFirst | | | | +| | QueryNext | | | | +| Attribute Service Set | Read | Yes | Yes | | +| | Write | Yes | Yes | | +| | HistoryRead | Yes | | | +| | HistoryUpdate | | | | +| Method Service Set | Call | Yes | | | +| MonitoredItems Service Set | CreateMonitoredItems | Yes | Yes | | +| | DeleteMonitoredItems | Yes | Yes | | +| | ModifyMonitoredItems | Yes | Yes | | +| | SetMonitoringMode | Yes | Yes | | +| | SetTriggering | | | | +| Subscription Service Set | CreateSubscription | Yes | Yes | | +| | ModifySubscription | | | | +| | SetPublishingMode | | | | +| | Publish | Yes | Yes | | +| | Republish | | | | +| | DeleteSubscriptions | Yes | Yes | | +| | TransferSubscriptions | | | | + +* not all encryption schemes are fully functional at this time + ## Authors diff --git a/client.go b/client.go index f3a5329f..0ebbaedf 100644 --- a/client.go +++ b/client.go @@ -763,7 +763,7 @@ func (c *Client) CreateSession(ctx context.Context, cfg *uasc.SessionConfig) (*S var s *Session // for the CreateSessionRequest the authToken is always nil. // use c.SecureChannel().SendRequest() to enforce this. - err := c.SecureChannel().SendRequest(ctx, req, nil, func(v interface{}) error { + err := c.SecureChannel().SendRequest(ctx, req, nil, func(v ua.Response) error { var res *ua.CreateSessionResponse if err := safeAssign(v, &res); err != nil { return err @@ -876,7 +876,7 @@ func (c *Client) ActivateSession(ctx context.Context, s *Session) error { UserIdentityToken: ua.NewExtensionObject(s.cfg.UserIdentityToken), UserTokenSignature: s.cfg.UserTokenSignature, } - return c.SecureChannel().SendRequest(ctx, req, s.resp.AuthenticationToken, func(v interface{}) error { + return c.SecureChannel().SendRequest(ctx, req, s.resp.AuthenticationToken, func(v ua.Response) error { var res *ua.ActivateSessionResponse if err := safeAssign(v, &res); err != nil { return err @@ -918,7 +918,7 @@ func (c *Client) closeSession(ctx context.Context, s *Session) error { } req := &ua.CloseSessionRequest{DeleteSubscriptions: true} var res *ua.CloseSessionResponse - return c.Send(ctx, req, func(v interface{}) error { + return c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) } @@ -936,7 +936,7 @@ func (c *Client) DetachSession(ctx context.Context) (*Session, error) { // Send sends the request via the secure channel and registers a handler for // the response. If the client has an active session it injects the // authentication token. -func (c *Client) Send(ctx context.Context, req ua.Request, h func(interface{}) error) error { +func (c *Client) Send(ctx context.Context, req ua.Request, h func(ua.Response) error) error { stats.Client().Add("Send", 1) err := c.sendWithTimeout(ctx, req, c.cfg.sechan.RequestTimeout, h) @@ -948,7 +948,7 @@ func (c *Client) Send(ctx context.Context, req ua.Request, h func(interface{}) e // sendWithTimeout sends the request via the secure channel with a custom timeout and registers a handler for // the response. If the client has an active session it injects the // authentication token. -func (c *Client) sendWithTimeout(ctx context.Context, req ua.Request, timeout time.Duration, h func(interface{}) error) error { +func (c *Client) sendWithTimeout(ctx context.Context, req ua.Request, timeout time.Duration, h uasc.ResponseHandler) error { sc := c.SecureChannel() if sc == nil { return ua.StatusBadServerNotConnected @@ -981,7 +981,7 @@ func (c *Client) FindServers(ctx context.Context) (*ua.FindServersResponse, erro EndpointURL: c.endpointURL, } var res *ua.FindServersResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -993,7 +993,7 @@ func (c *Client) FindServersOnNetwork(ctx context.Context) (*ua.FindServersOnNet req := &ua.FindServersOnNetworkRequest{} var res *ua.FindServersOnNetworkResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1007,7 +1007,7 @@ func (c *Client) GetEndpoints(ctx context.Context) (*ua.GetEndpointsResponse, er EndpointURL: c.endpointURL, } var res *ua.GetEndpointsResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1046,7 +1046,7 @@ func (c *Client) Read(ctx context.Context, req *ua.ReadRequest) (*ua.ReadRespons req = cloneReadRequest(req) var res *ua.ReadResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { err := safeAssign(v, &res) if err != nil { return err @@ -1077,7 +1077,7 @@ func (c *Client) Write(ctx context.Context, req *ua.WriteRequest) (*ua.WriteResp stats.Client().Add("NodesToWrite", int64(len(req.NodesToWrite))) var res *ua.WriteResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1117,7 +1117,7 @@ func (c *Client) Browse(ctx context.Context, req *ua.BrowseRequest) (*ua.BrowseR req = cloneBrowseRequest(req) var res *ua.BrowseResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1131,7 +1131,7 @@ func (c *Client) Call(ctx context.Context, req *ua.CallMethodRequest) (*ua.CallM MethodsToCall: []*ua.CallMethodRequest{req}, } var res *ua.CallResponse - err := c.Send(ctx, creq, func(v interface{}) error { + err := c.Send(ctx, creq, func(v ua.Response) error { return safeAssign(v, &res) }) if err != nil { @@ -1148,7 +1148,7 @@ func (c *Client) BrowseNext(ctx context.Context, req *ua.BrowseNextRequest) (*ua stats.Client().Add("BrowseNext", 1) var res *ua.BrowseNextResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1162,7 +1162,7 @@ func (c *Client) RegisterNodes(ctx context.Context, req *ua.RegisterNodesRequest stats.Client().Add("NodesToRegister", int64(len(req.NodesToRegister))) var res *ua.RegisterNodesResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1176,7 +1176,7 @@ func (c *Client) UnregisterNodes(ctx context.Context, req *ua.UnregisterNodesReq stats.Client().Add("NodesToUnregister", int64(len(req.NodesToUnregister))) var res *ua.UnregisterNodesResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1199,7 +1199,7 @@ func (c *Client) HistoryReadEvent(ctx context.Context, nodes []*ua.HistoryReadVa } var res *ua.HistoryReadResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1222,7 +1222,7 @@ func (c *Client) HistoryReadRawModified(ctx context.Context, nodes []*ua.History } var res *ua.HistoryReadResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1245,7 +1245,7 @@ func (c *Client) HistoryReadProcessed(ctx context.Context, nodes []*ua.HistoryRe } var res *ua.HistoryReadResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -1268,7 +1268,7 @@ func (c *Client) HistoryReadAtTime(ctx context.Context, nodes []*ua.HistoryReadV } var res *ua.HistoryReadResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err diff --git a/client_sub.go b/client_sub.go index 80b387dc..f9d885c9 100644 --- a/client_sub.go +++ b/client_sub.go @@ -35,7 +35,7 @@ func (c *Client) Subscribe(ctx context.Context, params *SubscriptionParameters, } var res *ua.CreateSubscriptionResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) if err != nil { @@ -110,7 +110,7 @@ func (c *Client) transferSubscriptions(ctx context.Context, ids []uint32) (*ua.T } var res *ua.TransferSubscriptionsResponse - err := c.Send(ctx, req, func(v interface{}) error { + err := c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -178,7 +178,7 @@ func (c *Client) sendRepublishRequests(ctx context.Context, sub *Subscription, a debug.Printf("RepublishRequest: req=%s", debug.ToJSON(req)) var res *ua.RepublishResponse - err := c.SecureChannel().SendRequest(ctx, req, c.Session().resp.AuthenticationToken, func(v interface{}) error { + err := c.SecureChannel().SendRequest(ctx, req, c.Session().resp.AuthenticationToken, func(v ua.Response) error { return safeAssign(v, &res) }) debug.Printf("RepublishResponse: res=%s err=%v", debug.ToJSON(res), err) @@ -549,7 +549,7 @@ func (c *Client) sendPublishRequest(ctx context.Context) (*ua.PublishResponse, e dlog.Printf("PublishRequest: %s", debug.ToJSON(req)) var res *ua.PublishResponse - err := c.sendWithTimeout(ctx, req, c.publishTimeout(), func(v interface{}) error { + err := c.sendWithTimeout(ctx, req, c.publishTimeout(), func(v ua.Response) error { return safeAssign(v, &res) }) stats.RecordError(err) diff --git a/client_test.go b/client_test.go index b64ad50c..0c44e588 100644 --- a/client_test.go +++ b/client_test.go @@ -15,7 +15,7 @@ func TestClient_Send_DoesNotPanicWhenDisconnected(t *testing.T) { if err != nil { t.Fatal(err) } - err = c.Send(context.Background(), &ua.ReadRequest{}, func(i interface{}) error { + err = c.Send(context.Background(), &ua.ReadRequest{}, func(i ua.Response) error { return nil }) verify.Values(t, "", err, ua.StatusBadServerNotConnected) diff --git a/debug/debug.go b/debug/debug.go index 113bef01..68c501f7 100644 --- a/debug/debug.go +++ b/debug/debug.go @@ -11,6 +11,7 @@ import ( "io" "log" "os" + "runtime" "strings" "golang.org/x/exp/slices" @@ -41,7 +42,26 @@ func Printf(format string, args ...interface{}) { if !Enable { return } - Logger.Printf(format, args...) + + _, file, line, ok := runtime.Caller(1) + if !ok { + file = "???" + line = 0 + } + + short := file + for i := len(file) - 1; i > 0; i-- { + if file[i] == '/' { + short = file[i+1:] + break + } + } + file = short + + prefix := fmt.Sprintf(" %v:%v ", file, line) + Logger.Printf(prefix+format, args...) + + //Logger.Printf(format, args...) } // ToJSON returns the JSON representation of v when debug logging @@ -57,7 +77,7 @@ func ToJSON(v interface{}) string { return string(b) } -// FlagSet returns true if the OPCUA_DEBUG environment variable contains the +// FlagSet returns true if the OPC_DEBUG environment variable contains the // given flag. func FlagSet(name string) bool { return slices.Contains(strings.Fields(Flags), name) diff --git a/examples/crypto/crypto.go b/examples/crypto/crypto.go index d766fc90..b9e09f68 100644 --- a/examples/crypto/crypto.go +++ b/examples/crypto/crypto.go @@ -22,8 +22,8 @@ import ( "github.com/gopcua/opcua" "github.com/gopcua/opcua/debug" "github.com/gopcua/opcua/errors" + uatest "github.com/gopcua/opcua/tests/python" "github.com/gopcua/opcua/ua" - "github.com/gopcua/opcua/uatest" ) var ( diff --git a/examples/server/NodeSet2_server/Opc.Ua.Di.NodeSet2.xml b/examples/server/NodeSet2_server/Opc.Ua.Di.NodeSet2.xml new file mode 100644 index 00000000..f0ef0258 --- /dev/null +++ b/examples/server/NodeSet2_server/Opc.Ua.Di.NodeSet2.xml @@ -0,0 +1,5719 @@ + + + + + + http://opcfoundation.org/UA/DI/ + + + + + + + + i=1 + i=2 + i=3 + i=4 + i=5 + i=6 + i=7 + i=8 + i=9 + i=10 + i=11 + i=13 + i=12 + i=15 + i=14 + i=16 + i=17 + i=18 + i=20 + i=21 + i=19 + i=22 + i=26 + i=27 + i=28 + i=47 + i=46 + i=35 + i=36 + i=48 + i=45 + i=40 + i=37 + i=38 + i=39 + i=53 + i=52 + i=51 + i=54 + i=9004 + i=9005 + i=17597 + i=9006 + i=15112 + i=17604 + i=17603 + + + http://opcfoundation.org/UA/DI/ + https://reference.opcfoundation.org/DI/v104/docs/12.1 + + ns=1;i=15002 + ns=1;i=15003 + ns=1;i=15004 + ns=1;i=15005 + ns=1;i=15006 + ns=1;i=15007 + ns=1;i=15008 + ns=1;i=15031 + ns=1;i=15032 + ns=1;i=15033 + i=11715 + i=11616 + + + + NamespaceUri + + i=68 + ns=1;i=15001 + + + http://opcfoundation.org/UA/DI/ + + + + NamespaceVersion + + i=68 + ns=1;i=15001 + + + 1.04.0 + + + + NamespacePublicationDate + + i=68 + ns=1;i=15001 + + + 2022-11-03T00:00:00Z + + + + IsNamespaceSubset + + i=68 + ns=1;i=15001 + + + false + + + + StaticNodeIdTypes + + i=68 + ns=1;i=15001 + + + + 0 + + + + + StaticNumericNodeIdRange + + i=68 + ns=1;i=15001 + + + + 1:2147483647 + + + + + StaticStringNodeIdPattern + + i=68 + ns=1;i=15001 + + + + + + + DefaultRolePermissions + + i=68 + ns=1;i=15001 + + + + DefaultUserRolePermissions + + i=68 + ns=1;i=15001 + + + + DefaultAccessRestrictions + + i=68 + ns=1;i=15001 + + + + ConnectsTo + Used to indicate that source and target Node have a topological connection. + DI ConnectsTo + https://reference.opcfoundation.org/DI/v104/docs/5.5 + + i=33 + + + + ConnectsToParent + Defines the parent (i.e. the communication Device) of a Network. + DI ConnectsTo + https://reference.opcfoundation.org/DI/v104/docs/5.5 + + ns=1;i=6030 + + + + IsOnline + Used to bind the offline representation of a Device to the online representation. + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.3.2 + + i=44 + + OnlineOf + + + DeviceSet + Contains all instances of devices + DI DeviceSet + https://reference.opcfoundation.org/DI/v104/docs/4.9 + + i=85 + i=58 + + + + DeviceFeatures + DI DeviceSet + https://reference.opcfoundation.org/DI/v104/docs/4.10 + + ns=1;i=5001 + i=58 + + + + NetworkSet + Contains all instances of communication networks + DI NetworkSet + https://reference.opcfoundation.org/DI/v104/docs/5.6 + + i=85 + i=58 + + + + DeviceTopology + Starting point of the configured device topology. + DI DeviceTopology + https://reference.opcfoundation.org/DI/v104/docs/6.2 + + ns=1;i=6095 + i=85 + i=58 + + + + OnlineAccess + Hint of whether the Server is currently able to communicate to Devices in the topology. + + i=68 + ns=1;i=6094 + + + + TopologyElementType + Defines the basic information components for all configurable elements in a device topology + DI Information Model + https://reference.opcfoundation.org/DI/v104/docs/4.3 + + ns=1;i=5002 + ns=1;i=5003 + ns=1;i=6567 + ns=1;i=6014 + ns=1;i=6161 + i=58 + + + + ParameterSet + Flat list of Parameters + + ns=1;i=6017 + i=58 + i=80 + ns=1;i=1001 + + + + <ParameterIdentifier> + A parameter which belongs to the topology element. + + i=63 + i=11510 + ns=1;i=5002 + + + + MethodSet + Flat list of Methods + + i=58 + i=80 + ns=1;i=1001 + + + + <GroupIdentifier> + An application specific functional group used to organize parameters and methods. + + ns=1;i=1005 + i=11508 + ns=1;i=1001 + + + + Identification + Used to organize parameters for identification of this TopologyElement + + ns=1;i=1005 + i=80 + ns=1;i=1001 + + + + Lock + Used to lock the topology element. + + ns=1;i=6468 + ns=1;i=6163 + ns=1;i=6164 + ns=1;i=6165 + ns=1;i=6166 + ns=1;i=6169 + ns=1;i=6171 + ns=1;i=6173 + ns=1;i=6388 + i=80 + ns=1;i=1001 + + + + Locked + + i=68 + i=78 + ns=1;i=6161 + + + + LockingClient + + i=68 + i=78 + ns=1;i=6161 + + + + LockingUser + + i=68 + i=78 + ns=1;i=6161 + + + + RemainingLockTime + + i=68 + i=78 + ns=1;i=6161 + + + + InitLock + DI Locking + + ns=1;i=6167 + ns=1;i=6168 + i=78 + ns=1;i=6161 + + + + InputArguments + + i=68 + i=78 + ns=1;i=6166 + + + + + + i=297 + + + + Context + + i=12 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6166 + + + + + + i=297 + + + + InitLockStatus + + i=6 + + -1 + + + + + + + + + + RenewLock + DI Locking + + ns=1;i=6170 + i=78 + ns=1;i=6161 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6169 + + + + + + i=297 + + + + RenewLockStatus + + i=6 + + -1 + + + + + + + + + + ExitLock + DI Locking + + ns=1;i=6172 + i=78 + ns=1;i=6161 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6171 + + + + + + i=297 + + + + ExitLockStatus + + i=6 + + -1 + + + + + + + + + + BreakLock + DI Locking + + ns=1;i=6174 + i=78 + ns=1;i=6161 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6173 + + + + + + i=297 + + + + BreakLockStatus + + i=6 + + -1 + + + + + + + + + + IVendorNameplateType + DI Nameplate + https://reference.opcfoundation.org/DI/v104/docs/4.5.2 + + ns=1;i=15036 + ns=1;i=15037 + ns=1;i=15038 + ns=1;i=15039 + ns=1;i=15040 + ns=1;i=15041 + ns=1;i=15042 + ns=1;i=15043 + ns=1;i=15044 + ns=1;i=15045 + ns=1;i=15046 + ns=1;i=15047 + ns=1;i=23 + ns=1;i=24 + i=17602 + + + + Manufacturer + + i=68 + i=80 + ns=1;i=15035 + + + + ManufacturerUri + + i=68 + i=80 + ns=1;i=15035 + + + + Model + + i=68 + i=80 + ns=1;i=15035 + + + + HardwareRevision + + i=68 + i=80 + ns=1;i=15035 + + + + SoftwareRevision + + i=68 + i=80 + ns=1;i=15035 + + + + DeviceRevision + + i=68 + i=80 + ns=1;i=15035 + + + + ProductCode + + i=68 + i=80 + ns=1;i=15035 + + + + DeviceManual + + i=68 + i=80 + ns=1;i=15035 + + + + DeviceClass + + i=68 + i=80 + ns=1;i=15035 + + + + SerialNumber + + i=68 + i=80 + ns=1;i=15035 + + + + ProductInstanceUri + + i=68 + i=80 + ns=1;i=15035 + + + + RevisionCounter + + i=68 + i=80 + ns=1;i=15035 + + + + SoftwareReleaseDate + + i=68 + i=80 + ns=1;i=15035 + + + + PatchIdentifiers + + i=68 + i=80 + ns=1;i=15035 + + + + ITagNameplateType + DI TagNameplate + https://reference.opcfoundation.org/DI/v104/docs/4.5.3 + + ns=1;i=15049 + ns=1;i=15050 + i=17602 + + + + AssetId + + i=68 + i=80 + ns=1;i=15048 + + + + ComponentName + + i=68 + i=80 + ns=1;i=15048 + + + + IDeviceHealthType + DI DeviceHealth + https://reference.opcfoundation.org/DI/v104/docs/4.5.4 + + ns=1;i=15052 + ns=1;i=15053 + i=17602 + + + + DeviceHealth + + i=63 + i=80 + ns=1;i=15051 + + + + DeviceHealthAlarms + + i=61 + i=80 + ns=1;i=15051 + + + + ISupportInfoType + DI DeviceSupportInfo + https://reference.opcfoundation.org/DI/v104/docs/4.5.6 + + ns=1;i=15055 + ns=1;i=15057 + ns=1;i=27 + ns=1;i=15059 + ns=1;i=15061 + i=17602 + + + + DeviceTypeImage + + ns=1;i=15056 + i=61 + i=80 + ns=1;i=15054 + + + + <ImageIdentifier> + + i=63 + i=11510 + ns=1;i=15055 + + + + Documentation + + ns=1;i=15058 + i=61 + i=80 + ns=1;i=15054 + + + + <DocumentIdentifier> + + i=63 + i=11510 + ns=1;i=15057 + + + + DocumentationFiles + + ns=1;i=28 + i=61 + i=80 + ns=1;i=15054 + + + + <DocumentFileId> + + ns=1;i=29 + ns=1;i=30 + ns=1;i=31 + ns=1;i=32 + ns=1;i=36 + ns=1;i=39 + ns=1;i=63 + ns=1;i=66 + ns=1;i=68 + ns=1;i=71 + i=11575 + i=11510 + ns=1;i=27 + + + + Size + + i=68 + i=78 + ns=1;i=28 + + + + Writable + + i=68 + i=78 + ns=1;i=28 + + + + UserWritable + + i=68 + i=78 + ns=1;i=28 + + + + OpenCount + + i=68 + i=78 + ns=1;i=28 + + + + Open + + ns=1;i=37 + ns=1;i=38 + i=78 + ns=1;i=28 + + + + InputArguments + + i=68 + i=78 + ns=1;i=36 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=36 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + Close + + ns=1;i=62 + i=78 + ns=1;i=28 + + + + InputArguments + + i=68 + i=78 + ns=1;i=39 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + Read + + ns=1;i=64 + ns=1;i=65 + i=78 + ns=1;i=28 + + + + InputArguments + + i=68 + i=78 + ns=1;i=63 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=63 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + + Write + + ns=1;i=67 + i=78 + ns=1;i=28 + + + + InputArguments + + i=68 + i=78 + ns=1;i=66 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + + GetPosition + + ns=1;i=69 + ns=1;i=70 + i=78 + ns=1;i=28 + + + + InputArguments + + i=68 + i=78 + ns=1;i=68 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=68 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + + SetPosition + + ns=1;i=72 + i=78 + ns=1;i=28 + + + + InputArguments + + i=68 + i=78 + ns=1;i=71 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + + ProtocolSupport + + ns=1;i=15060 + i=61 + i=80 + ns=1;i=15054 + + + + <ProtocolSupportIdentifier> + + i=63 + i=11510 + ns=1;i=15059 + + + + ImageSet + + ns=1;i=15062 + i=61 + i=80 + ns=1;i=15054 + + + + <ImageIdentifier> + + i=63 + i=11510 + ns=1;i=15061 + + + + ComponentType + DI Information Model + https://reference.opcfoundation.org/DI/v104/docs/4.6 + + ns=1;i=15086 + ns=1;i=15087 + ns=1;i=15088 + ns=1;i=15089 + ns=1;i=15090 + ns=1;i=15091 + ns=1;i=15092 + ns=1;i=15093 + ns=1;i=15094 + ns=1;i=15095 + ns=1;i=15096 + ns=1;i=15097 + ns=1;i=15098 + ns=1;i=15099 + ns=1;i=15035 + ns=1;i=15048 + ns=1;i=1001 + + + + Manufacturer + + i=68 + i=80 + ns=1;i=15063 + + + + ManufacturerUri + + i=68 + i=80 + ns=1;i=15063 + + + + Model + + i=68 + i=80 + ns=1;i=15063 + + + + HardwareRevision + + i=68 + i=80 + ns=1;i=15063 + + + + SoftwareRevision + + i=68 + i=80 + ns=1;i=15063 + + + + DeviceRevision + + i=68 + i=80 + ns=1;i=15063 + + + + ProductCode + + i=68 + i=80 + ns=1;i=15063 + + + + DeviceManual + + i=68 + i=80 + ns=1;i=15063 + + + + DeviceClass + + i=68 + i=80 + ns=1;i=15063 + + + + SerialNumber + + i=68 + i=80 + ns=1;i=15063 + + + + ProductInstanceUri + + i=68 + i=80 + ns=1;i=15063 + + + + RevisionCounter + + i=68 + i=80 + ns=1;i=15063 + + + + AssetId + + i=68 + i=80 + ns=1;i=15063 + + + + ComponentName + + i=68 + i=80 + ns=1;i=15063 + + + + DeviceType + Defines the basic information components for all configurable elements in a device topology + DI DeviceType + https://reference.opcfoundation.org/DI/v104/docs/4.7 + + ns=1;i=6003 + ns=1;i=15100 + ns=1;i=6004 + ns=1;i=6008 + ns=1;i=6007 + ns=1;i=6006 + ns=1;i=15101 + ns=1;i=6005 + ns=1;i=6470 + ns=1;i=6001 + ns=1;i=15102 + ns=1;i=6002 + ns=1;i=6571 + ns=1;i=6208 + ns=1;i=15105 + ns=1;i=6209 + ns=1;i=6211 + ns=1;i=6213 + ns=1;i=6215 + ns=1;i=15054 + ns=1;i=15051 + ns=1;i=15063 + + + + Manufacturer + Name of the company that manufactured the device + + i=68 + i=78 + ns=1;i=1002 + + + + ManufacturerUri + + i=68 + i=80 + ns=1;i=1002 + + + + Model + Model name of the device + + i=68 + i=78 + ns=1;i=1002 + + + + HardwareRevision + Revision level of the hardware of the device + + i=68 + i=78 + ns=1;i=1002 + + + + SoftwareRevision + Revision level of the software/firmware of the device + + i=68 + i=78 + ns=1;i=1002 + + + + DeviceRevision + Overall revision level of the device + + i=68 + i=78 + ns=1;i=1002 + + + + ProductCode + + i=68 + i=80 + ns=1;i=1002 + + + + DeviceManual + Address (pathname in the file system or a URL | Web address) of user manual for the device + + i=68 + i=78 + ns=1;i=1002 + + + + DeviceClass + + i=68 + i=80 + ns=1;i=1002 + + + + SerialNumber + Identifier that uniquely identifies, within a manufacturer, a device instance + + i=68 + i=78 + ns=1;i=1002 + + + + ProductInstanceUri + + i=68 + i=80 + ns=1;i=1002 + + + + RevisionCounter + An incremental counter indicating the number of times the static data within the Device has been modified + + i=68 + i=78 + ns=1;i=1002 + + + + <CPIdentifier> + + ns=1;i=6592 + ns=1;i=6308 + i=11508 + ns=1;i=1002 + + + + NetworkAddress + The address of the device on this network. + + ns=1;i=1005 + i=78 + ns=1;i=6571 + + + + DeviceHealth + + i=63 + i=80 + ns=1;i=1002 + + + + DeviceHealthAlarms + + i=61 + i=80 + ns=1;i=1002 + + + + DeviceTypeImage + Organizes pictures of the device. + + ns=1;i=6210 + i=61 + i=80 + ns=1;i=1002 + + + + <ImageIdentifier> + An image of the device. + + i=63 + i=11510 + ns=1;i=6209 + + + + Documentation + Organizes documents for the device. + + ns=1;i=6212 + i=61 + i=80 + ns=1;i=1002 + + + + <DocumentIdentifier> + A document for the device. + + i=63 + i=11510 + ns=1;i=6211 + + + + ProtocolSupport + Protocol-specific files for the device. + + ns=1;i=6214 + i=61 + i=80 + ns=1;i=1002 + + + + <ProtocolSupportIdentifier> + A protocol-specific file for the device. + + i=63 + i=11510 + ns=1;i=6213 + + + + ImageSet + Organizes images that are used within UIElements. + + ns=1;i=6216 + i=61 + i=80 + ns=1;i=1002 + + + + <ImageIdentifier> + An image for a UIElement. + + i=63 + i=11510 + ns=1;i=6215 + + + + SoftwareType + DI Software Component + https://reference.opcfoundation.org/DI/v104/docs/4.8 + + ns=1;i=15129 + ns=1;i=15131 + ns=1;i=15133 + ns=1;i=15063 + + + + Manufacturer + + i=68 + i=78 + ns=1;i=15106 + + + + Model + + i=68 + i=78 + ns=1;i=15106 + + + + SoftwareRevision + + i=68 + i=78 + ns=1;i=15106 + + + + BlockType + Adds the concept of Blocks needed for block-oriented FieldDevices + DI Blocks + https://reference.opcfoundation.org/DI/v104/docs/4.11 + + ns=1;i=6009 + ns=1;i=6010 + ns=1;i=6011 + ns=1;i=6012 + ns=1;i=6013 + ns=1;i=1001 + + + + RevisionCounter + Incremental counter indicating the number of times the static data within the Block has been modified + + i=68 + i=80 + ns=1;i=1003 + + + + ActualMode + Current mode of operation the Block is able to achieve + + i=68 + i=80 + ns=1;i=1003 + + + + PermittedMode + Modes of operation that are allowed for the Block based on application requirements + + i=68 + i=80 + ns=1;i=1003 + + + + NormalMode + Mode the Block should be set to during normal operating conditions + + i=68 + i=80 + ns=1;i=1003 + + + + TargetMode + Mode of operation that is desired for the Block + + i=68 + i=80 + ns=1;i=1003 + + + + DeviceHealthDiagnosticAlarmType + DI HealthDiagnosticsAlarm + https://reference.opcfoundation.org/DI/v104/docs/4.12.2 + + i=18347 + + + + FailureAlarmType + DI HealthDiagnosticsAlarm + https://reference.opcfoundation.org/DI/v104/docs/4.12.3 + + ns=1;i=15143 + + + + CheckFunctionAlarmType + DI HealthDiagnosticsAlarm + https://reference.opcfoundation.org/DI/v104/docs/4.12.4 + + ns=1;i=15143 + + + + OffSpecAlarmType + DI HealthDiagnosticsAlarm + https://reference.opcfoundation.org/DI/v104/docs/4.12.5 + + ns=1;i=15143 + + + + MaintenanceRequiredAlarmType + DI HealthDiagnosticsAlarm + https://reference.opcfoundation.org/DI/v104/docs/4.12.6 + + ns=1;i=15143 + + + + ConfigurableObjectType + Defines a general pattern to expose and configure modular components + DI Information Model + https://reference.opcfoundation.org/DI/v104/docs/9.2.2 + + ns=1;i=5004 + ns=1;i=6026 + i=58 + + + + SupportedTypes + Folder maintaining the set of (sub-types of) BaseObjectTypes that can be instantiated in the ConfigurableComponent + + i=61 + i=78 + ns=1;i=1004 + + + + <ObjectIdentifier> + + i=58 + i=11508 + ns=1;i=1004 + + + + LifetimeVariableType + Remaining lifetime + DI LT Lifetime Base + https://reference.opcfoundation.org/DI/v104/docs/10.2.2 + + ns=1;i=469 + ns=1;i=470 + ns=1;i=471 + ns=1;i=472 + i=17497 + + + + StartValue + StartValue indicates the initial value, when there is still the full lifetime left. + + i=68 + i=78 + ns=1;i=468 + + + + LimitValue + LimitValue indicates when the end of lifetime has been reached. + + i=68 + i=78 + ns=1;i=468 + + + + Indication + Indication gives an indication of what is actually measured / represented by the Value of the Variable and the StartValue and LimitValue. + + i=68 + i=80 + ns=1;i=468 + + + + WarningValues + WarningValues indicates one or more levels when the end of lifetime is reached soon and may be used to inform the user when reached. + + i=68 + i=80 + ns=1;i=468 + + + + BaseLifetimeIndicationType + Base indication type not further defining a semantic + DI LT Lifetime Base + https://reference.opcfoundation.org/DI/v104/docs/10.3.2 + + i=58 + + + + TimeIndicationType + Indicates the time the entity has been in use or can still be used + DI LT Time Indication + https://reference.opcfoundation.org/DI/v104/docs/10.4.2 + + ns=1;i=473 + + + + NumberOfPartsIndicationType + Indicates the total number of parts that have been produced or can still be produced. + DI LT Nb Of Parts Indication + https://reference.opcfoundation.org/DI/v104/docs/10.5.2 + + ns=1;i=473 + + + + NumberOfUsagesIndicationType + Indicates counting the process steps the entity has been used or can still be used for (for example usages of a punching tool). + DI LT Nb Of Usages Indication + https://reference.opcfoundation.org/DI/v104/docs/10.6.2 + + ns=1;i=473 + + + + LengthIndicationType + Indicates the abraded length, for example of a drill. + DI LT Length Indication + https://reference.opcfoundation.org/DI/v104/docs/10.7.2 + + ns=1;i=473 + + + + DiameterIndicationType + Indicates the abraded diameter, for example of a drill. + DI LT Diameter Indication + https://reference.opcfoundation.org/DI/v104/docs/10.8.2 + + ns=1;i=473 + + + + SubstanceVolumeIndicationType + Indicates the volume of a substance, for example of a liquid. + DI LT Substance Volume Indication + https://reference.opcfoundation.org/DI/v104/docs/10.9.2 + + ns=1;i=473 + + + + FunctionalGroupType + FolderType is used to organize the Parameters and Methods from the complete set (ParameterSet, MethodSet) with regard to their application + DI Information Model + https://reference.opcfoundation.org/DI/v104/docs/4.4.1 + + ns=1;i=6027 + ns=1;i=6243 + i=61 + + + + <GroupIdentifier> + An application specific functional group used to organize parameters and methods. + + ns=1;i=6242 + ns=1;i=1005 + i=11508 + ns=1;i=1005 + + + + UIElement + A user interface element assigned to this group. + + ns=1;i=6246 + i=80 + ns=1;i=6027 + + + + UIElement + A user interface element assigned to this group. + + ns=1;i=6246 + i=80 + ns=1;i=1005 + + + + ProtocolType + General structure of a Protocol ObjectType + DI Network + DI Protocol + https://reference.opcfoundation.org/DI/v104/docs/5.2 + + i=58 + + + + DeviceHealthEnumeration + DI DeviceHealth + https://reference.opcfoundation.org/DI/v104/docs/4.5.4 + + ns=1;i=6450 + i=29 + + + + This device functions normally. + + + Malfunction of the device or any of its peripherals. + + + Functional checks are currently performed. + + + The device is currently working outside of its specified range or that internal diagnoses indicate deviations from measured or set values. + + + This element is working, but a maintenance operation is required. + + + + + EnumStrings + + i=68 + ns=1;i=6244 + + + + + NORMAL + + + FAILURE + + + CHECK_FUNCTION + + + OFF_SPEC + + + MAINTENANCE_REQUIRED + + + + + + IOperationCounterType + Interface defining counters for the duration of operation + DI OperationCounter Interface + https://reference.opcfoundation.org/DI/v104/docs/4.5.5 + + ns=1;i=481 + ns=1;i=482 + ns=1;i=483 + i=17602 + + + + PowerOnDuration + PowerOnDuration is the duration the Device has been powered. The main purpose is to determine the time in which degradation of the Device occurred. The details, when the time is counted, is implementation-specific. Companion specifications might define specific rules. Typically, when the Device has supply voltage and the main CPU is running, the time is counted. This may include any kind of sleep mode, but may not include pure Wake on LAN. This value shall only increase during the lifetime of the Device and shall not be reset when the Device is restarted. The PowerOnDuration is provided as Duration, i.e., in milliseconds or even fractions of a millisecond. However, the Server is not expected to update the value in such a high frequency, but maybe once a minute or once an hour, depending on the application. + + i=68 + i=80 + ns=1;i=480 + + + + OperationDuration + OperationDuration is the duration the Device has been powered and performing an activity. This counter is intended for Devices where a distinction is made between switched on and in operation. For example, a drive might be powered on but not operating. It is not intended for Devices always performing an activity like sensors always measuring data. This value shall only increase during the lifetime of the Device and shall not be reset when the Device is restarted. The OperationDuration is provided as Duration, i.e., in milliseconds or even fractions of a millisecond. However, the Server is not expected to update the value in such a high frequency, but maybe once a minute or once an hour, depending on the application. + + i=68 + i=80 + ns=1;i=480 + + + + OperationCycleCounter + OperationCycleCounter is counting the times the Device switches from not performing an activity to performing an activity. For example, each time a valve starts moving, is counted. This value shall only increase during the lifetime of the Device and shall not be reset when the Device is restarted. + + i=68 + i=80 + ns=1;i=480 + + + + UIElementType + The base type for all UI Element Types. + DI Information Model + https://reference.opcfoundation.org/DI/v104/docs/4.4.3 + + i=63 + + + + NetworkType + Represents the communication means for Devices that are connected to it. + DI Network + https://reference.opcfoundation.org/DI/v104/docs/5.3 + + ns=1;i=6596 + ns=1;i=6248 + ns=1;i=6294 + i=58 + + + + <ProfileIdentifier> + + ns=1;i=1006 + i=11510 + ns=1;i=6247 + + + + <CPIdentifier> + The ConnectionPoint(s) that have been configured for this Network. + + ns=1;i=6292 + ns=1;i=6308 + i=11508 + ns=1;i=6247 + + + + NetworkAddress + The address of the device on this network. + + ns=1;i=1005 + i=78 + ns=1;i=6248 + + + + Lock + Used to lock the Network. + + ns=1;i=6497 + ns=1;i=6296 + ns=1;i=6297 + ns=1;i=6298 + ns=1;i=6299 + ns=1;i=6302 + ns=1;i=6304 + ns=1;i=6306 + ns=1;i=6388 + i=80 + ns=1;i=6247 + + + + Locked + + i=68 + i=78 + ns=1;i=6294 + + + + LockingClient + + i=68 + i=78 + ns=1;i=6294 + + + + LockingUser + + i=68 + i=78 + ns=1;i=6294 + + + + RemainingLockTime + + i=68 + i=78 + ns=1;i=6294 + + + + InitLock + DI Locking + + ns=1;i=6300 + ns=1;i=6301 + i=78 + ns=1;i=6294 + + + + InputArguments + + i=68 + i=78 + ns=1;i=6299 + + + + + + i=297 + + + + Context + + i=12 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6299 + + + + + + i=297 + + + + InitLockStatus + + i=6 + + -1 + + + + + + + + + + RenewLock + DI Locking + + ns=1;i=6303 + i=78 + ns=1;i=6294 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6302 + + + + + + i=297 + + + + RenewLockStatus + + i=6 + + -1 + + + + + + + + + + ExitLock + DI Locking + + ns=1;i=6305 + i=78 + ns=1;i=6294 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6304 + + + + + + i=297 + + + + ExitLockStatus + + i=6 + + -1 + + + + + + + + + + BreakLock + DI Locking + + ns=1;i=6307 + i=78 + ns=1;i=6294 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6306 + + + + + + i=297 + + + + BreakLockStatus + + i=6 + + -1 + + + + + + + + + + ConnectionPointType + Represents the interface (interface card) of a Device to a Network. + DI ConnectionPoint + https://reference.opcfoundation.org/DI/v104/docs/5.4 + + ns=1;i=6354 + ns=1;i=6499 + ns=1;i=6599 + ns=1;i=1001 + + + + NetworkAddress + The address of the device on this network. + + ns=1;i=1005 + i=78 + ns=1;i=6308 + + + + <ProfileIdentifier> + + ns=1;i=1006 + i=11510 + ns=1;i=6308 + + + + <NetworkIdentifier> + + ns=1;i=6247 + i=11508 + ns=1;i=6308 + + + + FetchResultDataType + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.4.6 + + i=22 + + + + + TransferResultErrorDataType + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.4.6 + + ns=1;i=6522 + + + + + + + + TransferResultDataDataType + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.4.6 + + ns=1;i=6522 + + + + + + + + + ParameterResultDataType + https://reference.opcfoundation.org/DI/v104/docs/6.4.6 + + i=22 + + + + + + + + + TransferServicesType + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.4.2 + + ns=1;i=6527 + ns=1;i=6529 + ns=1;i=6531 + i=58 + + + + TransferToDevice + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.4.4 + + ns=1;i=6528 + i=78 + ns=1;i=6526 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6527 + + + + + + i=297 + + + + TransferID + + i=6 + + -1 + + + + + + + + i=297 + + + + InitTransferStatus + + i=6 + + -1 + + + + + + + + + + TransferFromDevice + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.4.5 + + ns=1;i=6530 + i=78 + ns=1;i=6526 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6529 + + + + + + i=297 + + + + TransferID + + i=6 + + -1 + + + + + + + + i=297 + + + + InitTransferStatus + + i=6 + + -1 + + + + + + + + + + FetchTransferResultData + DI Offline + https://reference.opcfoundation.org/DI/v104/docs/6.4.6 + + ns=1;i=6532 + ns=1;i=6533 + i=78 + ns=1;i=6526 + + + + InputArguments + + i=68 + i=78 + ns=1;i=6531 + + + + + + i=297 + + + + TransferID + + i=6 + + -1 + + + + + + + + i=297 + + + + SequenceNumber + + i=6 + + -1 + + + + + + + + i=297 + + + + MaxParameterResultsToReturn + + i=6 + + -1 + + + + + + + + i=297 + + + + OmitGoodResults + + i=1 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6531 + + + + + + i=297 + + + + FetchResultData + + i=22 + + -1 + + + + + + + + + + MaxInactiveLockTime + Server-specific period of time in milliseconds until the Server will revoke a lock. + + i=2268 + i=68 + + + + LockingServicesType + An interface for Locking. + DI Locking + https://reference.opcfoundation.org/DI/v104/docs/7.2 + + ns=1;i=15890 + ns=1;i=6534 + ns=1;i=6390 + ns=1;i=6391 + ns=1;i=6392 + ns=1;i=6393 + ns=1;i=6396 + ns=1;i=6398 + ns=1;i=6400 + i=58 + + + + DefaultInstanceBrowseName + + i=68 + ns=1;i=6388 + + + + 1 + Lock + + + + + Locked + + i=68 + i=78 + ns=1;i=6388 + + + + LockingClient + + i=68 + i=78 + ns=1;i=6388 + + + + LockingUser + + i=68 + i=78 + ns=1;i=6388 + + + + RemainingLockTime + + i=68 + i=78 + ns=1;i=6388 + + + + InitLock + DI Locking + https://reference.opcfoundation.org/DI/v104/docs/7.5 + + ns=1;i=6394 + ns=1;i=6395 + i=78 + ns=1;i=6388 + + + + InputArguments + + i=68 + i=78 + ns=1;i=6393 + + + + + + i=297 + + + + Context + + i=12 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6393 + + + + + + i=297 + + + + InitLockStatus + + i=6 + + -1 + + + + + + + + + + RenewLock + DI Locking + https://reference.opcfoundation.org/DI/v104/docs/7.7 + + ns=1;i=6397 + i=78 + ns=1;i=6388 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6396 + + + + + + i=297 + + + + RenewLockStatus + + i=6 + + -1 + + + + + + + + + + ExitLock + DI Locking + https://reference.opcfoundation.org/DI/v104/docs/7.6 + + ns=1;i=6399 + i=78 + ns=1;i=6388 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6398 + + + + + + i=297 + + + + ExitLockStatus + + i=6 + + -1 + + + + + + + + + + BreakLock + DI Locking + https://reference.opcfoundation.org/DI/v104/docs/7.8 + + ns=1;i=6401 + i=78 + ns=1;i=6388 + + + + OutputArguments + + i=68 + i=78 + ns=1;i=6400 + + + + + + i=297 + + + + BreakLockStatus + + i=6 + + -1 + + + + + + + + + + SoftwareUpdateType + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.4.1/#8.4.1.1 + + ns=1;i=2 + ns=1;i=4 + ns=1;i=40 + ns=1;i=76 + ns=1;i=98 + ns=1;i=122 + ns=1;i=133 + ns=1;i=402 + ns=1;i=134 + i=58 + + + + Loading + + ns=1;i=135 + i=80 + ns=1;i=1 + + + + PrepareForUpdate + + ns=1;i=5 + ns=1;i=19 + ns=1;i=20 + ns=1;i=213 + i=80 + ns=1;i=1 + + + + CurrentState + + ns=1;i=6 + i=2760 + i=78 + ns=1;i=4 + + + + Id + + i=68 + i=78 + ns=1;i=5 + + + + Prepare + + i=78 + ns=1;i=4 + + + + Abort + + i=78 + ns=1;i=4 + + + + Installation + + ns=1;i=41 + ns=1;i=61 + ns=1;i=249 + i=80 + ns=1;i=1 + + + + CurrentState + + ns=1;i=42 + i=2760 + i=78 + ns=1;i=40 + + + + Id + + i=68 + i=78 + ns=1;i=41 + + + + Resume + + i=78 + ns=1;i=40 + + + + PowerCycle + + ns=1;i=77 + ns=1;i=285 + i=80 + ns=1;i=1 + + + + CurrentState + + ns=1;i=78 + i=2760 + i=78 + ns=1;i=76 + + + + Id + + i=68 + i=78 + ns=1;i=77 + + + + Confirmation + + ns=1;i=99 + ns=1;i=112 + ns=1;i=113 + ns=1;i=307 + i=80 + ns=1;i=1 + + + + CurrentState + + ns=1;i=100 + i=2760 + i=78 + ns=1;i=98 + + + + Id + + i=68 + i=78 + ns=1;i=99 + + + + Confirm + + i=78 + ns=1;i=98 + + + + ConfirmationTimeout + + i=63 + i=78 + ns=1;i=98 + + + + Parameters + + ns=1;i=123 + ns=1;i=124 + ns=1;i=127 + ns=1;i=130 + i=15744 + i=80 + ns=1;i=1 + + + + ClientProcessingTimeout + + i=68 + i=78 + ns=1;i=122 + + + + GenerateFileForRead + + ns=1;i=125 + ns=1;i=126 + i=78 + ns=1;i=122 + + + + InputArguments + + i=68 + i=78 + ns=1;i=124 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=124 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + + GenerateFileForWrite + + ns=1;i=128 + ns=1;i=129 + i=78 + ns=1;i=122 + + + + InputArguments + + i=68 + i=78 + ns=1;i=127 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=127 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + CloseAndCommit + + ns=1;i=131 + ns=1;i=132 + i=78 + ns=1;i=122 + + + + InputArguments + + i=68 + i=78 + ns=1;i=130 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=130 + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + + UpdateStatus + + i=63 + i=80 + ns=1;i=1 + + + + VendorErrorCode + + i=63 + i=80 + ns=1;i=1 + + + + DefaultInstanceBrowseName + + i=68 + ns=1;i=1 + + + + 1 + SoftwareUpdate + + + + + SoftwareLoadingType + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.4.2/#8.4.2.1 + + ns=1;i=136 + i=58 + + + + UpdateKey + + i=63 + i=80 + ns=1;i=135 + + + + PackageLoadingType + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.4.3/#8.4.3.1 + + ns=1;i=139 + ns=1;i=140 + ns=1;i=151 + ns=1;i=152 + ns=1;i=135 + + + + CurrentVersion + + ns=1;i=345 + ns=1;i=346 + ns=1;i=347 + ns=1;i=212 + i=78 + ns=1;i=137 + + + + Manufacturer + + i=68 + i=78 + ns=1;i=139 + + + + ManufacturerUri + + i=68 + i=78 + ns=1;i=139 + + + + SoftwareRevision + + i=68 + i=78 + ns=1;i=139 + + + + FileTransfer + + ns=1;i=141 + ns=1;i=142 + ns=1;i=145 + ns=1;i=148 + i=15744 + i=78 + ns=1;i=137 + + + + ClientProcessingTimeout + + i=68 + i=78 + ns=1;i=140 + + + + GenerateFileForRead + + ns=1;i=143 + ns=1;i=144 + i=78 + ns=1;i=140 + + + + InputArguments + + i=68 + i=78 + ns=1;i=142 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=142 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + + GenerateFileForWrite + + ns=1;i=146 + ns=1;i=147 + i=78 + ns=1;i=140 + + + + InputArguments + + i=68 + i=78 + ns=1;i=145 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=145 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + CloseAndCommit + + ns=1;i=149 + ns=1;i=150 + i=78 + ns=1;i=140 + + + + InputArguments + + i=68 + i=78 + ns=1;i=148 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=148 + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + + ErrorMessage + + i=63 + i=78 + ns=1;i=137 + + + + WriteBlockSize + + i=68 + i=80 + ns=1;i=137 + + + + DirectLoadingType + DI SU DirectLoading + https://reference.opcfoundation.org/DI/v104/docs/8.4.4/#8.4.4.1 + + ns=1;i=169 + ns=1;i=170 + ns=1;i=137 + + + + UpdateBehavior + + i=63 + i=78 + ns=1;i=153 + + + + WriteTimeout + + i=68 + i=80 + ns=1;i=153 + + + + CachedLoadingType + DI SU CachedLoading + https://reference.opcfoundation.org/DI/v104/docs/8.4.5/#8.4.5.1 + + ns=1;i=187 + ns=1;i=188 + ns=1;i=189 + ns=1;i=137 + + + + PendingVersion + + ns=1;i=366 + ns=1;i=367 + ns=1;i=368 + ns=1;i=212 + i=78 + ns=1;i=171 + + + + Manufacturer + + i=68 + i=78 + ns=1;i=187 + + + + ManufacturerUri + + i=68 + i=78 + ns=1;i=187 + + + + SoftwareRevision + + i=68 + i=78 + ns=1;i=187 + + + + FallbackVersion + + ns=1;i=373 + ns=1;i=374 + ns=1;i=375 + ns=1;i=212 + i=80 + ns=1;i=171 + + + + Manufacturer + + i=68 + i=78 + ns=1;i=188 + + + + ManufacturerUri + + i=68 + i=78 + ns=1;i=188 + + + + SoftwareRevision + + i=68 + i=78 + ns=1;i=188 + + + + GetUpdateBehavior + DI SU CachedLoading + https://reference.opcfoundation.org/DI/v104/docs/8.4.5/#8.4.5.5 + + ns=1;i=190 + ns=1;i=191 + i=78 + ns=1;i=171 + + + + InputArguments + + i=68 + i=78 + ns=1;i=189 + + + + + + i=297 + + + + ManufacturerUri + + i=12 + + -1 + + + + + + + + i=297 + + + + SoftwareRevision + + i=12 + + -1 + + + + + + + + i=297 + + + + PatchIdentifiers + + i=12 + + 1 + + 0 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=189 + + + + + + i=297 + + + + UpdateBehavior + + ns=1;i=333 + + -1 + + + + + + + + + + FileSystemLoadingType + DI SU FileSystem Loading + https://reference.opcfoundation.org/DI/v104/docs/8.4.6/#8.4.6.1 + + ns=1;i=194 + ns=1;i=206 + ns=1;i=209 + ns=1;i=135 + + + + FileSystem + + ns=1;i=195 + ns=1;i=198 + ns=1;i=201 + ns=1;i=203 + i=13353 + i=78 + ns=1;i=192 + + + + CreateDirectory + + ns=1;i=196 + ns=1;i=197 + i=78 + ns=1;i=194 + + + + InputArguments + + i=68 + i=78 + ns=1;i=195 + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=195 + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + + CreateFile + + ns=1;i=199 + ns=1;i=200 + i=78 + ns=1;i=194 + + + + InputArguments + + i=68 + i=78 + ns=1;i=198 + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=198 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + + Delete + + ns=1;i=202 + i=78 + ns=1;i=194 + + + + InputArguments + + i=68 + i=78 + ns=1;i=201 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + + MoveOrCopy + + ns=1;i=204 + ns=1;i=205 + i=78 + ns=1;i=194 + + + + InputArguments + + i=68 + i=78 + ns=1;i=203 + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=203 + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + + GetUpdateBehavior + DI SU FileSystem Loading + https://reference.opcfoundation.org/DI/v104/docs/8.4.6/#8.4.6.3 + + ns=1;i=207 + ns=1;i=208 + i=78 + ns=1;i=192 + + + + InputArguments + + i=68 + i=78 + ns=1;i=206 + + + + + + i=297 + + + + NodeIds + + i=17 + + 1 + + 0 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=206 + + + + + + i=297 + + + + UpdateBehavior + + ns=1;i=333 + + -1 + + + + + + + + + + ValidateFiles + DI SU FileSystem Loading + https://reference.opcfoundation.org/DI/v104/docs/8.4.6/#8.4.6.4 + + ns=1;i=210 + ns=1;i=211 + i=80 + ns=1;i=192 + + + + InputArguments + + i=68 + i=78 + ns=1;i=209 + + + + + + i=297 + + + + NodeIds + + i=17 + + 1 + + 0 + + + + + + + + + + OutputArguments + + i=68 + i=78 + ns=1;i=209 + + + + + + i=297 + + + + ErrorCode + + i=6 + + -1 + + + + + + + + i=297 + + + + ErrorMessage + + i=21 + + -1 + + + + + + + + + + SoftwareVersionType + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.4.7/#8.4.7.1 + + ns=1;i=380 + ns=1;i=381 + ns=1;i=382 + ns=1;i=383 + ns=1;i=384 + ns=1;i=385 + ns=1;i=386 + i=58 + + + + Manufacturer + + i=68 + i=78 + ns=1;i=212 + + + + ManufacturerUri + + i=68 + i=78 + ns=1;i=212 + + + + SoftwareRevision + + i=68 + i=78 + ns=1;i=212 + + + + PatchIdentifiers + + i=68 + i=80 + ns=1;i=212 + + + + ReleaseDate + + i=68 + i=80 + ns=1;i=212 + + + + ChangeLogReference + + i=68 + i=80 + ns=1;i=212 + + + + Hash + + i=68 + i=80 + ns=1;i=212 + + + + PrepareForUpdateStateMachineType + DI SU PrepareForUpdate + https://reference.opcfoundation.org/DI/v104/docs/8.4.8/#8.4.8.1 + + ns=1;i=227 + ns=1;i=228 + ns=1;i=229 + ns=1;i=230 + ns=1;i=231 + ns=1;i=233 + ns=1;i=235 + ns=1;i=237 + ns=1;i=239 + ns=1;i=241 + ns=1;i=243 + ns=1;i=245 + ns=1;i=247 + i=2771 + + + + PercentComplete + + i=63 + i=80 + ns=1;i=213 + + + + Prepare + + i=78 + ns=1;i=213 + + + + Abort + + i=78 + ns=1;i=213 + + + + Resume + + i=80 + ns=1;i=213 + + + + Idle + + ns=1;i=232 + ns=1;i=239 + ns=1;i=241 + ns=1;i=247 + i=2309 + ns=1;i=213 + + + + StateNumber + + i=68 + i=78 + ns=1;i=231 + + + 1 + + + + Preparing + + ns=1;i=234 + ns=1;i=239 + ns=1;i=241 + ns=1;i=243 + i=2307 + ns=1;i=213 + + + + StateNumber + + i=68 + i=78 + ns=1;i=233 + + + 2 + + + + PreparedForUpdate + + ns=1;i=236 + ns=1;i=243 + ns=1;i=245 + i=2307 + ns=1;i=213 + + + + StateNumber + + i=68 + i=78 + ns=1;i=235 + + + 3 + + + + Resuming + + ns=1;i=238 + ns=1;i=245 + ns=1;i=247 + i=2307 + ns=1;i=213 + + + + StateNumber + + i=68 + i=78 + ns=1;i=237 + + + 4 + + + + IdleToPreparing + + ns=1;i=240 + ns=1;i=231 + ns=1;i=233 + i=2311 + i=2310 + ns=1;i=213 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=239 + + + 12 + + + + PreparingToIdle + + ns=1;i=242 + ns=1;i=231 + ns=1;i=233 + i=2311 + i=2310 + ns=1;i=213 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=241 + + + 21 + + + + PreparingToPreparedForUpdate + + ns=1;i=244 + ns=1;i=233 + ns=1;i=235 + i=2311 + i=2310 + ns=1;i=213 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=243 + + + 23 + + + + PreparedForUpdateToResuming + + ns=1;i=246 + ns=1;i=235 + ns=1;i=237 + i=2311 + i=2310 + ns=1;i=213 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=245 + + + 34 + + + + ResumingToIdle + + ns=1;i=248 + ns=1;i=231 + ns=1;i=237 + i=2311 + i=2310 + ns=1;i=213 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=247 + + + 41 + + + + InstallationStateMachineType + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.4.9/#8.4.9.1 + + ns=1;i=263 + ns=1;i=264 + ns=1;i=265 + ns=1;i=268 + ns=1;i=270 + ns=1;i=271 + ns=1;i=273 + ns=1;i=275 + ns=1;i=277 + ns=1;i=279 + ns=1;i=281 + ns=1;i=283 + i=2771 + + + + PercentComplete + + i=63 + i=80 + ns=1;i=249 + + + + InstallationDelay + + i=63 + i=80 + ns=1;i=249 + + + + InstallSoftwarePackage + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.4.9/#8.4.9.4 + + ns=1;i=266 + i=80 + ns=1;i=249 + + + + InputArguments + + i=68 + i=78 + ns=1;i=265 + + + + + + i=297 + + + + ManufacturerUri + + i=12 + + -1 + + + + + + + + i=297 + + + + SoftwareRevision + + i=12 + + -1 + + + + + + + + i=297 + + + + PatchIdentifiers + + i=12 + + 1 + + 0 + + + + + + + + i=297 + + + + Hash + + i=15 + + -1 + + + + + + + + + + InstallFiles + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.4.9/#8.4.9.5 + + ns=1;i=269 + i=80 + ns=1;i=249 + + + + InputArguments + + i=68 + i=78 + ns=1;i=268 + + + + + + i=297 + + + + NodeIds + + i=17 + + 1 + + 0 + + + + + + + + + + Resume + + i=78 + ns=1;i=249 + + + + Idle + + ns=1;i=272 + ns=1;i=277 + ns=1;i=279 + ns=1;i=283 + i=2309 + ns=1;i=249 + + + + StateNumber + + i=68 + i=78 + ns=1;i=271 + + + 1 + + + + Installing + + ns=1;i=274 + ns=1;i=277 + ns=1;i=279 + ns=1;i=281 + i=2307 + ns=1;i=249 + + + + StateNumber + + i=68 + i=78 + ns=1;i=273 + + + 2 + + + + Error + + ns=1;i=276 + ns=1;i=281 + ns=1;i=283 + i=2307 + ns=1;i=249 + + + + StateNumber + + i=68 + i=78 + ns=1;i=275 + + + 3 + + + + IdleToInstalling + + ns=1;i=387 + ns=1;i=271 + ns=1;i=273 + i=2311 + i=2310 + ns=1;i=249 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=277 + + + 12 + + + + InstallingToIdle + + ns=1;i=280 + ns=1;i=271 + ns=1;i=273 + i=2311 + i=2310 + ns=1;i=249 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=279 + + + 21 + + + + InstallingToError + + ns=1;i=282 + ns=1;i=273 + ns=1;i=275 + i=2311 + i=2310 + ns=1;i=249 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=281 + + + 23 + + + + ErrorToIdle + + ns=1;i=284 + ns=1;i=271 + ns=1;i=275 + i=2311 + i=2310 + ns=1;i=249 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=283 + + + 31 + + + + PowerCycleStateMachineType + DI SU Manual Power Cycle + https://reference.opcfoundation.org/DI/v104/docs/8.4.10 + + ns=1;i=299 + ns=1;i=301 + ns=1;i=303 + ns=1;i=305 + i=2771 + + + + NotWaitingForPowerCycle + + ns=1;i=300 + ns=1;i=303 + ns=1;i=305 + i=2309 + ns=1;i=285 + + + + StateNumber + + i=68 + i=78 + ns=1;i=299 + + + 1 + + + + WaitingForPowerCycle + + ns=1;i=302 + ns=1;i=303 + ns=1;i=305 + i=2307 + ns=1;i=285 + + + + StateNumber + + i=68 + i=78 + ns=1;i=301 + + + 2 + + + + NotWaitingForPowerCycleToWaitingForPowerCycle + + ns=1;i=304 + ns=1;i=299 + ns=1;i=301 + i=2311 + i=2310 + ns=1;i=285 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=303 + + + 12 + + + + WaitingForPowerCycleToNotWaitingForPowerCycle + + ns=1;i=306 + ns=1;i=299 + ns=1;i=301 + i=2311 + i=2310 + ns=1;i=285 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=305 + + + 21 + + + + ConfirmationStateMachineType + DI SU Update Confirmation + https://reference.opcfoundation.org/DI/v104/docs/8.4.11/#8.4.11.1 + + ns=1;i=321 + ns=1;i=322 + ns=1;i=323 + ns=1;i=325 + ns=1;i=327 + ns=1;i=329 + i=2771 + + + + Confirm + + i=78 + ns=1;i=307 + + + + ConfirmationTimeout + + i=63 + i=78 + ns=1;i=307 + + + + NotWaitingForConfirm + + ns=1;i=324 + ns=1;i=327 + ns=1;i=329 + i=2309 + ns=1;i=307 + + + + StateNumber + + i=68 + i=78 + ns=1;i=323 + + + 1 + + + + WaitingForConfirm + + ns=1;i=326 + ns=1;i=327 + ns=1;i=329 + i=2307 + ns=1;i=307 + + + + StateNumber + + i=68 + i=78 + ns=1;i=325 + + + 2 + + + + NotWaitingForConfirmToWaitingForConfirm + + ns=1;i=328 + ns=1;i=323 + ns=1;i=325 + i=2311 + i=2310 + ns=1;i=307 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=327 + + + 12 + + + + WaitingForConfirmToNotWaitingForConfirm + + ns=1;i=330 + ns=1;i=323 + ns=1;i=325 + i=2311 + i=2310 + ns=1;i=307 + + + + TransitionNumber + + i=68 + i=78 + ns=1;i=329 + + + 21 + + + + SoftwareVersionFileType + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.5.1 + + ns=1;i=332 + i=29 + + + + The currently used version of the software identified by the CurrentVersion Object. + + + The pending version of the software that could be installed identified by the PendingVersion Object. + + + The fallback version of the software identified by the FallbackVersion Object. + + + + + EnumStrings + + i=68 + ns=1;i=331 + + + + + Current + + + Pending + + + Fallback + + + + + + UpdateBehavior + DI SU Software Update + https://reference.opcfoundation.org/DI/v104/docs/8.5.2 + + ns=1;i=388 + i=7 + + + + If KeepsParameters is not set, the device will lose its configuration during update. The Client should do a backup of the parameters before the update and restore them afterwards. + + + If WillDisconnect is set, the OPC UA Server will restart during installation. This can be the case if the update is about the firmware of the device that hosts the OPC UA Server. + + + If RequiresPowerCycle is set, the devices require a manual power off / power on for installation. + + + If WillReboot is set, the device will reboot during the update, inclusive of embedded infrastructure elements like an integrated switch. An update Client should take this into account since the devices behind an integrated switch are not reachable for that time. + + + If NeedsPreparation is not set, the Client can install the update without maintaining the PrepareForUpdateStateMachine. This can be used to support an installation without stopping the software. + + + + + OptionSetValues + + i=68 + ns=1;i=333 + + + + + KeepsParameters + + + WillDisconnect + + + RequiresPowerCycle + + + WillReboot + + + NeedsPreparation + + + + + + Default Binary + + ns=1;i=6522 + ns=1;i=6555 + i=76 + + + + Default Binary + + ns=1;i=15888 + ns=1;i=15894 + i=76 + + + + Default Binary + + ns=1;i=15889 + ns=1;i=15897 + i=76 + + + + Default Binary + + ns=1;i=6525 + ns=1;i=6564 + i=76 + + + + Opc.Ua.Di + + ns=1;i=6437 + ns=1;i=15893 + ns=1;i=6555 + ns=1;i=15894 + ns=1;i=15897 + ns=1;i=6564 + i=93 + i=72 + + + PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y +Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M +U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB +LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvREkvIg0KICBEZWZh +dWx0Qnl0ZU9yZGVyPSJMaXR0bGVFbmRpYW4iDQogIFRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29w +Y2ZvdW5kYXRpb24ub3JnL1VBL0RJLyINCj4NCiAgPG9wYzpJbXBvcnQgTmFtZXNwYWNlPSJodHRw +Oi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvIiBMb2NhdGlvbj0iT3BjLlVhLkJpbmFyeVNjaGVtYS5i +c2QiLz4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkRldmljZUhlYWx0aEVudW1lcmF0 +aW9uIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +T1JNQUwiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZBSUxV +UkUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNIRUNLX0ZV +TkNUSU9OIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPRkZf +U1BFQyIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTUFJTlRF +TkFOQ0VfUkVRVUlSRUQiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkZldGNoUmVzdWx0RGF0YVR5cGUiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRyYW5zZmVyUmVzdWx0RXJyb3JEYXRhVHlwZSIgQmFzZVR5 +cGU9InRuczpGZXRjaFJlc3VsdERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1 +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0 +aWNzIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVHJhbnNmZXJSZXN1bHREYXRhRGF0 +YVR5cGUiIEJhc2VUeXBlPSJ0bnM6RmV0Y2hSZXN1bHREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTZXF1ZW5jZU51bWJlciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkVuZE9mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZlBhcmFtZXRlckRlZnMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQYXJhbWV0ZXJEZWZzIiBUeXBlTmFtZT0idG5zOlBh +cmFtZXRlclJlc3VsdERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZlBhcmFtZXRlckRlZnMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +UGFyYW1ldGVyUmVzdWx0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVQYXRoIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZVBhdGgiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWRO +YW1lIiBMZW5ndGhGaWVsZD0iTm9PZk5vZGVQYXRoIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U3RhdHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEaWFnbm9zdGljcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlNvZnR3YXJl +VmVyc2lvbkZpbGVUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJDdXJyZW50IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJQZW5kaW5nIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJGYWxsYmFjayIgVmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQog +IDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVXBkYXRlQmVoYXZpb3IiIExlbmd0aEluQml0cz0i +MzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJO +b25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJLZWVwc1Bh +cmFtZXRlcnMiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ildp +bGxEaXNjb25uZWN0IiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJSZXF1aXJlc1Bvd2VyQ3ljbGUiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IldpbGxSZWJvb3QiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9Ik5lZWRzUHJlcGFyYXRpb24iIFZhbHVlPSIxNiIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCjwvb3BjOlR5cGVEaWN0aW9uYXJ5Pg== + + + + NamespaceUri + + i=68 + ns=1;i=6435 + + + http://opcfoundation.org/UA/DI/ + + + + Deprecated + + i=68 + ns=1;i=6435 + + + true + + + + FetchResultDataType + + i=69 + ns=1;i=6435 + + + FetchResultDataType + + + + TransferResultErrorDataType + + i=69 + ns=1;i=6435 + + + TransferResultErrorDataType + + + + TransferResultDataDataType + + i=69 + ns=1;i=6435 + + + TransferResultDataDataType + + + + ParameterResultDataType + + i=69 + ns=1;i=6435 + + + ParameterResultDataType + + + + Default XML + + ns=1;i=6522 + ns=1;i=6539 + i=76 + + + + Default XML + + ns=1;i=15888 + ns=1;i=15903 + i=76 + + + + Default XML + + ns=1;i=15889 + ns=1;i=15906 + i=76 + + + + Default XML + + ns=1;i=6525 + ns=1;i=6548 + i=76 + + + + Opc.Ua.Di + + ns=1;i=6425 + ns=1;i=15902 + ns=1;i=6539 + ns=1;i=15903 + ns=1;i=15906 + ns=1;i=6548 + i=92 + i=72 + + + PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi +DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 +c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBL0RJL1R5cGVzLnhz +ZCINCiAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvREkvVHlw +ZXMueHNkIg0KICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCINCj4NCiAgPHhzOmFubm90 +YXRpb24+DQogICAgPHhzOmFwcGluZm8+DQogICAgICA8dWE6TW9kZWwgTW9kZWxVcmk9Imh0dHA6 +Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS9ESS8iIFZlcnNpb249IjEuMDQuMCIgUHVibGljYXRpb25E +YXRlPSIyMDIyLTExLTAzVDAwOjAwOjAwWiIgLz4NCiAgICA8L3hzOmFwcGluZm8+DQogIDwveHM6 +YW5ub3RhdGlvbj4NCiAgDQogIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vb3BjZm91bmRh +dGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54c2QiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5h +bWU9IkRldmljZUhlYWx0aEVudW1lcmF0aW9uIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i +eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTk9STUFMXzAiIC8+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZBSUxVUkVfMSIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iQ0hFQ0tfRlVOQ1RJT05fMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iT0ZGX1NQRUNfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUFJ +TlRFTkFOQ0VfUkVRVUlSRURfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp +bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRldmljZUhlYWx0aEVudW1lcmF0aW9uIiB0 +eXBlPSJ0bnM6RGV2aWNlSGVhbHRoRW51bWVyYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkRldmljZUhlYWx0aEVudW1lcmF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXZpY2VIZWFsdGhFbnVtZXJhdGlvbiIgdHlwZT0i +dG5zOkRldmljZUhlYWx0aEVudW1lcmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZkRldmljZUhlYWx0aEVudW1lcmF0aW9uIiB0eXBlPSJ0bnM6 +TGlzdE9mRGV2aWNlSGVhbHRoRW51bWVyYXRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkZldGNoUmVzdWx0RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJGZXRjaFJlc3VsdERhdGFUeXBlIiB0eXBlPSJ0bnM6RmV0Y2hS +ZXN1bHREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRmV0Y2hS +ZXN1bHREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRmV0Y2hSZXN1bHREYXRhVHlwZSIgdHlwZT0idG5zOkZldGNoUmVzdWx0RGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZkZldGNoUmVzdWx0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZGZXRjaFJlc3VsdERh +dGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJUcmFuc2ZlclJlc3VsdEVycm9yRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmV0Y2hS +ZXN1bHREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdGF0dXMiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNzIiB0eXBlPSJ1YTpEaWFnbm9zdGljSW5m +byIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5j +ZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVyUmVzdWx0RXJyb3JE +YXRhVHlwZSIgdHlwZT0idG5zOlRyYW5zZmVyUmVzdWx0RXJyb3JEYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHRFcnJvckRhdGFUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclJlc3Vs +dEVycm9yRGF0YVR5cGUiIHR5cGU9InRuczpUcmFuc2ZlclJlc3VsdEVycm9yRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlRyYW5zZmVyUmVzdWx0RXJyb3JEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlRyYW5z +ZmVyUmVzdWx0RXJyb3JEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmZXJSZXN1bHREYXRhRGF0YVR5cGUiPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6RmV0Y2hSZXN1bHREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXF1ZW5jZU51bWJlciIgdHlwZT0ieHM6aW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kT2ZSZXN1bHRz +IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUGFyYW1ldGVyRGVmcyIgdHlwZT0idG5zOkxpc3RPZlBhcmFtZXRlclJlc3VsdERh +dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNl +cXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJSZXN1bHRE +YXRhRGF0YVR5cGUiIHR5cGU9InRuczpUcmFuc2ZlclJlc3VsdERhdGFEYXRhVHlwZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHREYXRhRGF0YVR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVyUmVz +dWx0RGF0YURhdGFUeXBlIiB0eXBlPSJ0bnM6VHJhbnNmZXJSZXN1bHREYXRhRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlRyYW5zZmVyUmVzdWx0RGF0YURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVHJhbnNm +ZXJSZXN1bHREYXRhRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlBhcmFtZXRlclJlc3VsdERhdGFUeXBlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlUGF0aCIgdHlwZT0idWE6TGlz +dE9mUXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNzIiB0eXBlPSJ1 +YTpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQ +YXJhbWV0ZXJSZXN1bHREYXRhVHlwZSIgdHlwZT0idG5zOlBhcmFtZXRlclJlc3VsdERhdGFUeXBl +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQYXJhbWV0ZXJSZXN1bHREYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyYW1l +dGVyUmVzdWx0RGF0YVR5cGUiIHR5cGU9InRuczpQYXJhbWV0ZXJSZXN1bHREYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mUGFyYW1ldGVyUmVzdWx0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQYXJhbWV0ZXJS +ZXN1bHREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2lt +cGxlVHlwZSAgbmFtZT0iU29mdHdhcmVWZXJzaW9uRmlsZVR5cGUiPg0KICAgIDx4czpyZXN0cmlj +dGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJy +ZW50XzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBlbmRpbmdfMSIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRmFsbGJhY2tfMiIgLz4NCiAgICA8L3hzOnJlc3Ry +aWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNvZnR3YXJl +VmVyc2lvbkZpbGVUeXBlIiB0eXBlPSJ0bnM6U29mdHdhcmVWZXJzaW9uRmlsZVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlNvZnR3YXJlVmVyc2lvbkZpbGVUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb2Z0d2FyZVZlcnNp +b25GaWxlVHlwZSIgdHlwZT0idG5zOlNvZnR3YXJlVmVyc2lvbkZpbGVUeXBlIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlNvZnR3YXJlVmVyc2lvbkZp +bGVUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU29mdHdhcmVWZXJzaW9uRmlsZVR5cGUiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlVwZGF0ZUJl +aGF2aW9yIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAg +IDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iVXBkYXRlQmVoYXZpb3IiIHR5cGU9InRuczpVcGRhdGVCZWhhdmlvciIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVXBkYXRlQmVoYXZpb3IiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZUJlaGF2aW9yIiB0eXBlPSJ0bnM6VXBk +YXRlQmVoYXZpb3IiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mVXBkYXRlQmVoYXZpb3IiIHR5cGU9InRuczpMaXN0T2ZVcGRhdGVCZWhhdmlvciIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KPC94czpzY2hlbWE+ + + + + NamespaceUri + + i=68 + ns=1;i=6423 + + + http://opcfoundation.org/UA/DI/Types.xsd + + + + Deprecated + + i=68 + ns=1;i=6423 + + + true + + + + FetchResultDataType + + i=69 + ns=1;i=6423 + + + //xs:element[@name='FetchResultDataType'] + + + + TransferResultErrorDataType + + i=69 + ns=1;i=6423 + + + //xs:element[@name='TransferResultErrorDataType'] + + + + TransferResultDataDataType + + i=69 + ns=1;i=6423 + + + //xs:element[@name='TransferResultDataDataType'] + + + + ParameterResultDataType + + i=69 + ns=1;i=6423 + + + //xs:element[@name='ParameterResultDataType'] + + + + Default JSON + + ns=1;i=6522 + i=76 + + + + Default JSON + + ns=1;i=15888 + i=76 + + + + Default JSON + + ns=1;i=15889 + i=76 + + + + Default JSON + + ns=1;i=6525 + i=76 + + + diff --git a/examples/server/NodeSet2_server/generate_cert.go b/examples/server/NodeSet2_server/generate_cert.go new file mode 100644 index 00000000..d5facc71 --- /dev/null +++ b/examples/server/NodeSet2_server/generate_cert.go @@ -0,0 +1,107 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Generate a self-signed X.509 certificate for a TLS server. Outputs to +// 'cert.pem' and 'key.pem' and will overwrite existing files. + +// Based on src/crypto/tls/generate_cert.go from the Go SDK +// Modified by the Gopcua Authors for use in creating an OPC-UA compliant client certificate + +package main + +import ( + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "net/url" + "os" + "time" +) + +func GenerateCert(host []string, rsaBits int, validFor time.Duration) (certPEM, keyPEM []byte, err error) { + if len(host) == 0 { + return nil, nil, fmt.Errorf("missing required host parameter") + } + if rsaBits == 0 { + rsaBits = 2048 + } + + priv, err := rsa.GenerateKey(rand.Reader, rsaBits) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate private key: %s", err) + } + + notBefore := time.Now() + notAfter := notBefore.Add(validFor) + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + CommonName: "Gopcua Server", + }, + NotBefore: notBefore, + NotAfter: notAfter, + + KeyUsage: x509.KeyUsageContentCommitment | x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageDataEncipherment | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + BasicConstraintsValid: true, + } + + for _, h := range host { + if ip := net.ParseIP(h); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, h) + } + if uri, err := url.Parse(h); err == nil { + template.URIs = append(template.URIs, uri) + } + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv) + if err != nil { + return nil, nil, fmt.Errorf("failed to create certificate: %s", err) + } + + return pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}), pem.EncodeToMemory(pemBlockForKey(priv)), nil +} + +func publicKey(priv interface{}) interface{} { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &k.PublicKey + case *ecdsa.PrivateKey: + return &k.PublicKey + default: + return nil + } +} + +func pemBlockForKey(priv interface{}) *pem.Block { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} + case *ecdsa.PrivateKey: + b, err := x509.MarshalECPrivateKey(k) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to marshal ECDSA private key: %v", err) + os.Exit(2) + } + return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + default: + return nil + } +} diff --git a/examples/server/NodeSet2_server/server.go b/examples/server/NodeSet2_server/server.go new file mode 100644 index 00000000..dadfe8d4 --- /dev/null +++ b/examples/server/NodeSet2_server/server.go @@ -0,0 +1,201 @@ +// Copyright 2018-2020 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package main + +import ( + "context" + "crypto/rsa" + "crypto/tls" + "encoding/xml" + "flag" + "io" + "log" + "os" + "os/signal" + "time" + + "github.com/gopcua/opcua/debug" + "github.com/gopcua/opcua/schema" + "github.com/gopcua/opcua/server" + "github.com/gopcua/opcua/ua" +) + +var ( + endpoint = flag.String("endpoint", "0.0.0.0", "OPC UA Endpoint URL") + port = flag.Int("port", 4840, "OPC UA Endpoint port") + certfile = flag.String("cert", "cert.pem", "Path to certificate file") + keyfile = flag.String("key", "key.pem", "Path to PEM Private Key file") + gencert = flag.Bool("gen-cert", false, "Generate a new certificate") +) + +type Logger int + +func (l Logger) Debug(msg string, args ...any) { + if l < 0 { + log.Printf(msg, args...) + } +} +func (l Logger) Info(msg string, args ...any) { + if l < 1 { + log.Printf(msg, args...) + } +} +func (l Logger) Warn(msg string, args ...any) { + if l < 2 { + log.Printf(msg, args...) + } +} +func (l Logger) Error(msg string, args ...any) { + if l < 3 { + log.Printf(msg, args...) + } +} + +func main() { + flag.BoolVar(&debug.Enable, "debug", false, "enable debug logging") + flag.Parse() + log.SetFlags(0) + + var opts []server.Option + + // Set your security options. + opts = append(opts, + server.EnableSecurity("None", ua.MessageSecurityModeNone), + /* + These security modes are not implemented yet. + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSignAndEncrypt), + */ + ) + + // Set your user authentication options. + opts = append(opts, + server.EnableAuthMode(ua.UserTokenTypeAnonymous), + /* + These authentication modes are not implemented yet + server.EnableAuthMode(ua.UserTokenTypeUserName), + server.EnableAuthMode(ua.UserTokenTypeCertificate), + */ + // server.EnableAuthWithoutEncryption(), // Dangerous and not recommended, shown for illustration only + ) + + // Here we're automatically adding the hostname and localhost to the endpoint list. + // Some clients are picky about the endpoint matching the connection url, so be sure to add any addresses/hostnames that + // clients will use to connect to the server. + // + // be sure the hostname(s) also match the certificate the server is going to use. + hostname, err := os.Hostname() + if err != nil { + log.Fatalf("Error getting host name %v", err) + } + + opts = append(opts, + server.EndPoint(*endpoint, *port), + server.EndPoint("localhost", *port), + server.EndPoint(hostname, *port), + ) + + // the server.SetLogger takes a server.Logger interface. This interface is met by + // the slog.Logger{}. A simple wrapper could be made for other loggers if they don't already + // meet the interface. + logger := Logger(2) + opts = append(opts, + server.SetLogger(logger), + ) + + // Here is an example of certificate generation. This is not necessary if you already have a certificate. + if *gencert { + // it is important that the certificate is generated with the correct hostname/IP address URIs + // or the clients may not accept the certificate. + endpoints := []string{ + "localhost", + hostname, + *endpoint, + } + + c, k, err := GenerateCert(endpoints, 4096, time.Minute*60*24*365*10) + if err != nil { + log.Fatalf("problem creating cert: %v", err) + } + err = os.WriteFile(*certfile, c, 0) + if err != nil { + log.Fatalf("problem writing cert: %v", err) + } + err = os.WriteFile(*keyfile, k, 0) + if err != nil { + log.Fatalf("problem writing key: %v", err) + } + + } + + var cert []byte + if *gencert || (*certfile != "" && *keyfile != "") { + log.Printf("Loading cert/key from %s/%s", *certfile, *keyfile) + c, err := tls.LoadX509KeyPair(*certfile, *keyfile) + if err != nil { + log.Printf("Failed to load certificate: %s", err) + } else { + pk, ok := c.PrivateKey.(*rsa.PrivateKey) + if !ok { + log.Fatalf("Invalid private key") + } + cert = c.Certificate[0] + opts = append(opts, server.PrivateKey(pk), server.Certificate(cert)) + } + } + + // Now that all the options are set, create the server. + // When the server is created, it will automatically create namespace 0 and populate it with + // the core opc ua nodes. + s := server.New(opts...) + + // Now we'll import our NodeSet2.xml file. + // These files often create additional namespaces and reference them assuming they + // stat at namespace 1. So you'll want to import the nodeset first, then add any custom namespaces + // after that. + + // first, we read the file and unmarshal it into a schema.UANodeSet struct. Then it can be imported + file, err := os.Open("Opc.Ua.Di.NodeSet2.xml") + if err != nil { + log.Fatalf("error opening nodeset file: %v", err) + } + node_data, err := io.ReadAll(file) + if err != nil { + log.Fatalf("error reading nodeset file: %v", err) + } + var nodes schema.UANodeSet + xml.Unmarshal(node_data, &nodes) + s.ImportNodeSet(&nodes) + + // At this point you can lookup any specific node by its nodeid to add references or modify it or whatever + // your heart desires + node := s.Node(ua.NewNumericNodeID(1, 15044)) + if node != nil { + log.Printf("Found node %v", node) + } + + // Start the server + if err := s.Start(context.Background()); err != nil { + log.Fatalf("Error starting server, exiting: %s", err) + } + defer s.Close() + + // catch ctrl-c and gracefully shutdown the server. + sigch := make(chan os.Signal, 1) + signal.Notify(sigch, os.Interrupt) + defer signal.Stop(sigch) + log.Printf("Press CTRL-C to exit") + + <-sigch + log.Printf("Shutting down the server...") +} diff --git a/examples/server/map_server/generate_cert.go b/examples/server/map_server/generate_cert.go new file mode 100644 index 00000000..d5facc71 --- /dev/null +++ b/examples/server/map_server/generate_cert.go @@ -0,0 +1,107 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Generate a self-signed X.509 certificate for a TLS server. Outputs to +// 'cert.pem' and 'key.pem' and will overwrite existing files. + +// Based on src/crypto/tls/generate_cert.go from the Go SDK +// Modified by the Gopcua Authors for use in creating an OPC-UA compliant client certificate + +package main + +import ( + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "net/url" + "os" + "time" +) + +func GenerateCert(host []string, rsaBits int, validFor time.Duration) (certPEM, keyPEM []byte, err error) { + if len(host) == 0 { + return nil, nil, fmt.Errorf("missing required host parameter") + } + if rsaBits == 0 { + rsaBits = 2048 + } + + priv, err := rsa.GenerateKey(rand.Reader, rsaBits) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate private key: %s", err) + } + + notBefore := time.Now() + notAfter := notBefore.Add(validFor) + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + CommonName: "Gopcua Server", + }, + NotBefore: notBefore, + NotAfter: notAfter, + + KeyUsage: x509.KeyUsageContentCommitment | x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageDataEncipherment | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + BasicConstraintsValid: true, + } + + for _, h := range host { + if ip := net.ParseIP(h); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, h) + } + if uri, err := url.Parse(h); err == nil { + template.URIs = append(template.URIs, uri) + } + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv) + if err != nil { + return nil, nil, fmt.Errorf("failed to create certificate: %s", err) + } + + return pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}), pem.EncodeToMemory(pemBlockForKey(priv)), nil +} + +func publicKey(priv interface{}) interface{} { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &k.PublicKey + case *ecdsa.PrivateKey: + return &k.PublicKey + default: + return nil + } +} + +func pemBlockForKey(priv interface{}) *pem.Block { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} + case *ecdsa.PrivateKey: + b, err := x509.MarshalECPrivateKey(k) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to marshal ECDSA private key: %v", err) + os.Exit(2) + } + return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + default: + return nil + } +} diff --git a/examples/server/map_server/server.go b/examples/server/map_server/server.go new file mode 100644 index 00000000..b4ce3a23 --- /dev/null +++ b/examples/server/map_server/server.go @@ -0,0 +1,245 @@ +// Copyright 2018-2020 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. +// +// This example program shows how to create a simple OPC UA server with data backed by a map. +// This allows you to easily create a server with a simple data model that can be updated from +// other parts of your application. This example also shows how to monitor the data for changes +// and how to trigger change notifications to clients when the data changes. + +package main + +import ( + "context" + "crypto/rsa" + "crypto/tls" + "flag" + "log" + "os" + "os/signal" + "time" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server" + "github.com/gopcua/opcua/ua" +) + +var ( + endpoint = flag.String("endpoint", "0.0.0.0", "OPC UA Endpoint URL") + port = flag.Int("port", 4840, "OPC UA Endpoint port") + certfile = flag.String("cert", "cert.pem", "Path to certificate file") + keyfile = flag.String("key", "key.pem", "Path to PEM Private Key file") + gencert = flag.Bool("gen-cert", false, "Generate a new certificate") +) + +type Logger int + +func (l Logger) Debug(msg string, args ...any) { + if l < 0 { + log.Printf(msg, args...) + } +} +func (l Logger) Info(msg string, args ...any) { + if l < 1 { + log.Printf(msg, args...) + } +} +func (l Logger) Warn(msg string, args ...any) { + if l < 2 { + log.Printf(msg, args...) + } +} +func (l Logger) Error(msg string, args ...any) { + if l < 3 { + log.Printf(msg, args...) + } +} + +func main() { + flag.Parse() + log.SetFlags(0) + + var opts []server.Option + + // Set your security options. + opts = append(opts, + server.EnableSecurity("None", ua.MessageSecurityModeNone), + /* + These security modes are not implemented yet. + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSignAndEncrypt), + */ + ) + + // Set your user authentication options. + opts = append(opts, + server.EnableAuthMode(ua.UserTokenTypeAnonymous), + /* + These authentication modes are not implemented yet + server.EnableAuthMode(ua.UserTokenTypeUserName), + server.EnableAuthMode(ua.UserTokenTypeCertificate), + */ + // server.EnableAuthWithoutEncryption(), // Dangerous and not recommended, shown for illustration only + ) + + // Here we're automatically adding the hostname and localhost to the endpoint list. + // Some clients are picky about the endpoint matching the connection url, so be sure to add any addresses/hostnames that + // clients will use to connect to the server. + // + // be sure the hostname(s) also match the certificate the server is going to use. + hostname, err := os.Hostname() + if err != nil { + log.Fatalf("Error getting host name %v", err) + } + + opts = append(opts, + server.EndPoint(*endpoint, *port), + server.EndPoint("localhost", *port), + server.EndPoint(hostname, *port), + ) + + // the server.SetLogger takes a server.Logger interface. This interface is met by + // the slog.Logger{}. A simple wrapper could be made for other loggers if they don't already + // meet the interface and that is what we've done here. + logger := Logger(1) + opts = append(opts, + server.SetLogger(logger), + ) + + // Here is an example of certificate generation. This is not necessary if you already have a certificate. + if *gencert { + // it is important that the certificate is generated with the correct hostname/IP address URIs + // or the clients may not accept the certificate. + endpoints := []string{ + "localhost", + hostname, + *endpoint, + } + + c, k, err := GenerateCert(endpoints, 4096, time.Minute*60*24*365*10) + if err != nil { + log.Fatalf("problem creating cert: %v", err) + } + err = os.WriteFile(*certfile, c, 0) + if err != nil { + log.Fatalf("problem writing cert: %v", err) + } + err = os.WriteFile(*keyfile, k, 0) + if err != nil { + log.Fatalf("problem writing key: %v", err) + } + + } + + var cert []byte + if *gencert || (*certfile != "" && *keyfile != "") { + log.Printf("Loading cert/key from %s/%s", *certfile, *keyfile) + c, err := tls.LoadX509KeyPair(*certfile, *keyfile) + if err != nil { + log.Printf("Failed to load certificate: %s", err) + } else { + pk, ok := c.PrivateKey.(*rsa.PrivateKey) + if !ok { + log.Fatalf("Invalid private key") + } + cert = c.Certificate[0] + opts = append(opts, server.PrivateKey(pk), server.Certificate(cert)) + } + } + + // Now that all the options are set, create the server. + // When the server is created, it will automatically create namespace 0 and populate it with + // the core opc ua nodes. + s := server.New(opts...) + + // Create some map namespaces. These are backed by go map[string]any + // which may be more convenient for some use cases than the NodeNamespace which requires + // your application's data structure to match the opcua node model. + myMapNamespace1 := server.NewMapNamespace(s, "MyTestNamespace") + log.Printf("map namespace 1 added at index %d", myMapNamespace1.ID()) + myMapNamespace2 := server.NewMapNamespace(s, "SomeOtherNamespace") + log.Printf("map namespace 2 added at index %d", myMapNamespace2.ID()) + + // fill them with data. + myMapNamespace1.Data["Tag1"] = 123.4 + myMapNamespace1.Data["Tag2"] = 42 + myMapNamespace1.Data["Tag3.Tag4"] = "some string" + myMapNamespace1.Data["Tag5"] = true + myMapNamespace1.Data["Tag6"] = time.Now() + + myMapNamespace2.Data["Tag7"] = 56.78 + myMapNamespace2.Data["Tag8"] = 92 + myMapNamespace2.Data["Tag9"] = "different string" + myMapNamespace2.Data["Tag10"] = false + myMapNamespace2.Data["Tag11"] = time.Now().Add(time.Hour) + + // simulate a background process updating the data in the map namespace. + go func() { + updates := 0 + num := 42 + tag5 := true + time.Sleep(time.Second * 10) + for { + updates++ + num++ + // you can manually lock and change the value, then manually trigger the change notification + myMapNamespace1.Mu.Lock() + myMapNamespace1.Data["Tag2"] = num + myMapNamespace1.ChangeNotification("Tag2") + myMapNamespace1.Mu.Unlock() + if updates == 10 { + // or you can do it with the built-in functions. + // which handles the locking and triggering + tag5 = !tag5 + myMapNamespace1.SetValue("Tag5", tag5) + updates = 0 + } + time.Sleep(time.Second) + } + }() + + // simulate monitoring one of the namespaces for change events. + // this is how you would be notified when a write to the map + // occurs through the opc ua server + go func() { + for { + changed_key := <-myMapNamespace2.ExternalNotification + log.Printf("%s changed to %v", changed_key, myMapNamespace2.GetValue(changed_key)) + } + }() + + // add the namespaces to the server. If you want them to show up in a browse, you'll + // also have to add a reference to them (probably from the object node). + root_ns, _ := s.Namespace(0) + root_obj_node := root_ns.Objects() + + // then we add the namespace to the server and add a reference to it from the object node. + // the object node of the map namespace is a virtual node that contains all the "nodes" for each + // map key + root_obj_node.AddRef(myMapNamespace1.Objects(), id.HasComponent, true) + root_obj_node.AddRef(myMapNamespace2.Objects(), id.HasComponent, true) + + // Start the server + // Note that you can add namespaces before or after starting the server. + if err := s.Start(context.Background()); err != nil { + log.Fatalf("Error starting server, exiting: %s", err) + } + defer s.Close() + + // catch ctrl-c and gracefully shutdown the server. + sigch := make(chan os.Signal, 1) + signal.Notify(sigch, os.Interrupt) + defer signal.Stop(sigch) + log.Printf("Press CTRL-C to exit") + + <-sigch + log.Printf("Shutting down the server...") +} diff --git a/examples/server/node_server/generate_cert.go b/examples/server/node_server/generate_cert.go new file mode 100644 index 00000000..d5facc71 --- /dev/null +++ b/examples/server/node_server/generate_cert.go @@ -0,0 +1,107 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Generate a self-signed X.509 certificate for a TLS server. Outputs to +// 'cert.pem' and 'key.pem' and will overwrite existing files. + +// Based on src/crypto/tls/generate_cert.go from the Go SDK +// Modified by the Gopcua Authors for use in creating an OPC-UA compliant client certificate + +package main + +import ( + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "net/url" + "os" + "time" +) + +func GenerateCert(host []string, rsaBits int, validFor time.Duration) (certPEM, keyPEM []byte, err error) { + if len(host) == 0 { + return nil, nil, fmt.Errorf("missing required host parameter") + } + if rsaBits == 0 { + rsaBits = 2048 + } + + priv, err := rsa.GenerateKey(rand.Reader, rsaBits) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate private key: %s", err) + } + + notBefore := time.Now() + notAfter := notBefore.Add(validFor) + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + CommonName: "Gopcua Server", + }, + NotBefore: notBefore, + NotAfter: notAfter, + + KeyUsage: x509.KeyUsageContentCommitment | x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageDataEncipherment | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + BasicConstraintsValid: true, + } + + for _, h := range host { + if ip := net.ParseIP(h); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, h) + } + if uri, err := url.Parse(h); err == nil { + template.URIs = append(template.URIs, uri) + } + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv) + if err != nil { + return nil, nil, fmt.Errorf("failed to create certificate: %s", err) + } + + return pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}), pem.EncodeToMemory(pemBlockForKey(priv)), nil +} + +func publicKey(priv interface{}) interface{} { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &k.PublicKey + case *ecdsa.PrivateKey: + return &k.PublicKey + default: + return nil + } +} + +func pemBlockForKey(priv interface{}) *pem.Block { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} + case *ecdsa.PrivateKey: + b, err := x509.MarshalECPrivateKey(k) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to marshal ECDSA private key: %v", err) + os.Exit(2) + } + return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + default: + return nil + } +} diff --git a/examples/server/node_server/server.go b/examples/server/node_server/server.go new file mode 100644 index 00000000..f40ee000 --- /dev/null +++ b/examples/server/node_server/server.go @@ -0,0 +1,262 @@ +// Copyright 2018-2020 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package main + +import ( + "context" + "crypto/rsa" + "crypto/tls" + "flag" + "log" + "os" + "os/signal" + "time" + + "github.com/gopcua/opcua/debug" + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server" + "github.com/gopcua/opcua/server/attrs" + "github.com/gopcua/opcua/ua" +) + +var ( + endpoint = flag.String("endpoint", "0.0.0.0", "OPC UA Endpoint URL") + port = flag.Int("port", 4840, "OPC UA Endpoint port") + certfile = flag.String("cert", "cert.pem", "Path to certificate file") + keyfile = flag.String("key", "key.pem", "Path to PEM Private Key file") + gencert = flag.Bool("gen-cert", false, "Generate a new certificate") +) + +type Logger int + +func (l Logger) Debug(msg string, args ...any) { + if l < 0 { + log.Printf(msg, args...) + } +} +func (l Logger) Info(msg string, args ...any) { + if l < 1 { + log.Printf(msg, args...) + } +} +func (l Logger) Warn(msg string, args ...any) { + if l < 2 { + log.Printf(msg, args...) + } +} +func (l Logger) Error(msg string, args ...any) { + if l < 3 { + log.Printf(msg, args...) + } +} +func main() { + flag.BoolVar(&debug.Enable, "debug", false, "enable debug logging") + flag.Parse() + log.SetFlags(0) + + var opts []server.Option + + // Set your security options. + opts = append(opts, + server.EnableSecurity("None", ua.MessageSecurityModeNone), + /* + These security modes are not implemented yet. + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSignAndEncrypt), + */ + ) + + // Set your user authentication options. + opts = append(opts, + server.EnableAuthMode(ua.UserTokenTypeAnonymous), + /* + These authentication modes are not implemented yet + server.EnableAuthMode(ua.UserTokenTypeUserName), + server.EnableAuthMode(ua.UserTokenTypeCertificate), + */ + // server.EnableAuthWithoutEncryption(), // Dangerous and not recommended, shown for illustration only + ) + + // Here we're automatically adding the hostname and localhost to the endpoint list. + // Some clients are picky about the endpoint matching the connection url, so be sure to add any addresses/hostnames that + // clients will use to connect to the server. + // + // be sure the hostname(s) also match the certificate the server is going to use. + hostname, err := os.Hostname() + if err != nil { + log.Fatalf("Error getting host name %v", err) + } + + opts = append(opts, + server.EndPoint(*endpoint, *port), + server.EndPoint("localhost", *port), + server.EndPoint(hostname, *port), + ) + + // the server.SetLogger takes a server.Logger interface. This interface is met by + // the slog.Logger{}. A simple wrapper could be made for other loggers if they don't already + // meet the interface. + logger := Logger(1) + opts = append(opts, + server.SetLogger(logger), + ) + + // Here is an example of certificate generation. This is not necessary if you already have a certificate. + if *gencert { + // it is important that the certificate is generated with the correct hostname/IP address URIs + // or the clients may not accept the certificate. + endpoints := []string{ + "localhost", + hostname, + *endpoint, + } + + c, k, err := GenerateCert(endpoints, 4096, time.Minute*60*24*365*10) + if err != nil { + log.Fatalf("problem creating cert: %v", err) + } + err = os.WriteFile(*certfile, c, 0) + if err != nil { + log.Fatalf("problem writing cert: %v", err) + } + err = os.WriteFile(*keyfile, k, 0) + if err != nil { + log.Fatalf("problem writing key: %v", err) + } + + } + + var cert []byte + if *gencert || (*certfile != "" && *keyfile != "") { + log.Printf("Loading cert/key from %s/%s", *certfile, *keyfile) + c, err := tls.LoadX509KeyPair(*certfile, *keyfile) + if err != nil { + log.Printf("Failed to load certificate: %s", err) + } else { + pk, ok := c.PrivateKey.(*rsa.PrivateKey) + if !ok { + log.Fatalf("Invalid private key") + } + cert = c.Certificate[0] + opts = append(opts, server.PrivateKey(pk), server.Certificate(cert)) + } + } + + // Now that all the options are set, create the server. + // When the server is created, it will automatically create namespace 0 and populate it with + // the core opc ua nodes. + s := server.New(opts...) + + // add the namespaces to the server, and add a reference to them if desired. + // here we are choosing to add the namespaces to the root/object folder + // to do this we first need to get the root namespace object folder so we + // get the object node + root_ns, _ := s.Namespace(0) + root_obj_node := root_ns.Objects() + + // Start the server + // Note that you can add namespaces before or after starting the server. + if err := s.Start(context.Background()); err != nil { + log.Fatalf("Error starting server, exiting: %s", err) + } + defer s.Close() + + // Now we'll add a node namespace. This is a more traditional way to add nodes to the server + // and is more in line with the opc ua node model, but may be more cumbersome for some use cases. + nodeNS := server.NewNodeNameSpace(s, "NodeNamespace") + log.Printf("Node Namespace added at index %d", nodeNS.ID()) + + // add the reference for this namespace's root object folder to the server's root object folder + // but you can add a reference to whatever node(s) you need + nns_obj := nodeNS.Objects() + root_obj_node.AddRef(nns_obj, id.HasComponent, true) + + // Create some nodes for it. Here we are usin gthe AddNewVariableNode utility function to create a new variable node + // with an integer node ID that is automatically assigned. (ns=,s=) + // be sure to add the reference to the node somewhere if desired, or clients won't be able to browse it. + var1 := nodeNS.AddNewVariableNode("TestVar1", float32(123.45)) + nns_obj.AddRef(var1, id.HasComponent, true) + + // This node will have a string node id (ns=,s=TestVar2) + // your variable node's value can also return a ua.Variant from a function if you want to update the value dynamically + // here we are just incrementing a counter every time the value is read. + var2Value := int32(0) + var2 := nodeNS.AddNewVariableStringNode("TestVar2", func() *ua.Variant { var2Value++; return ua.MustVariant(var2Value) }) + nns_obj.AddRef(var2, id.HasComponent, true) + + // Now we'll add a node from scratch. This is a more manual way to add nodes to the server and gives you full + // control, but you'll have to build the node up with the correct attributes and references and then reference it from + // the parent node in the namespace if applicable. + var3 := server.NewNode( + ua.NewNumericNodeID(nodeNS.ID(), 12345), // you can use whatever node id you want here, whether it's numeric, string, guid, etc... + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("MyBrowseName")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(12.34) }, + ) + nodeNS.AddNode(var3) + nns_obj.AddRef(var3, id.HasComponent, true) + + // simulate a background process updating the data in the namespace. + go func() { + updates := 0 + num := 42 + time.Sleep(time.Second * 10) + for { + updates++ + num++ + + // get the current value of the variable + last_value := var1.Value().Value().(float32) + // and change it + last_value += 1 + + // wrap the new value in a DataValue and use that to update the Value attribute of the node + val := ua.DataValue{ + Value: ua.MustVariant(last_value), + SourceTimestamp: time.Now(), + EncodingMask: ua.DataValueValue | ua.DataValueSourceTimestamp, + } + var1.SetAttribute(ua.AttributeIDValue, val) + + // we also need to let the node namespace know that the value has changed so it can trigger the change notification + // and send the updated value to any subscribed clients. + nodeNS.ChangeNotification(var1.ID()) + + time.Sleep(time.Second) + } + }() + + // simulate monitoring one of the namespaces for change events. + // this is how you would be notified when a write to a node + // occurs through the opc ua server + go func() { + for { + changed_id := <-nodeNS.ExternalNotification + node := nodeNS.Node(changed_id) + value := node.Value().Value() + log.Printf("%s changed to %v", changed_id.String(), value) + } + }() + + // catch ctrl-c and gracefully shutdown the server. + sigch := make(chan os.Signal, 1) + signal.Notify(sigch, os.Interrupt) + defer signal.Stop(sigch) + log.Printf("Press CTRL-C to exit") + + <-sigch + log.Printf("Shutting down the server...") +} diff --git a/examples/server_test/generate_cert.go b/examples/server_test/generate_cert.go new file mode 100644 index 00000000..d39857e7 --- /dev/null +++ b/examples/server_test/generate_cert.go @@ -0,0 +1,107 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Generate a self-signed X.509 certificate for a TLS server. Outputs to +// 'cert.pem' and 'key.pem' and will overwrite existing files. + +// Based on src/crypto/tls/generate_cert.go from the Go SDK +// Modified by the Gopcua Authors for use in creating an OPC-UA compliant client certificate + +package main + +import ( + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "net/url" + "os" + "time" +) + +func GenerateCert(host []string, rsaBits int, validFor time.Duration) (certPEM, keyPEM []byte, err error) { + if len(host) == 0 { + return nil, nil, fmt.Errorf("missing required host parameter") + } + if rsaBits == 0 { + rsaBits = 2048 + } + + priv, err := rsa.GenerateKey(rand.Reader, rsaBits) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate private key: %s", err) + } + + notBefore := time.Now() + notAfter := notBefore.Add(validFor) + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + Organization: []string{"Gopcua Test Client"}, + }, + NotBefore: notBefore, + NotAfter: notAfter, + + KeyUsage: x509.KeyUsageContentCommitment | x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageDataEncipherment | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + BasicConstraintsValid: true, + } + + for _, h := range host { + if ip := net.ParseIP(h); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, h) + } + if uri, err := url.Parse(h); err == nil { + template.URIs = append(template.URIs, uri) + } + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv) + if err != nil { + return nil, nil, fmt.Errorf("failed to create certificate: %s", err) + } + + return pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}), pem.EncodeToMemory(pemBlockForKey(priv)), nil +} + +func publicKey(priv interface{}) interface{} { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &k.PublicKey + case *ecdsa.PrivateKey: + return &k.PublicKey + default: + return nil + } +} + +func pemBlockForKey(priv interface{}) *pem.Block { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} + case *ecdsa.PrivateKey: + b, err := x509.MarshalECPrivateKey(k) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to marshal ECDSA private key: %v", err) + os.Exit(2) + } + return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + default: + return nil + } +} diff --git a/examples/server_test/server.go b/examples/server_test/server.go new file mode 100644 index 00000000..468b512e --- /dev/null +++ b/examples/server_test/server.go @@ -0,0 +1,117 @@ +// Copyright 2018-2020 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package main + +import ( + "context" + "crypto/rsa" + "crypto/tls" + "flag" + "log" + "os" + "time" + + "github.com/gopcua/opcua/debug" + "github.com/gopcua/opcua/server" + "github.com/gopcua/opcua/ua" +) + +var ( + endpoint = flag.String("endpoint", "0.0.0.0", "OPC UA Endpoint URL") + port = flag.Int("port", 4840, "OPC UA Endpoint port") + certfile = flag.String("cert", "cert.pem", "Path to certificate file") + keyfile = flag.String("key", "key.pem", "Path to PEM Private Key file") + gencert = flag.Bool("gen-cert", true, "Generate a new certificate") +) + +func main() { + flag.BoolVar(&debug.Enable, "debug", false, "enable debug logging") + flag.Parse() + log.SetFlags(0) + + var opts []server.Option + + opts = append(opts, + server.EnableSecurity("None", ua.MessageSecurityModeNone), + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSignAndEncrypt), + ) + + opts = append(opts, + server.EnableAuthMode(ua.UserTokenTypeAnonymous), + server.EnableAuthMode(ua.UserTokenTypeUserName), + server.EnableAuthMode(ua.UserTokenTypeCertificate), + // server.EnableAuthWithoutEncryption(), // Dangerous and not recommended, shown for illustration only + ) + hostname, err := os.Hostname() + if err != nil { + log.Fatalf("Error getting host name %v", err) + } + + // not sure if a list of hostnames is better or adding endpoints to the options + endpoints := []string{ + "localhost", + hostname, + *endpoint, + } + + opts = append(opts, + server.EndPoint(*endpoint, *port), + server.EndPoint("localhost", *port), + server.EndPoint(hostname, *port), + ) + + if *gencert { + c, k, err := GenerateCert(endpoints, 4096, time.Minute*60*24*365*10) + if err != nil { + log.Fatalf("problem creating cert: %v", err) + } + err = os.WriteFile(*certfile, c, 0) + if err != nil { + log.Fatalf("problem writing cert: %v", err) + } + err = os.WriteFile(*keyfile, k, 0) + if err != nil { + log.Fatalf("problem writing key: %v", err) + } + + } + + var cert []byte + if *gencert || (*certfile != "" && *keyfile != "") { + log.Printf("Loading cert/key from %s/%s", *certfile, *keyfile) + c, err := tls.LoadX509KeyPair(*certfile, *keyfile) + if err != nil { + log.Printf("Failed to load certificate: %s", err) + } else { + pk, ok := c.PrivateKey.(*rsa.PrivateKey) + if !ok { + log.Fatalf("Invalid private key") + } + cert = c.Certificate[0] + opts = append(opts, server.PrivateKey(pk), server.Certificate(cert)) + } + } + + s := server.New(opts...) + + // Create a new node namespace. You can add namespaces before or after starting the server. + // Start the server + if err := s.Start(context.Background()); err != nil { + log.Fatalf("Error starting server, exiting: %s", err) + } + defer s.Close() + + select {} + +} diff --git a/go.mod b/go.mod index ffcc2965..6e9a0c2d 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,11 @@ module github.com/gopcua/opcua -go 1.20 +go 1.22.0 require ( + github.com/google/uuid v1.3.0 github.com/pascaldekloe/goe v0.1.1 - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 + golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d golang.org/x/term v0.8.0 ) diff --git a/go.sum b/go.sum index 3e6f34d0..2a3bdd41 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,9 @@ +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/pascaldekloe/goe v0.1.1 h1:Ah6WQ56rZONR3RW3qWa2NCZ6JAVvSpUcoLBaOmYFt9Q= github.com/pascaldekloe/goe v0.1.1/go.mod h1:KSyfaxQOh0HZPjDP1FL/kFtbqYqrALJTaMafFUIccqU= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d h1:0olWaB5pg3+oychR51GUVCEsGkeCU/2JxjBgIo4f3M0= +golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= diff --git a/id/id_gen.go b/id/id_gen.go index a8f8b7b7..21fa267e 100644 --- a/id/id_gen.go +++ b/id/id_gen.go @@ -16,136 +16,136 @@ func Name(id uint32) string { } const ( - Boolean = 1 - SByte = 2 - Byte = 3 - Int16 = 4 - UInt16 = 5 - Int32 = 6 - UInt32 = 7 - Int64 = 8 - UInt64 = 9 - Float = 10 - Double = 11 - String = 12 - DateTime = 13 - GUID = 14 - ByteString = 15 - XMLElement = 16 - NodeID = 17 - ExpandedNodeID = 18 - StatusCode = 19 - QualifiedName = 20 - LocalizedText = 21 - Structure = 22 - DataValue = 23 - BaseDataType = 24 - DiagnosticInfo = 25 - Number = 26 - Integer = 27 - UInteger = 28 - Enumeration = 29 - Image = 30 - References = 31 - NonHierarchicalReferences = 32 - HierarchicalReferences = 33 - HasChild = 34 - Organizes = 35 - HasEventSource = 36 - HasModellingRule = 37 - HasEncoding = 38 - HasDescription = 39 - HasTypeDefinition = 40 - GeneratesEvent = 41 - Aggregates = 44 - HasSubtype = 45 - HasProperty = 46 - HasComponent = 47 - HasNotifier = 48 - HasOrderedComponent = 49 - Decimal = 50 - FromState = 51 - ToState = 52 - HasCause = 53 - HasEffect = 54 - HasHistoricalConfiguration = 56 - BaseObjectType = 58 - FolderType = 61 - BaseVariableType = 62 - BaseDataVariableType = 63 - PropertyType = 68 - DataTypeDescriptionType = 69 - DataTypeDictionaryType = 72 - DataTypeSystemType = 75 - DataTypeEncodingType = 76 - ModellingRuleType = 77 - ModellingRule_Mandatory = 78 - ModellingRule_Optional = 80 - ModellingRule_ExposesItsArray = 83 - RootFolder = 84 - ObjectsFolder = 85 - TypesFolder = 86 - ViewsFolder = 87 - ObjectTypesFolder = 88 - VariableTypesFolder = 89 - DataTypesFolder = 90 - ReferenceTypesFolder = 91 - XMLSchema_TypeSystem = 92 - OPCBinarySchema_TypeSystem = 93 - PermissionType = 94 - AccessRestrictionType = 95 - RolePermissionType = 96 - DataTypeDefinition = 97 - StructureType = 98 - StructureDefinition = 99 - EnumDefinition = 100 - StructureField = 101 - EnumField = 102 - DataTypeDescriptionType_DataTypeVersion = 104 - DataTypeDescriptionType_DictionaryFragment = 105 - DataTypeDictionaryType_DataTypeVersion = 106 - DataTypeDictionaryType_NamespaceURI = 107 - HasSubStateMachine = 117 - NamingRuleType = 120 - DataTypeDefinition_Encoding_DefaultBinary = 121 - StructureDefinition_Encoding_DefaultBinary = 122 - EnumDefinition_Encoding_DefaultBinary = 123 - DataSetMetaDataType_Encoding_DefaultBinary = 124 - DataTypeDescription_Encoding_DefaultBinary = 125 - StructureDescription_Encoding_DefaultBinary = 126 - EnumDescription_Encoding_DefaultBinary = 127 - RolePermissionType_Encoding_DefaultBinary = 128 - HasArgumentDescription = 129 - HasOptionalInputArgumentDescription = 131 - IDType = 256 - NodeClass = 257 - Node = 258 - Node_Encoding_DefaultXML = 259 - Node_Encoding_DefaultBinary = 260 - ObjectNode = 261 - ObjectNode_Encoding_DefaultXML = 262 - ObjectNode_Encoding_DefaultBinary = 263 - ObjectTypeNode = 264 - ObjectTypeNode_Encoding_DefaultXML = 265 - ObjectTypeNode_Encoding_DefaultBinary = 266 - VariableNode = 267 - VariableNode_Encoding_DefaultXML = 268 - VariableNode_Encoding_DefaultBinary = 269 - VariableTypeNode = 270 - VariableTypeNode_Encoding_DefaultXML = 271 - VariableTypeNode_Encoding_DefaultBinary = 272 - ReferenceTypeNode = 273 - ReferenceTypeNode_Encoding_DefaultXML = 274 - ReferenceTypeNode_Encoding_DefaultBinary = 275 - MethodNode = 276 - MethodNode_Encoding_DefaultXML = 277 - MethodNode_Encoding_DefaultBinary = 278 - ViewNode = 279 - ViewNode_Encoding_DefaultXML = 280 - ViewNode_Encoding_DefaultBinary = 281 - DataTypeNode = 282 - DataTypeNode_Encoding_DefaultXML = 283 - DataTypeNode_Encoding_DefaultBinary = 284 + Boolean = 1 + SByte = 2 + Byte = 3 + Int16 = 4 + UInt16 = 5 + Int32 = 6 + UInt32 = 7 + Int64 = 8 + UInt64 = 9 + Float = 10 + Double = 11 + String = 12 + DateTime = 13 + GUID = 14 + ByteString = 15 + XMLElement = 16 + NodeID = 17 + ExpandedNodeID = 18 + StatusCode = 19 + QualifiedName = 20 + LocalizedText = 21 + Structure = 22 + DataValue = 23 + BaseDataType = 24 + DiagnosticInfo = 25 + Number = 26 + Integer = 27 + UInteger = 28 + Enumeration = 29 + Image = 30 + References = 31 + NonHierarchicalReferences = 32 + HierarchicalReferences = 33 + HasChild = 34 + Organizes = 35 + HasEventSource = 36 + HasModellingRule = 37 + HasEncoding = 38 + HasDescription = 39 + HasTypeDefinition = 40 + GeneratesEvent = 41 + Aggregates = 44 + HasSubtype = 45 + HasProperty = 46 + HasComponent = 47 + HasNotifier = 48 + HasOrderedComponent = 49 + Decimal = 50 + FromState = 51 + ToState = 52 + HasCause = 53 + HasEffect = 54 + HasHistoricalConfiguration = 56 + BaseObjectType = 58 + FolderType = 61 + BaseVariableType = 62 + BaseDataVariableType = 63 + PropertyType = 68 + DataTypeDescriptionType = 69 + DataTypeDictionaryType = 72 + DataTypeSystemType = 75 + DataTypeEncodingType = 76 + ModellingRuleType = 77 + ModellingRule_Mandatory = 78 + ModellingRule_Optional = 80 + ModellingRule_ExposesItsArray = 83 + RootFolder = 84 + ObjectsFolder = 85 + TypesFolder = 86 + ViewsFolder = 87 + ObjectTypesFolder = 88 + VariableTypesFolder = 89 + DataTypesFolder = 90 + ReferenceTypesFolder = 91 + XMLSchema_TypeSystem = 92 + OPCBinarySchema_TypeSystem = 93 + PermissionType = 94 + AccessRestrictionType = 95 + RolePermissionType = 96 + DataTypeDefinition = 97 + StructureType = 98 + StructureDefinition = 99 + EnumDefinition = 100 + StructureField = 101 + EnumField = 102 + DataTypeDescriptionType_DataTypeVersion = 104 + DataTypeDescriptionType_DictionaryFragment = 105 + DataTypeDictionaryType_DataTypeVersion = 106 + DataTypeDictionaryType_NamespaceURI = 107 + HasSubStateMachine = 117 + NamingRuleType = 120 + DataTypeDefinition_Encoding_DefaultBinary = 121 + StructureDefinition_Encoding_DefaultBinary = 122 + EnumDefinition_Encoding_DefaultBinary = 123 + DataSetMetaDataType_Encoding_DefaultBinary = 124 + DataTypeDescription_Encoding_DefaultBinary = 125 + StructureDescription_Encoding_DefaultBinary = 126 + EnumDescription_Encoding_DefaultBinary = 127 + RolePermissionType_Encoding_DefaultBinary = 128 + HasArgumentDescription = 129 + HasOptionalInputArgumentDescription = 131 + IDType = 256 + NodeClass = 257 + Node = 258 + Node_Encoding_DefaultXML = 259 + Node_Encoding_DefaultBinary = 260 + ObjectNode = 261 + ObjectNode_Encoding_DefaultXML = 262 + ObjectNode_Encoding_DefaultBinary = 263 + ObjectTypeNode = 264 + ObjectTypeNode_Encoding_DefaultXML = 265 + ObjectTypeNode_Encoding_DefaultBinary = 266 + VariableNode = 267 + VariableNode_Encoding_DefaultXML = 268 + VariableNode_Encoding_DefaultBinary = 269 + VariableTypeNode = 270 + VariableTypeNode_Encoding_DefaultXML = 271 + VariableTypeNode_Encoding_DefaultBinary = 272 + ReferenceTypeNode = 273 + ReferenceTypeNode_Encoding_DefaultXML = 274 + ReferenceTypeNode_Encoding_DefaultBinary = 275 + MethodNode = 276 + MethodNode_Encoding_DefaultXML = 277 + MethodNode_Encoding_DefaultBinary = 278 + ViewNode = 279 + ViewNode_Encoding_DefaultXML = 280 + ViewNode_Encoding_DefaultBinary = 281 + DataTypeNode = 282 + DataTypeNode_Encoding_DefaultXML = 283 + DataTypeNode_Encoding_DefaultBinary = 284 ReferenceNode = 285 ReferenceNode_Encoding_DefaultXML = 286 ReferenceNode_Encoding_DefaultBinary = 287 @@ -366,6 +366,8 @@ const ( BrowseNextResponse_Encoding_DefaultBinary = 536 RelativePathElement = 537 RelativePathElement_Encoding_DefaultXML = 538 + + RelativePathElement_Encoding_DefaultBinary = 539 RelativePath = 540 RelativePath_Encoding_DefaultXML = 541 diff --git a/node.go b/node.go index 2d083297..fb418999 100644 --- a/node.go +++ b/node.go @@ -241,7 +241,7 @@ func (n *Node) TranslateBrowsePathsToNodeIDs(ctx context.Context, pathNames []*u } var nodeID *ua.NodeID - err := n.c.Send(ctx, &req, func(i interface{}) error { + err := n.c.Send(ctx, &req, func(i ua.Response) error { if resp, ok := i.(*ua.TranslateBrowsePathsToNodeIDsResponse); ok { if len(resp.Results) == 0 { return ua.StatusBadUnexpectedError diff --git a/schema/Opc.Ua.NodeSet2.xml b/schema/Opc.Ua.NodeSet2.xml new file mode 100644 index 00000000..31710190 --- /dev/null +++ b/schema/Opc.Ua.NodeSet2.xml @@ -0,0 +1,72367 @@ + + + + + + + + + i=1 + i=2 + i=3 + i=4 + i=5 + i=6 + i=7 + i=8 + i=9 + i=10 + i=11 + i=13 + i=12 + i=15 + i=14 + i=16 + i=17 + i=18 + i=20 + i=21 + i=19 + i=22 + i=26 + i=27 + i=28 + i=47 + i=46 + i=35 + i=36 + i=48 + i=45 + i=40 + i=37 + i=38 + i=39 + i=53 + i=52 + i=51 + i=54 + i=9004 + i=9005 + i=17597 + i=9006 + i=15112 + i=17604 + i=17603 + + + Default Binary + + i=58 + + + + Default XML + + i=58 + + + + BaseDataType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.1 + + + + Number + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9 + + i=24 + + + + Integer + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.5 + + i=26 + + + + UInteger + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.10 + + i=26 + + + + Enumeration + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.5 + + i=24 + + + + + Boolean + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.2 + + i=24 + + + + SByte + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.9 + + i=27 + + + + Byte + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.11 + + i=28 + + + + Int16 + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.6 + + i=27 + + + + UInt16 + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.12 + + i=28 + + + + Int32 + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.7 + + i=27 + + + + UInt32 + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.14 + + i=28 + + + + Int64 + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.8 + + i=27 + + + + UInt64 + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.15 + + i=28 + + + + Float + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.4 + + i=26 + + + + Double + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.2 + + i=26 + + + + String + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.11 + + i=24 + + + + DateTime + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.4 + + i=24 + + + + Guid + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.6 + + i=24 + + + + ByteString + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.3 + + i=24 + + + + XmlElement + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.13 + + i=24 + + + + NodeId + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.8 + + i=24 + + + + ExpandedNodeId + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.9 + + i=24 + + + + StatusCode + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.14 + + i=24 + + + + QualifiedName + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.10 + + i=24 + + + + LocalizedText + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.7 + + i=24 + + + + Structure + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12 + + i=24 + + + + DataValue + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.5 + + i=24 + + + + DiagnosticInfo + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.8 + + i=24 + + + + Image + Base Info Image DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.3/#12.2.3.2 + + i=15 + + + + Decimal + Base Info Decimal DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.1 + + i=26 + + + + References + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.1 + + + + NonHierarchicalReferences + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.3 + + i=31 + + + + HierarchicalReferences + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.2 + + i=31 + + InverseHierarchicalReferences + + + HasChild + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.4 + + i=33 + + ChildOf + + + Organizes + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.6 + + i=33 + + OrganizedBy + + + HasEventSource + Address Space Source Hierarchy + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.14 + + i=33 + + EventSourceOf + + + HasModellingRule + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.11 + + i=32 + + ModellingRuleOf + + + HasEncoding + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.13 + + i=32 + + EncodingOf + + + HasDescription + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.1 + + i=32 + + DescriptionOf + + + HasTypeDefinition + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.12 + + i=32 + + TypeDefinitionOf + + + GeneratesEvent + Address Space Events 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.16 + + i=32 + + GeneratedBy + + + AlwaysGeneratesEvent + Address Space Events 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.17 + + i=41 + + AlwaysGeneratedBy + + + Aggregates + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.5 + + i=34 + + AggregatedBy + + + HasSubtype + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.10 + + i=34 + + SubtypeOf + + + HasProperty + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.9 + + i=44 + + PropertyOf + + + HasComponent + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.7 + + i=44 + + ComponentOf + + + HasNotifier + Address Space Notifier Hierarchy + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.15 + + i=36 + + NotifierOf + + + HasOrderedComponent + Base Info HasOrderedComponent + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.8 + + i=47 + + OrderedComponentOf + + + FromState + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.11 + + i=32 + + ToTransition + + + ToState + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.12 + + i=32 + + FromTransition + + + HasCause + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.13 + + i=32 + + MayBeCausedBy + + + HasEffect + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.14 + + i=32 + + MayBeEffectedBy + + + HasSubStateMachine + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.15 + + i=32 + + SubStateMachineOf + + + HasHistoricalConfiguration + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.2.3 + + i=44 + + HistoricalConfigurationOf + + + HasStructuredComponent + Base Info Subvariables of Structures + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.23 + + i=47 + + IsStructuredComponentOf + + + AssociatedWith + Base Info AssociatedWith + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.24 + + i=32 + + + + BaseObjectType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.2 + + + + FolderType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.6 + + i=58 + + + + BaseVariableType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.2 + + + + BaseDataVariableType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.4 + + i=62 + + + + PropertyType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.3 + + i=62 + + + + DataTypeDescriptionType + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.3 + + i=104 + i=105 + i=63 + + + + DataTypeVersion + + i=68 + i=80 + i=69 + + + + DictionaryFragment + + i=68 + i=80 + i=69 + + + + DataTypeDictionaryType + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.2 + + i=106 + i=107 + i=15001 + i=63 + + + + DataTypeVersion + + i=68 + i=80 + i=72 + + + + NamespaceUri + + i=68 + i=80 + i=72 + + + + Deprecated + + i=68 + i=80 + i=72 + + + + DataTypeSystemType + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.4 + + i=58 + + + + DataTypeEncodingType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.7 + + i=58 + + + + NamingRuleType + https://reference.opcfoundation.org/v104/Core/docs/Part3/8.29 + + i=12169 + i=29 + + + + The BrowseName must appear in all instances of the type. + + + The BrowseName may appear in an instance of the type. + + + The modelling rule defines a constraint and the BrowseName is not used in an instance of the type. + + + + + EnumValues + + i=68 + i=120 + + + + + + i=7616 + + + + 1 + + Mandatory + + + The BrowseName must appear in all instances of the type. + + + + + + + i=7616 + + + + 2 + + Optional + + + The BrowseName may appear in an instance of the type. + + + + + + + i=7616 + + + + 3 + + Constraint + + + The modelling rule defines a constraint and the BrowseName is not used in an instance of the type. + + + + + + + + + ModellingRuleType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.5 + + i=58 + + + + Mandatory + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.3.4 + + i=77 + + + + Optional + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.3.5 + + i=77 + + + + ExposesItsArray + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.3.3 + + i=77 + + + + OptionalPlaceholder + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.3.6 + + i=77 + + + + MandatoryPlaceholder + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.3.7 + + i=77 + + + + Root + Base Info Core Structure 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.2 + + i=61 + + + + Objects + Base Info Core Structure 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.4 + + i=84 + i=61 + + + + Types + Base Info Core Types Folders + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.5 + + i=84 + i=61 + + + + Views + Base Info Core Views Folder + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.3 + + i=84 + i=61 + + + + ObjectTypes + Base Info Core Types Folders + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.6 + + i=86 + i=58 + i=61 + + + + VariableTypes + Base Info Core Types Folders + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.7 + + i=86 + i=62 + i=61 + + + + DataTypes + Base Info Core Types Folders + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.9 + + i=86 + i=24 + i=61 + + + + ReferenceTypes + Base Info Core Types Folders + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.8 + + i=86 + i=31 + i=61 + + + + XML Schema + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.6 + + i=90 + i=75 + + + + OPC Binary + https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.5 + + i=90 + i=75 + + + + HasArgumentDescription + Address Space Method Meta Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.18 + + i=47 + + ArgumentDescriptionOf + + + HasOptionalInputArgumentDescription + Address Space Method Meta Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.19 + + i=129 + + OptionalInputArgumentDescriptionOf + + + http://opcfoundation.org/UA/ + + i=15958 + i=15959 + i=15960 + i=15961 + i=15962 + i=15963 + i=15964 + i=16134 + i=16135 + i=16136 + i=11715 + i=11616 + + + + NamespaceUri + + i=68 + i=15957 + + + http://opcfoundation.org/UA/ + + + + NamespaceVersion + + i=68 + i=15957 + + + 1.05.02 + + + + NamespacePublicationDate + + i=68 + i=15957 + + + 2022-11-01T00:00:00Z + + + + IsNamespaceSubset + + i=68 + i=15957 + + + false + + + + StaticNodeIdTypes + + i=68 + i=15957 + + + + 0 + + + + + StaticNumericNodeIdRange + + i=68 + i=15957 + + + + 1:2252 + 2270 + 2273 + 2280 + 2283 + 2291:2293 + 2297:2734 + 2738:2991 + 2995 + 2998:3703 + 3710:11191 + 11194:11195 + 11202:11241 + 11243:11272 + 11276:11280 + 11284:11311 + 11315:11491 + 11495:11501 + 11503:11701 + 11706 + 11708 + 11716:12164 + 12169:12748 + 12752:12872 + 12875:12884 + 12888:12910 + 12912:14414 + 14416:15003 + 15005:15605 + 15607:16300 + 16306:17633 + 17635:19090 + 19092:24094 + 24102:24103 + 24105:31915 + 31917:2147483647 + + + + + StaticStringNodeIdPattern + + i=68 + i=15957 + + + + + + + DefaultRolePermissions + + i=68 + i=15957 + + + + DefaultUserRolePermissions + + i=68 + i=15957 + + + + DefaultAccessRestrictions + + i=68 + i=15957 + + + + NodeVersion + + i=68 + + + + ViewVersion + + i=68 + + + + Icon + + i=68 + + + + LocalTime + + i=68 + + + + AllowNulls + + i=68 + + + + ValueAsText + + i=68 + + + + MaxStringLength + + i=68 + + + + MaxCharacters + + i=68 + + + + MaxByteStringLength + + i=68 + + + + MaxArrayLength + + i=68 + + + + EngineeringUnits + + i=68 + + + + EnumStrings + + i=68 + + + + EnumValues + + i=68 + + + + OptionSetValues + + i=68 + + + + OptionSetLength + + i=68 + + + + InputArguments + + i=68 + + + + OutputArguments + + i=68 + + + + DefaultInstanceBrowseName + + i=68 + + + + ImageBMP + Base Info Image DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.3/#12.2.3.3 + + i=30 + + + + ImageGIF + Base Info Image DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.3/#12.2.3.4 + + i=30 + + + + ImageJPG + Base Info Image DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.3/#12.2.3.5 + + i=30 + + + + ImagePNG + Base Info Image DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.3/#12.2.3.6 + + i=30 + + + + AudioDataType + Base Info Audio Type + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.3/#12.2.3.1 + + i=15 + + + + Union + Base Info OptionSet DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.12 + + i=22 + + + + + UriString + Base Info UriString + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.39 + + i=12 + + + + ServerType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.1 + + i=2005 + i=2006 + i=15003 + i=2007 + i=2008 + i=2742 + i=12882 + i=17612 + i=2009 + i=2010 + i=2011 + i=2012 + i=11527 + i=11489 + i=12871 + i=12746 + i=12883 + i=58 + + + + ServerArray + + i=68 + i=78 + i=2004 + + + + NamespaceArray + + i=68 + i=78 + i=2004 + + + + UrisVersion + + i=68 + i=80 + i=2004 + + + + ServerStatus + + i=3074 + i=3075 + i=3076 + i=3077 + i=3084 + i=3085 + i=2138 + i=78 + i=2004 + + + + StartTime + + i=63 + i=78 + i=2007 + + + + CurrentTime + + i=63 + i=78 + i=2007 + + + + State + + i=63 + i=78 + i=2007 + + + + BuildInfo + + i=3078 + i=3079 + i=3080 + i=3081 + i=3082 + i=3083 + i=3051 + i=78 + i=2007 + + + + ProductUri + + i=63 + i=78 + i=3077 + + + + ManufacturerName + + i=63 + i=78 + i=3077 + + + + ProductName + + i=63 + i=78 + i=3077 + + + + SoftwareVersion + + i=63 + i=78 + i=3077 + + + + BuildNumber + + i=63 + i=78 + i=3077 + + + + BuildDate + + i=63 + i=78 + i=3077 + + + + SecondsTillShutdown + + i=63 + i=78 + i=2007 + + + + ShutdownReason + + i=63 + i=78 + i=2007 + + + + ServiceLevel + + i=68 + i=78 + i=2004 + + + + Auditing + + i=68 + i=78 + i=2004 + + + + EstimatedReturnTime + + i=68 + i=80 + i=2004 + + + + LocalTime + + i=68 + i=80 + i=2004 + + + + ServerCapabilities + + i=3086 + i=3087 + i=3088 + i=3089 + i=3090 + i=3091 + i=3092 + i=3093 + i=3094 + i=2013 + i=78 + i=2004 + + + + ServerProfileArray + + i=68 + i=78 + i=2009 + + + + LocaleIdArray + + i=68 + i=78 + i=2009 + + + + MinSupportedSampleRate + + i=68 + i=78 + i=2009 + + + + MaxBrowseContinuationPoints + + i=68 + i=78 + i=2009 + + + + MaxQueryContinuationPoints + + i=68 + i=78 + i=2009 + + + + MaxHistoryContinuationPoints + + i=68 + i=78 + i=2009 + + + + SoftwareCertificates + + i=68 + i=78 + i=2009 + + + + ModellingRules + + i=61 + i=78 + i=2009 + + + + AggregateFunctions + + i=61 + i=78 + i=2009 + + + + ServerDiagnostics + + i=3095 + i=3110 + i=3111 + i=3114 + i=2020 + i=78 + i=2004 + + + + ServerDiagnosticsSummary + + i=3096 + i=3097 + i=3098 + i=3099 + i=3100 + i=3101 + i=3102 + i=3104 + i=3105 + i=3106 + i=3107 + i=3108 + i=2150 + i=78 + i=2010 + + + + ServerViewCount + + i=63 + i=78 + i=3095 + + + + CurrentSessionCount + + i=63 + i=78 + i=3095 + + + + CumulatedSessionCount + + i=63 + i=78 + i=3095 + + + + SecurityRejectedSessionCount + + i=63 + i=78 + i=3095 + + + + RejectedSessionCount + + i=63 + i=78 + i=3095 + + + + SessionTimeoutCount + + i=63 + i=78 + i=3095 + + + + SessionAbortCount + + i=63 + i=78 + i=3095 + + + + PublishingIntervalCount + + i=63 + i=78 + i=3095 + + + + CurrentSubscriptionCount + + i=63 + i=78 + i=3095 + + + + CumulatedSubscriptionCount + + i=63 + i=78 + i=3095 + + + + SecurityRejectedRequestsCount + + i=63 + i=78 + i=3095 + + + + RejectedRequestsCount + + i=63 + i=78 + i=3095 + + + + SubscriptionDiagnosticsArray + + i=2171 + i=78 + i=2010 + + + + SessionsDiagnosticsSummary + + i=3112 + i=3113 + i=2026 + i=78 + i=2010 + + + + SessionDiagnosticsArray + + i=2196 + i=78 + i=3111 + + + + SessionSecurityDiagnosticsArray + + i=2243 + i=78 + i=3111 + + + + EnabledFlag + + i=68 + i=78 + i=2010 + + + + VendorServerInfo + + i=2033 + i=78 + i=2004 + + + + ServerRedundancy + + i=3115 + i=2034 + i=78 + i=2004 + + + + RedundancySupport + + i=68 + i=78 + i=2012 + + + + Namespaces + + i=11645 + i=80 + i=2004 + + + + GetMonitoredItems + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.1 + + i=11490 + i=11491 + i=80 + i=2004 + + + + InputArguments + + i=68 + i=78 + i=11489 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=11489 + + + + + + i=297 + + + + ServerHandles + + i=7 + + 1 + + 0 + + + + + + + i=297 + + + + ClientHandles + + i=7 + + 1 + + 0 + + + + + + + + + ResendData + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.2 + + i=12872 + i=80 + i=2004 + + + + InputArguments + + i=68 + i=78 + i=12871 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + SetSubscriptionDurable + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.3 + + i=12747 + i=12748 + i=80 + i=2004 + + + + InputArguments + + i=68 + i=78 + i=12746 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + i=297 + + + + LifetimeInHours + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=12746 + + + + + + i=297 + + + + RevisedLifetimeInHours + + i=7 + + -1 + + + + + + + + + RequestServerStateChange + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.4 + + i=12884 + i=80 + i=2004 + + + + InputArguments + + i=68 + i=78 + i=12883 + + + + + + i=297 + + + + State + + i=852 + + -1 + + + + + + + i=297 + + + + EstimatedReturnTime + + i=13 + + -1 + + + + + + + i=297 + + + + SecondsTillShutdown + + i=7 + + -1 + + + + + + + i=297 + + + + Reason + + i=21 + + -1 + + + + + + + i=297 + + + + Restart + + i=1 + + -1 + + + + + + + + + ServerCapabilitiesType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.2 + + i=2014 + i=2016 + i=2017 + i=2732 + i=2733 + i=2734 + i=3049 + i=11549 + i=11550 + i=12910 + i=11551 + i=2019 + i=2754 + i=11562 + i=16295 + i=24088 + i=24089 + i=24090 + i=24091 + i=24103 + i=24092 + i=24093 + i=31770 + i=24094 + i=58 + + + + ServerProfileArray + + i=68 + i=78 + i=2013 + + + + LocaleIdArray + + i=68 + i=78 + i=2013 + + + + MinSupportedSampleRate + + i=68 + i=78 + i=2013 + + + + MaxBrowseContinuationPoints + + i=68 + i=78 + i=2013 + + + + MaxQueryContinuationPoints + + i=68 + i=78 + i=2013 + + + + MaxHistoryContinuationPoints + + i=68 + i=78 + i=2013 + + + + SoftwareCertificates + + i=68 + i=78 + i=2013 + + + + MaxArrayLength + + i=68 + i=80 + i=2013 + + + + MaxStringLength + + i=68 + i=80 + i=2013 + + + + MaxByteStringLength + + i=68 + i=80 + i=2013 + + + + OperationLimits + + i=11564 + i=80 + i=2013 + + + + ModellingRules + + i=61 + i=78 + i=2013 + + + + AggregateFunctions + + i=61 + i=78 + i=2013 + + + + <VendorCapability> + + i=2137 + i=11508 + i=2013 + + + + RoleSet + + i=16296 + i=16299 + i=15607 + i=80 + i=2013 + + + + AddRole + + i=16297 + i=16298 + i=78 + i=16295 + + + + InputArguments + + i=68 + i=78 + i=16296 + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16296 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + RemoveRole + + i=16300 + i=78 + i=16295 + + + + InputArguments + + i=68 + i=78 + i=16299 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + MaxSessions + + i=68 + i=80 + i=2013 + + + + MaxSubscriptions + + i=68 + i=80 + i=2013 + + + + MaxMonitoredItems + + i=68 + i=80 + i=2013 + + + + MaxSubscriptionsPerSession + + i=68 + i=80 + i=2013 + + + + MaxMonitoredItemsPerSubscription + + i=68 + i=80 + i=2013 + + + + MaxSelectClauseParameters + + i=68 + i=80 + i=2013 + + + + MaxWhereClauseParameters + + i=68 + i=80 + i=2013 + + + + MaxMonitoredItemsQueueSize + + i=68 + i=80 + i=2013 + + + + ConformanceUnits + + i=68 + i=80 + i=2013 + + + + ServerDiagnosticsType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.3 + + i=2021 + i=2022 + i=2023 + i=2744 + i=2025 + i=58 + + + + ServerDiagnosticsSummary + + i=3116 + i=3117 + i=3118 + i=3119 + i=3120 + i=3121 + i=3122 + i=3124 + i=3125 + i=3126 + i=3127 + i=3128 + i=2150 + i=78 + i=2020 + + + + ServerViewCount + + i=63 + i=78 + i=2021 + + + + CurrentSessionCount + + i=63 + i=78 + i=2021 + + + + CumulatedSessionCount + + i=63 + i=78 + i=2021 + + + + SecurityRejectedSessionCount + + i=63 + i=78 + i=2021 + + + + RejectedSessionCount + + i=63 + i=78 + i=2021 + + + + SessionTimeoutCount + + i=63 + i=78 + i=2021 + + + + SessionAbortCount + + i=63 + i=78 + i=2021 + + + + PublishingIntervalCount + + i=63 + i=78 + i=2021 + + + + CurrentSubscriptionCount + + i=63 + i=78 + i=2021 + + + + CumulatedSubscriptionCount + + i=63 + i=78 + i=2021 + + + + SecurityRejectedRequestsCount + + i=63 + i=78 + i=2021 + + + + RejectedRequestsCount + + i=63 + i=78 + i=2021 + + + + SamplingIntervalDiagnosticsArray + + i=2164 + i=80 + i=2020 + + + + SubscriptionDiagnosticsArray + + i=2171 + i=78 + i=2020 + + + + SessionsDiagnosticsSummary + + i=3129 + i=3130 + i=2026 + i=78 + i=2020 + + + + SessionDiagnosticsArray + + i=2196 + i=78 + i=2744 + + + + SessionSecurityDiagnosticsArray + + i=2243 + i=78 + i=2744 + + + + EnabledFlag + + i=68 + i=78 + i=2020 + + + + SessionsDiagnosticsSummaryType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.4 + + i=2027 + i=2028 + i=12097 + i=58 + + + + SessionDiagnosticsArray + + i=2196 + i=78 + i=2026 + + + + SessionSecurityDiagnosticsArray + + i=2243 + i=78 + i=2026 + + + + <ClientName> + + i=12098 + i=12142 + i=12152 + i=2029 + i=11508 + i=2026 + + + + SessionDiagnostics + + i=12099 + i=12100 + i=12101 + i=12102 + i=12103 + i=12104 + i=12105 + i=12106 + i=12107 + i=12108 + i=12109 + i=12110 + i=12111 + i=12112 + i=12113 + i=12114 + i=12115 + i=12116 + i=12117 + i=12118 + i=12119 + i=12120 + i=12121 + i=12122 + i=12123 + i=12124 + i=12125 + i=12126 + i=12127 + i=12128 + i=12129 + i=12130 + i=12131 + i=12132 + i=12133 + i=12134 + i=12135 + i=12136 + i=12137 + i=12138 + i=12139 + i=12140 + i=12141 + i=2197 + i=78 + i=12097 + + + + SessionId + + i=63 + i=78 + i=12098 + + + + SessionName + + i=63 + i=78 + i=12098 + + + + ClientDescription + + i=63 + i=78 + i=12098 + + + + ServerUri + + i=63 + i=78 + i=12098 + + + + EndpointUrl + + i=63 + i=78 + i=12098 + + + + LocaleIds + + i=63 + i=78 + i=12098 + + + + ActualSessionTimeout + + i=63 + i=78 + i=12098 + + + + MaxResponseMessageSize + + i=63 + i=78 + i=12098 + + + + ClientConnectionTime + + i=63 + i=78 + i=12098 + + + + ClientLastContactTime + + i=63 + i=78 + i=12098 + + + + CurrentSubscriptionsCount + + i=63 + i=78 + i=12098 + + + + CurrentMonitoredItemsCount + + i=63 + i=78 + i=12098 + + + + CurrentPublishRequestsInQueue + + i=63 + i=78 + i=12098 + + + + TotalRequestCount + + i=63 + i=78 + i=12098 + + + + UnauthorizedRequestCount + + i=63 + i=78 + i=12098 + + + + ReadCount + + i=63 + i=78 + i=12098 + + + + HistoryReadCount + + i=63 + i=78 + i=12098 + + + + WriteCount + + i=63 + i=78 + i=12098 + + + + HistoryUpdateCount + + i=63 + i=78 + i=12098 + + + + CallCount + + i=63 + i=78 + i=12098 + + + + CreateMonitoredItemsCount + + i=63 + i=78 + i=12098 + + + + ModifyMonitoredItemsCount + + i=63 + i=78 + i=12098 + + + + SetMonitoringModeCount + + i=63 + i=78 + i=12098 + + + + SetTriggeringCount + + i=63 + i=78 + i=12098 + + + + DeleteMonitoredItemsCount + + i=63 + i=78 + i=12098 + + + + CreateSubscriptionCount + + i=63 + i=78 + i=12098 + + + + ModifySubscriptionCount + + i=63 + i=78 + i=12098 + + + + SetPublishingModeCount + + i=63 + i=78 + i=12098 + + + + PublishCount + + i=63 + i=78 + i=12098 + + + + RepublishCount + + i=63 + i=78 + i=12098 + + + + TransferSubscriptionsCount + + i=63 + i=78 + i=12098 + + + + DeleteSubscriptionsCount + + i=63 + i=78 + i=12098 + + + + AddNodesCount + + i=63 + i=78 + i=12098 + + + + AddReferencesCount + + i=63 + i=78 + i=12098 + + + + DeleteNodesCount + + i=63 + i=78 + i=12098 + + + + DeleteReferencesCount + + i=63 + i=78 + i=12098 + + + + BrowseCount + + i=63 + i=78 + i=12098 + + + + BrowseNextCount + + i=63 + i=78 + i=12098 + + + + TranslateBrowsePathsToNodeIdsCount + + i=63 + i=78 + i=12098 + + + + QueryFirstCount + + i=63 + i=78 + i=12098 + + + + QueryNextCount + + i=63 + i=78 + i=12098 + + + + RegisterNodesCount + + i=63 + i=78 + i=12098 + + + + UnregisterNodesCount + + i=63 + i=78 + i=12098 + + + + SessionSecurityDiagnostics + + i=12143 + i=12144 + i=12145 + i=12146 + i=12147 + i=12148 + i=12149 + i=12150 + i=12151 + i=2244 + i=78 + i=12097 + + + + SessionId + + i=63 + i=78 + i=12142 + + + + ClientUserIdOfSession + + i=63 + i=78 + i=12142 + + + + ClientUserIdHistory + + i=63 + i=78 + i=12142 + + + + AuthenticationMechanism + + i=63 + i=78 + i=12142 + + + + Encoding + + i=63 + i=78 + i=12142 + + + + TransportProtocol + + i=63 + i=78 + i=12142 + + + + SecurityMode + + i=63 + i=78 + i=12142 + + + + SecurityPolicyUri + + i=63 + i=78 + i=12142 + + + + ClientCertificate + + i=63 + i=78 + i=12142 + + + + SubscriptionDiagnosticsArray + + i=2171 + i=78 + i=12097 + + + + SessionDiagnosticsObjectType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.5 + + i=2030 + i=2031 + i=2032 + i=58 + + + + SessionDiagnostics + + i=3131 + i=3132 + i=3133 + i=3134 + i=3135 + i=3136 + i=3137 + i=3138 + i=3139 + i=3140 + i=3141 + i=3142 + i=3143 + i=8898 + i=11891 + i=3151 + i=3152 + i=3153 + i=3154 + i=3155 + i=3156 + i=3157 + i=3158 + i=3159 + i=3160 + i=3161 + i=3162 + i=3163 + i=3164 + i=3165 + i=3166 + i=3167 + i=3168 + i=3169 + i=3170 + i=3171 + i=3172 + i=3173 + i=3174 + i=3175 + i=3176 + i=3177 + i=3178 + i=2197 + i=78 + i=2029 + + + + SessionId + + i=63 + i=78 + i=2030 + + + + SessionName + + i=63 + i=78 + i=2030 + + + + ClientDescription + + i=63 + i=78 + i=2030 + + + + ServerUri + + i=63 + i=78 + i=2030 + + + + EndpointUrl + + i=63 + i=78 + i=2030 + + + + LocaleIds + + i=63 + i=78 + i=2030 + + + + ActualSessionTimeout + + i=63 + i=78 + i=2030 + + + + MaxResponseMessageSize + + i=63 + i=78 + i=2030 + + + + ClientConnectionTime + + i=63 + i=78 + i=2030 + + + + ClientLastContactTime + + i=63 + i=78 + i=2030 + + + + CurrentSubscriptionsCount + + i=63 + i=78 + i=2030 + + + + CurrentMonitoredItemsCount + + i=63 + i=78 + i=2030 + + + + CurrentPublishRequestsInQueue + + i=63 + i=78 + i=2030 + + + + TotalRequestCount + + i=63 + i=78 + i=2030 + + + + UnauthorizedRequestCount + + i=63 + i=78 + i=2030 + + + + ReadCount + + i=63 + i=78 + i=2030 + + + + HistoryReadCount + + i=63 + i=78 + i=2030 + + + + WriteCount + + i=63 + i=78 + i=2030 + + + + HistoryUpdateCount + + i=63 + i=78 + i=2030 + + + + CallCount + + i=63 + i=78 + i=2030 + + + + CreateMonitoredItemsCount + + i=63 + i=78 + i=2030 + + + + ModifyMonitoredItemsCount + + i=63 + i=78 + i=2030 + + + + SetMonitoringModeCount + + i=63 + i=78 + i=2030 + + + + SetTriggeringCount + + i=63 + i=78 + i=2030 + + + + DeleteMonitoredItemsCount + + i=63 + i=78 + i=2030 + + + + CreateSubscriptionCount + + i=63 + i=78 + i=2030 + + + + ModifySubscriptionCount + + i=63 + i=78 + i=2030 + + + + SetPublishingModeCount + + i=63 + i=78 + i=2030 + + + + PublishCount + + i=63 + i=78 + i=2030 + + + + RepublishCount + + i=63 + i=78 + i=2030 + + + + TransferSubscriptionsCount + + i=63 + i=78 + i=2030 + + + + DeleteSubscriptionsCount + + i=63 + i=78 + i=2030 + + + + AddNodesCount + + i=63 + i=78 + i=2030 + + + + AddReferencesCount + + i=63 + i=78 + i=2030 + + + + DeleteNodesCount + + i=63 + i=78 + i=2030 + + + + DeleteReferencesCount + + i=63 + i=78 + i=2030 + + + + BrowseCount + + i=63 + i=78 + i=2030 + + + + BrowseNextCount + + i=63 + i=78 + i=2030 + + + + TranslateBrowsePathsToNodeIdsCount + + i=63 + i=78 + i=2030 + + + + QueryFirstCount + + i=63 + i=78 + i=2030 + + + + QueryNextCount + + i=63 + i=78 + i=2030 + + + + RegisterNodesCount + + i=63 + i=78 + i=2030 + + + + UnregisterNodesCount + + i=63 + i=78 + i=2030 + + + + SessionSecurityDiagnostics + + i=3179 + i=3180 + i=3181 + i=3182 + i=3183 + i=3184 + i=3185 + i=3186 + i=3187 + i=2244 + i=78 + i=2029 + + + + SessionId + + i=63 + i=78 + i=2031 + + + + ClientUserIdOfSession + + i=63 + i=78 + i=2031 + + + + ClientUserIdHistory + + i=63 + i=78 + i=2031 + + + + AuthenticationMechanism + + i=63 + i=78 + i=2031 + + + + Encoding + + i=63 + i=78 + i=2031 + + + + TransportProtocol + + i=63 + i=78 + i=2031 + + + + SecurityMode + + i=63 + i=78 + i=2031 + + + + SecurityPolicyUri + + i=63 + i=78 + i=2031 + + + + ClientCertificate + + i=63 + i=78 + i=2031 + + + + SubscriptionDiagnosticsArray + + i=2171 + i=78 + i=2029 + + + + VendorServerInfoType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.6 + + i=58 + + + + ServerRedundancyType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.7 + + i=2035 + i=58 + + + + RedundancySupport + + i=68 + i=78 + i=2034 + + + + TransparentRedundancyType + Redundancy Server Transparent + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.8 + + i=2037 + i=2038 + i=2034 + + + + CurrentServerId + + i=68 + i=78 + i=2036 + + + + RedundantServerArray + + i=68 + i=78 + i=2036 + + + + NonTransparentRedundancyType + Redundancy Server + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.9 + + i=2040 + i=2034 + + + + ServerUriArray + + i=68 + i=78 + i=2039 + + + + NonTransparentNetworkRedundancyType + Redundancy Server + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.10 + + i=11948 + i=2039 + + + + ServerNetworkGroups + + i=68 + i=78 + i=11945 + + + + OperationLimitsType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.11 + + i=11565 + i=12161 + i=12162 + i=11567 + i=12163 + i=12164 + i=11569 + i=11570 + i=11571 + i=11572 + i=11573 + i=11574 + i=61 + + + + MaxNodesPerRead + + i=68 + i=80 + i=11564 + + + + MaxNodesPerHistoryReadData + + i=68 + i=80 + i=11564 + + + + MaxNodesPerHistoryReadEvents + + i=68 + i=80 + i=11564 + + + + MaxNodesPerWrite + + i=68 + i=80 + i=11564 + + + + MaxNodesPerHistoryUpdateData + + i=68 + i=80 + i=11564 + + + + MaxNodesPerHistoryUpdateEvents + + i=68 + i=80 + i=11564 + + + + MaxNodesPerMethodCall + + i=68 + i=80 + i=11564 + + + + MaxNodesPerBrowse + + i=68 + i=80 + i=11564 + + + + MaxNodesPerRegisterNodes + + i=68 + i=80 + i=11564 + + + + MaxNodesPerTranslateBrowsePathsToNodeIds + + i=68 + i=80 + i=11564 + + + + MaxNodesPerNodeManagement + + i=68 + i=80 + i=11564 + + + + MaxMonitoredItemsPerCall + + i=68 + i=80 + i=11564 + + + + FileType + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.1 + + i=11576 + i=12686 + i=12687 + i=11579 + i=13341 + i=24244 + i=25200 + i=11580 + i=11583 + i=11585 + i=11588 + i=11590 + i=11593 + i=58 + + + + Size + + i=68 + i=78 + i=11575 + + + + Writable + + i=68 + i=78 + i=11575 + + + + UserWritable + + i=68 + i=78 + i=11575 + + + + OpenCount + + i=68 + i=78 + i=11575 + + + + MimeType + + i=68 + i=80 + i=11575 + + + + MaxByteStringLength + + i=68 + i=80 + i=11575 + + + + LastModifiedTime + + i=68 + i=80 + i=11575 + + + + Open + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.2 + + i=11581 + i=11582 + i=78 + i=11575 + + + + InputArguments + + i=68 + i=78 + i=11580 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=11580 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.3 + + i=11584 + i=78 + i=11575 + + + + InputArguments + + i=68 + i=78 + i=11583 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.4 + + i=11586 + i=11587 + i=78 + i=11575 + + + + InputArguments + + i=68 + i=78 + i=11585 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=11585 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.5 + + i=11589 + i=78 + i=11575 + + + + InputArguments + + i=68 + i=78 + i=11588 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.6 + + i=11591 + i=11592 + i=78 + i=11575 + + + + InputArguments + + i=68 + i=78 + i=11590 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=11590 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.7 + + i=11594 + i=78 + i=11575 + + + + InputArguments + + i=68 + i=78 + i=11593 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + AddressSpaceFileType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.12 + + i=11615 + i=11575 + + + + ExportNamespace + + i=80 + i=11595 + + + + NamespaceMetadataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.13 + + i=11617 + i=11618 + i=11619 + i=11620 + i=11621 + i=11622 + i=11623 + i=11624 + i=16137 + i=16138 + i=16139 + i=25267 + i=58 + + + + NamespaceUri + + i=68 + i=78 + i=11616 + + + + NamespaceVersion + + i=68 + i=78 + i=11616 + + + + NamespacePublicationDate + + i=68 + i=78 + i=11616 + + + + IsNamespaceSubset + + i=68 + i=78 + i=11616 + + + + StaticNodeIdTypes + + i=68 + i=78 + i=11616 + + + + StaticNumericNodeIdRange + + i=68 + i=78 + i=11616 + + + + StaticStringNodeIdPattern + + i=68 + i=78 + i=11616 + + + + NamespaceFile + + i=11625 + i=12690 + i=12691 + i=11628 + i=11629 + i=11632 + i=11634 + i=11637 + i=11639 + i=11642 + i=11595 + i=80 + i=11616 + + + + Size + + i=68 + i=78 + i=11624 + + + + Writable + + i=68 + i=78 + i=11624 + + + + UserWritable + + i=68 + i=78 + i=11624 + + + + OpenCount + + i=68 + i=78 + i=11624 + + + + Open + + i=11630 + i=11631 + i=78 + i=11624 + + + + InputArguments + + i=68 + i=78 + i=11629 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=11629 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=11633 + i=78 + i=11624 + + + + InputArguments + + i=68 + i=78 + i=11632 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=11635 + i=11636 + i=78 + i=11624 + + + + InputArguments + + i=68 + i=78 + i=11634 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=11634 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=11638 + i=78 + i=11624 + + + + InputArguments + + i=68 + i=78 + i=11637 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=11640 + i=11641 + i=78 + i=11624 + + + + InputArguments + + i=68 + i=78 + i=11639 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=11639 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=11643 + i=78 + i=11624 + + + + InputArguments + + i=68 + i=78 + i=11642 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + DefaultRolePermissions + + i=68 + i=80 + i=11616 + + + + DefaultUserRolePermissions + + i=68 + i=80 + i=11616 + + + + DefaultAccessRestrictions + + i=68 + i=80 + i=11616 + + + + ConfigurationVersion + + i=68 + i=80 + i=11616 + + + + NamespacesType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.3.14 + + i=11646 + i=58 + + + + <NamespaceIdentifier> + + i=11647 + i=11648 + i=11649 + i=11650 + i=11651 + i=11652 + i=11653 + i=11616 + i=11508 + i=11645 + + + + NamespaceUri + + i=68 + i=78 + i=11646 + + + + NamespaceVersion + + i=68 + i=78 + i=11646 + + + + NamespacePublicationDate + + i=68 + i=78 + i=11646 + + + + IsNamespaceSubset + + i=68 + i=78 + i=11646 + + + + StaticNodeIdTypes + + i=68 + i=78 + i=11646 + + + + StaticNumericNodeIdRange + + i=68 + i=78 + i=11646 + + + + StaticStringNodeIdPattern + + i=68 + i=78 + i=11646 + + + + BaseEventType + Address Space Events + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.2 + + i=2042 + i=2043 + i=2044 + i=2045 + i=2046 + i=2047 + i=3190 + i=2050 + i=2051 + i=31771 + i=31772 + i=31773 + i=31774 + i=58 + + + + EventId + + i=68 + i=78 + i=2041 + + + + EventType + + i=68 + i=78 + i=2041 + + + + SourceNode + + i=68 + i=78 + i=2041 + + + + SourceName + + i=68 + i=78 + i=2041 + + + + Time + + i=68 + i=78 + i=2041 + + + + ReceiveTime + + i=68 + i=78 + i=2041 + + + + LocalTime + + i=68 + i=80 + i=2041 + + + + Message + + i=68 + i=78 + i=2041 + + + + Severity + + i=68 + i=78 + i=2041 + + + + ConditionClassId + + i=68 + i=80 + i=2041 + + + + ConditionClassName + + i=68 + i=80 + i=2041 + + + + ConditionSubClassId + + i=68 + i=80 + i=2041 + + + + ConditionSubClassName + + i=68 + i=80 + i=2041 + + + + AuditEventType + Auditing Connections + Auditing NodeManagement + Auditing History Services + Auditing Write + Auditing Method + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.3 + + i=2053 + i=2054 + i=2055 + i=2056 + i=2057 + i=2041 + + + + ActionTimeStamp + + i=68 + i=78 + i=2052 + + + + Status + + i=68 + i=78 + i=2052 + + + + ServerId + + i=68 + i=78 + i=2052 + + + + ClientAuditEntryId + + i=68 + i=78 + i=2052 + + + + ClientUserId + + i=68 + i=78 + i=2052 + + + + AuditSecurityEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.4 + + i=17615 + i=2052 + + + + StatusCodeId + + i=68 + i=80 + i=2058 + + + + AuditChannelEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.5 + + i=2745 + i=2058 + + + + SecureChannelId + + i=68 + i=78 + i=2059 + + + + AuditOpenSecureChannelEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.6 + + i=2061 + i=2746 + i=2062 + i=2063 + i=2065 + i=2066 + i=24135 + i=2059 + + + + ClientCertificate + + i=68 + i=78 + i=2060 + + + + ClientCertificateThumbprint + + i=68 + i=78 + i=2060 + + + + RequestType + + i=68 + i=78 + i=2060 + + + + SecurityPolicyUri + + i=68 + i=78 + i=2060 + + + + SecurityMode + + i=68 + i=78 + i=2060 + + + + RequestedLifetime + + i=68 + i=78 + i=2060 + + + + CertificateErrorEventId + + i=68 + i=80 + i=2060 + + + + AuditSessionEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.7 + + i=2070 + i=2058 + + + + SessionId + + i=68 + i=78 + i=2069 + + + + AuditCreateSessionEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.8 + + i=2072 + i=2073 + i=2747 + i=2074 + i=2069 + + + + SecureChannelId + + i=68 + i=78 + i=2071 + + + + ClientCertificate + + i=68 + i=78 + i=2071 + + + + ClientCertificateThumbprint + + i=68 + i=78 + i=2071 + + + + RevisedSessionTimeout + + i=68 + i=78 + i=2071 + + + + AuditUrlMismatchEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.9 + + i=2749 + i=2071 + + + + EndpointUrl + + i=68 + i=78 + i=2748 + + + + AuditActivateSessionEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.10 + + i=2076 + i=2077 + i=11485 + i=2069 + + + + ClientSoftwareCertificates + + i=68 + i=78 + i=2075 + + + + UserIdentityToken + + i=68 + i=78 + i=2075 + + + + SecureChannelId + + i=68 + i=78 + i=2075 + + + + AuditCancelEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.11 + + i=2079 + i=2069 + + + + RequestHandle + + i=68 + i=78 + i=2078 + + + + AuditCertificateEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.12 + + i=2081 + i=2058 + + + + Certificate + + i=68 + i=78 + i=2080 + + + + AuditCertificateDataMismatchEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.13 + + i=2083 + i=2084 + i=2080 + + + + InvalidHostname + + i=68 + i=78 + i=2082 + + + + InvalidUri + + i=68 + i=78 + i=2082 + + + + AuditCertificateExpiredEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.14 + + i=2080 + + + + AuditCertificateInvalidEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.15 + + i=2080 + + + + AuditCertificateUntrustedEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.16 + + i=2080 + + + + AuditCertificateRevokedEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.17 + + i=2080 + + + + AuditCertificateMismatchEventType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.18 + + i=2080 + + + + AuditNodeManagementEventType + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.19 + + i=2052 + + + + AuditAddNodesEventType + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.20 + + i=2092 + i=2090 + + + + NodesToAdd + + i=68 + i=78 + i=2091 + + + + AuditDeleteNodesEventType + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.21 + + i=2094 + i=2090 + + + + NodesToDelete + + i=68 + i=78 + i=2093 + + + + AuditAddReferencesEventType + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.22 + + i=2096 + i=2090 + + + + ReferencesToAdd + + i=68 + i=78 + i=2095 + + + + AuditDeleteReferencesEventType + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.23 + + i=2098 + i=2090 + + + + ReferencesToDelete + + i=68 + i=78 + i=2097 + + + + AuditUpdateEventType + Auditing History Services + Auditing Write + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.24 + + i=2052 + + + + AuditWriteUpdateEventType + Auditing Write + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.25 + + i=2750 + i=2101 + i=2102 + i=2103 + i=2099 + + + + AttributeId + + i=68 + i=78 + i=2100 + + + + IndexRange + + i=68 + i=78 + i=2100 + + + + OldValue + + i=68 + i=78 + i=2100 + + + + NewValue + + i=68 + i=78 + i=2100 + + + + AuditHistoryUpdateEventType + Auditing History Services + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.26 + + i=2751 + i=2099 + + + + ParameterDataTypeId + + i=68 + i=78 + i=2104 + + + + AuditUpdateMethodEventType + Auditing Method + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.27 + + i=2128 + i=2129 + i=2052 + + + + MethodId + + i=68 + i=78 + i=2127 + + + + InputArguments + + i=68 + i=78 + i=2127 + + + + SystemEventType + Base Info Device Failure + Base Info System Status Underlying System + Base Info System Status + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.28 + + i=2041 + + + + DeviceFailureEventType + Base Info Device Failure + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.29 + + i=2130 + + + + SystemStatusChangeEventType + Base Info System Status Underlying System + Base Info System Status + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.30 + + i=11696 + i=2130 + + + + SystemState + + i=68 + i=78 + i=11446 + + + + BaseModelChangeEventType + Base Info Model Change + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.31 + + i=2041 + + + + GeneralModelChangeEventType + Base Info Model Change General + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.32 + + i=2134 + i=2132 + + + + Changes + + i=68 + i=78 + i=2133 + + + + SemanticChangeEventType + Base Info SemanticChange + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.33 + + i=2739 + i=2041 + + + + Changes + + i=68 + i=78 + i=2738 + + + + EventQueueOverflowEventType + Base Info EventQueueOverflow EventType + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.34 + + i=2041 + + + + ProgressEventType + Base Info Progress Events + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.35 + + i=12502 + i=12503 + i=2041 + + + + Context + + i=68 + i=78 + i=11436 + + + + Progress + + i=68 + i=78 + i=11436 + + + + AuditClientEventType + Base Info Client Events + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.36 + + i=23908 + i=2052 + + + + ServerUri + + i=68 + i=78 + i=23606 + + + + AuditClientUpdateMethodResultEventType + Base Info Client Events + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.4.37 + + i=23994 + i=23995 + i=23998 + i=23999 + i=25684 + i=23606 + + + + ObjectId + + i=68 + i=78 + i=23926 + + + + MethodId + + i=68 + i=78 + i=23926 + + + + StatusCodeId + + i=68 + i=78 + i=23926 + + + + InputArguments + + i=68 + i=78 + i=23926 + + + + OutputArguments + + i=68 + i=78 + i=23926 + + + + AggregateFunctionType + Historical Access Aggregates + https://reference.opcfoundation.org/v105/Core/docs/Part13/4.2.2/#4.2.2.2 + + i=58 + + + + ServerVendorCapabilityType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.5 + + i=63 + + + + ServerStatusType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.6 + + i=2139 + i=2140 + i=2141 + i=2142 + i=2752 + i=2753 + i=63 + + + + StartTime + + i=63 + i=78 + i=2138 + + + + CurrentTime + + i=63 + i=78 + i=2138 + + + + State + + i=63 + i=78 + i=2138 + + + + BuildInfo + + i=3698 + i=3699 + i=3700 + i=3701 + i=3702 + i=3703 + i=3051 + i=78 + i=2138 + + + + ProductUri + + i=63 + i=78 + i=2142 + + + + ManufacturerName + + i=63 + i=78 + i=2142 + + + + ProductName + + i=63 + i=78 + i=2142 + + + + SoftwareVersion + + i=63 + i=78 + i=2142 + + + + BuildNumber + + i=63 + i=78 + i=2142 + + + + BuildDate + + i=63 + i=78 + i=2142 + + + + SecondsTillShutdown + + i=63 + i=78 + i=2138 + + + + ShutdownReason + + i=63 + i=78 + i=2138 + + + + BuildInfoType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.7 + + i=3052 + i=3053 + i=3054 + i=3055 + i=3056 + i=3057 + i=63 + + + + ProductUri + + i=63 + i=78 + i=3051 + + + + ManufacturerName + + i=63 + i=78 + i=3051 + + + + ProductName + + i=63 + i=78 + i=3051 + + + + SoftwareVersion + + i=63 + i=78 + i=3051 + + + + BuildNumber + + i=63 + i=78 + i=3051 + + + + BuildDate + + i=63 + i=78 + i=3051 + + + + ServerDiagnosticsSummaryType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.8 + + i=2151 + i=2152 + i=2153 + i=2154 + i=2155 + i=2156 + i=2157 + i=2159 + i=2160 + i=2161 + i=2162 + i=2163 + i=63 + + + + ServerViewCount + + i=63 + i=78 + i=2150 + + + + CurrentSessionCount + + i=63 + i=78 + i=2150 + + + + CumulatedSessionCount + + i=63 + i=78 + i=2150 + + + + SecurityRejectedSessionCount + + i=63 + i=78 + i=2150 + + + + RejectedSessionCount + + i=63 + i=78 + i=2150 + + + + SessionTimeoutCount + + i=63 + i=78 + i=2150 + + + + SessionAbortCount + + i=63 + i=78 + i=2150 + + + + PublishingIntervalCount + + i=63 + i=78 + i=2150 + + + + CurrentSubscriptionCount + + i=63 + i=78 + i=2150 + + + + CumulatedSubscriptionCount + + i=63 + i=78 + i=2150 + + + + SecurityRejectedRequestsCount + + i=63 + i=78 + i=2150 + + + + RejectedRequestsCount + + i=63 + i=78 + i=2150 + + + + SamplingIntervalDiagnosticsArrayType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.9 + + i=12779 + i=63 + + + + SamplingIntervalDiagnostics + + i=12780 + i=12781 + i=12782 + i=12783 + i=2165 + i=83 + i=2164 + + + + SamplingInterval + + i=63 + i=78 + i=12779 + + + + SampledMonitoredItemsCount + + i=63 + i=78 + i=12779 + + + + MaxSampledMonitoredItemsCount + + i=63 + i=78 + i=12779 + + + + DisabledMonitoredItemsSamplingCount + + i=63 + i=78 + i=12779 + + + + SamplingIntervalDiagnosticsType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.10 + + i=2166 + i=11697 + i=11698 + i=11699 + i=63 + + + + SamplingInterval + + i=63 + i=78 + i=2165 + + + + SampledMonitoredItemsCount + + i=63 + i=78 + i=2165 + + + + MaxSampledMonitoredItemsCount + + i=63 + i=78 + i=2165 + + + + DisabledMonitoredItemsSamplingCount + + i=63 + i=78 + i=2165 + + + + SubscriptionDiagnosticsArrayType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.11 + + i=12784 + i=63 + + + + SubscriptionDiagnostics + + i=12785 + i=12786 + i=12787 + i=12788 + i=12789 + i=12790 + i=12791 + i=12792 + i=12793 + i=12794 + i=12795 + i=12796 + i=12797 + i=12798 + i=12799 + i=12800 + i=12801 + i=12802 + i=12803 + i=12804 + i=12805 + i=12806 + i=12807 + i=12808 + i=12809 + i=12810 + i=12811 + i=12812 + i=12813 + i=12814 + i=12815 + i=2172 + i=83 + i=2171 + + + + SessionId + + i=63 + i=78 + i=12784 + + + + SubscriptionId + + i=63 + i=78 + i=12784 + + + + Priority + + i=63 + i=78 + i=12784 + + + + PublishingInterval + + i=63 + i=78 + i=12784 + + + + MaxKeepAliveCount + + i=63 + i=78 + i=12784 + + + + MaxLifetimeCount + + i=63 + i=78 + i=12784 + + + + MaxNotificationsPerPublish + + i=63 + i=78 + i=12784 + + + + PublishingEnabled + + i=63 + i=78 + i=12784 + + + + ModifyCount + + i=63 + i=78 + i=12784 + + + + EnableCount + + i=63 + i=78 + i=12784 + + + + DisableCount + + i=63 + i=78 + i=12784 + + + + RepublishRequestCount + + i=63 + i=78 + i=12784 + + + + RepublishMessageRequestCount + + i=63 + i=78 + i=12784 + + + + RepublishMessageCount + + i=63 + i=78 + i=12784 + + + + TransferRequestCount + + i=63 + i=78 + i=12784 + + + + TransferredToAltClientCount + + i=63 + i=78 + i=12784 + + + + TransferredToSameClientCount + + i=63 + i=78 + i=12784 + + + + PublishRequestCount + + i=63 + i=78 + i=12784 + + + + DataChangeNotificationsCount + + i=63 + i=78 + i=12784 + + + + EventNotificationsCount + + i=63 + i=78 + i=12784 + + + + NotificationsCount + + i=63 + i=78 + i=12784 + + + + LatePublishRequestCount + + i=63 + i=78 + i=12784 + + + + CurrentKeepAliveCount + + i=63 + i=78 + i=12784 + + + + CurrentLifetimeCount + + i=63 + i=78 + i=12784 + + + + UnacknowledgedMessageCount + + i=63 + i=78 + i=12784 + + + + DiscardedMessageCount + + i=63 + i=78 + i=12784 + + + + MonitoredItemCount + + i=63 + i=78 + i=12784 + + + + DisabledMonitoredItemCount + + i=63 + i=78 + i=12784 + + + + MonitoringQueueOverflowCount + + i=63 + i=78 + i=12784 + + + + NextSequenceNumber + + i=63 + i=78 + i=12784 + + + + EventQueueOverflowCount + + i=63 + i=78 + i=12784 + + + + SubscriptionDiagnosticsType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.12 + + i=2173 + i=2174 + i=2175 + i=2176 + i=2177 + i=8888 + i=2179 + i=2180 + i=2181 + i=2182 + i=2183 + i=2184 + i=2185 + i=2186 + i=2187 + i=2188 + i=2189 + i=2190 + i=2191 + i=2998 + i=2193 + i=8889 + i=8890 + i=8891 + i=8892 + i=8893 + i=8894 + i=8895 + i=8896 + i=8897 + i=8902 + i=63 + + + + SessionId + + i=63 + i=78 + i=2172 + + + + SubscriptionId + + i=63 + i=78 + i=2172 + + + + Priority + + i=63 + i=78 + i=2172 + + + + PublishingInterval + + i=63 + i=78 + i=2172 + + + + MaxKeepAliveCount + + i=63 + i=78 + i=2172 + + + + MaxLifetimeCount + + i=63 + i=78 + i=2172 + + + + MaxNotificationsPerPublish + + i=63 + i=78 + i=2172 + + + + PublishingEnabled + + i=63 + i=78 + i=2172 + + + + ModifyCount + + i=63 + i=78 + i=2172 + + + + EnableCount + + i=63 + i=78 + i=2172 + + + + DisableCount + + i=63 + i=78 + i=2172 + + + + RepublishRequestCount + + i=63 + i=78 + i=2172 + + + + RepublishMessageRequestCount + + i=63 + i=78 + i=2172 + + + + RepublishMessageCount + + i=63 + i=78 + i=2172 + + + + TransferRequestCount + + i=63 + i=78 + i=2172 + + + + TransferredToAltClientCount + + i=63 + i=78 + i=2172 + + + + TransferredToSameClientCount + + i=63 + i=78 + i=2172 + + + + PublishRequestCount + + i=63 + i=78 + i=2172 + + + + DataChangeNotificationsCount + + i=63 + i=78 + i=2172 + + + + EventNotificationsCount + + i=63 + i=78 + i=2172 + + + + NotificationsCount + + i=63 + i=78 + i=2172 + + + + LatePublishRequestCount + + i=63 + i=78 + i=2172 + + + + CurrentKeepAliveCount + + i=63 + i=78 + i=2172 + + + + CurrentLifetimeCount + + i=63 + i=78 + i=2172 + + + + UnacknowledgedMessageCount + + i=63 + i=78 + i=2172 + + + + DiscardedMessageCount + + i=63 + i=78 + i=2172 + + + + MonitoredItemCount + + i=63 + i=78 + i=2172 + + + + DisabledMonitoredItemCount + + i=63 + i=78 + i=2172 + + + + MonitoringQueueOverflowCount + + i=63 + i=78 + i=2172 + + + + NextSequenceNumber + + i=63 + i=78 + i=2172 + + + + EventQueueOverflowCount + + i=63 + i=78 + i=2172 + + + + SessionDiagnosticsArrayType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.13 + + i=12816 + i=63 + + + + SessionDiagnostics + + i=12817 + i=12818 + i=12819 + i=12820 + i=12821 + i=12822 + i=12823 + i=12824 + i=12825 + i=12826 + i=12827 + i=12828 + i=12829 + i=12830 + i=12831 + i=12832 + i=12833 + i=12834 + i=12835 + i=12836 + i=12837 + i=12838 + i=12839 + i=12840 + i=12841 + i=12842 + i=12843 + i=12844 + i=12845 + i=12846 + i=12847 + i=12848 + i=12849 + i=12850 + i=12851 + i=12852 + i=12853 + i=12854 + i=12855 + i=12856 + i=12857 + i=12858 + i=12859 + i=2197 + i=83 + i=2196 + + + + SessionId + + i=63 + i=78 + i=12816 + + + + SessionName + + i=63 + i=78 + i=12816 + + + + ClientDescription + + i=63 + i=78 + i=12816 + + + + ServerUri + + i=63 + i=78 + i=12816 + + + + EndpointUrl + + i=63 + i=78 + i=12816 + + + + LocaleIds + + i=63 + i=78 + i=12816 + + + + ActualSessionTimeout + + i=63 + i=78 + i=12816 + + + + MaxResponseMessageSize + + i=63 + i=78 + i=12816 + + + + ClientConnectionTime + + i=63 + i=78 + i=12816 + + + + ClientLastContactTime + + i=63 + i=78 + i=12816 + + + + CurrentSubscriptionsCount + + i=63 + i=78 + i=12816 + + + + CurrentMonitoredItemsCount + + i=63 + i=78 + i=12816 + + + + CurrentPublishRequestsInQueue + + i=63 + i=78 + i=12816 + + + + TotalRequestCount + + i=63 + i=78 + i=12816 + + + + UnauthorizedRequestCount + + i=63 + i=78 + i=12816 + + + + ReadCount + + i=63 + i=78 + i=12816 + + + + HistoryReadCount + + i=63 + i=78 + i=12816 + + + + WriteCount + + i=63 + i=78 + i=12816 + + + + HistoryUpdateCount + + i=63 + i=78 + i=12816 + + + + CallCount + + i=63 + i=78 + i=12816 + + + + CreateMonitoredItemsCount + + i=63 + i=78 + i=12816 + + + + ModifyMonitoredItemsCount + + i=63 + i=78 + i=12816 + + + + SetMonitoringModeCount + + i=63 + i=78 + i=12816 + + + + SetTriggeringCount + + i=63 + i=78 + i=12816 + + + + DeleteMonitoredItemsCount + + i=63 + i=78 + i=12816 + + + + CreateSubscriptionCount + + i=63 + i=78 + i=12816 + + + + ModifySubscriptionCount + + i=63 + i=78 + i=12816 + + + + SetPublishingModeCount + + i=63 + i=78 + i=12816 + + + + PublishCount + + i=63 + i=78 + i=12816 + + + + RepublishCount + + i=63 + i=78 + i=12816 + + + + TransferSubscriptionsCount + + i=63 + i=78 + i=12816 + + + + DeleteSubscriptionsCount + + i=63 + i=78 + i=12816 + + + + AddNodesCount + + i=63 + i=78 + i=12816 + + + + AddReferencesCount + + i=63 + i=78 + i=12816 + + + + DeleteNodesCount + + i=63 + i=78 + i=12816 + + + + DeleteReferencesCount + + i=63 + i=78 + i=12816 + + + + BrowseCount + + i=63 + i=78 + i=12816 + + + + BrowseNextCount + + i=63 + i=78 + i=12816 + + + + TranslateBrowsePathsToNodeIdsCount + + i=63 + i=78 + i=12816 + + + + QueryFirstCount + + i=63 + i=78 + i=12816 + + + + QueryNextCount + + i=63 + i=78 + i=12816 + + + + RegisterNodesCount + + i=63 + i=78 + i=12816 + + + + UnregisterNodesCount + + i=63 + i=78 + i=12816 + + + + SessionDiagnosticsVariableType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.14 + + i=2198 + i=2199 + i=2200 + i=2201 + i=2202 + i=2203 + i=2204 + i=3050 + i=2205 + i=2206 + i=2207 + i=2208 + i=2209 + i=8900 + i=11892 + i=2217 + i=2218 + i=2219 + i=2220 + i=2221 + i=2222 + i=2223 + i=2224 + i=2225 + i=2226 + i=2227 + i=2228 + i=2229 + i=2230 + i=2231 + i=2232 + i=2233 + i=2234 + i=2235 + i=2236 + i=2237 + i=2238 + i=2239 + i=2240 + i=2241 + i=2242 + i=2730 + i=2731 + i=63 + + + + SessionId + + i=63 + i=78 + i=2197 + + + + SessionName + + i=63 + i=78 + i=2197 + + + + ClientDescription + + i=63 + i=78 + i=2197 + + + + ServerUri + + i=63 + i=78 + i=2197 + + + + EndpointUrl + + i=63 + i=78 + i=2197 + + + + LocaleIds + + i=63 + i=78 + i=2197 + + + + ActualSessionTimeout + + i=63 + i=78 + i=2197 + + + + MaxResponseMessageSize + + i=63 + i=78 + i=2197 + + + + ClientConnectionTime + + i=63 + i=78 + i=2197 + + + + ClientLastContactTime + + i=63 + i=78 + i=2197 + + + + CurrentSubscriptionsCount + + i=63 + i=78 + i=2197 + + + + CurrentMonitoredItemsCount + + i=63 + i=78 + i=2197 + + + + CurrentPublishRequestsInQueue + + i=63 + i=78 + i=2197 + + + + TotalRequestCount + + i=63 + i=78 + i=2197 + + + + UnauthorizedRequestCount + + i=63 + i=78 + i=2197 + + + + ReadCount + + i=63 + i=78 + i=2197 + + + + HistoryReadCount + + i=63 + i=78 + i=2197 + + + + WriteCount + + i=63 + i=78 + i=2197 + + + + HistoryUpdateCount + + i=63 + i=78 + i=2197 + + + + CallCount + + i=63 + i=78 + i=2197 + + + + CreateMonitoredItemsCount + + i=63 + i=78 + i=2197 + + + + ModifyMonitoredItemsCount + + i=63 + i=78 + i=2197 + + + + SetMonitoringModeCount + + i=63 + i=78 + i=2197 + + + + SetTriggeringCount + + i=63 + i=78 + i=2197 + + + + DeleteMonitoredItemsCount + + i=63 + i=78 + i=2197 + + + + CreateSubscriptionCount + + i=63 + i=78 + i=2197 + + + + ModifySubscriptionCount + + i=63 + i=78 + i=2197 + + + + SetPublishingModeCount + + i=63 + i=78 + i=2197 + + + + PublishCount + + i=63 + i=78 + i=2197 + + + + RepublishCount + + i=63 + i=78 + i=2197 + + + + TransferSubscriptionsCount + + i=63 + i=78 + i=2197 + + + + DeleteSubscriptionsCount + + i=63 + i=78 + i=2197 + + + + AddNodesCount + + i=63 + i=78 + i=2197 + + + + AddReferencesCount + + i=63 + i=78 + i=2197 + + + + DeleteNodesCount + + i=63 + i=78 + i=2197 + + + + DeleteReferencesCount + + i=63 + i=78 + i=2197 + + + + BrowseCount + + i=63 + i=78 + i=2197 + + + + BrowseNextCount + + i=63 + i=78 + i=2197 + + + + TranslateBrowsePathsToNodeIdsCount + + i=63 + i=78 + i=2197 + + + + QueryFirstCount + + i=63 + i=78 + i=2197 + + + + QueryNextCount + + i=63 + i=78 + i=2197 + + + + RegisterNodesCount + + i=63 + i=78 + i=2197 + + + + UnregisterNodesCount + + i=63 + i=78 + i=2197 + + + + SessionSecurityDiagnosticsArrayType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.15 + + i=12860 + i=63 + + + + SessionSecurityDiagnostics + + i=12861 + i=12862 + i=12863 + i=12864 + i=12865 + i=12866 + i=12867 + i=12868 + i=12869 + i=2244 + i=83 + i=2243 + + + + SessionId + + i=63 + i=78 + i=12860 + + + + ClientUserIdOfSession + + i=63 + i=78 + i=12860 + + + + ClientUserIdHistory + + i=63 + i=78 + i=12860 + + + + AuthenticationMechanism + + i=63 + i=78 + i=12860 + + + + Encoding + + i=63 + i=78 + i=12860 + + + + TransportProtocol + + i=63 + i=78 + i=12860 + + + + SecurityMode + + i=63 + i=78 + i=12860 + + + + SecurityPolicyUri + + i=63 + i=78 + i=12860 + + + + ClientCertificate + + i=63 + i=78 + i=12860 + + + + SessionSecurityDiagnosticsType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.16 + + i=2245 + i=2246 + i=2247 + i=2248 + i=2249 + i=2250 + i=2251 + i=2252 + i=3058 + i=63 + + + + SessionId + + i=63 + i=78 + i=2244 + + + + ClientUserIdOfSession + + i=63 + i=78 + i=2244 + + + + ClientUserIdHistory + + i=63 + i=78 + i=2244 + + + + AuthenticationMechanism + + i=63 + i=78 + i=2244 + + + + Encoding + + i=63 + i=78 + i=2244 + + + + TransportProtocol + + i=63 + i=78 + i=2244 + + + + SecurityMode + + i=63 + i=78 + i=2244 + + + + SecurityPolicyUri + + i=63 + i=78 + i=2244 + + + + ClientCertificate + + i=63 + i=78 + i=2244 + + + + OptionSetType + Base Info OptionSet + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.17 + + i=11488 + i=11701 + i=63 + + + + OptionSetValues + + i=68 + i=78 + i=11487 + + + + BitMask + + i=68 + i=80 + i=11487 + + + + SelectionListType + Base Info Selection List + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.18 + + i=17632 + i=17633 + i=16312 + i=63 + + + + Selections + + i=68 + i=78 + i=16309 + + + + SelectionDescriptions + + i=68 + i=80 + i=16309 + + + + RestrictToList + + i=68 + i=80 + i=16309 + + + + AudioVariableType + Base Info Audio Type + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.19 + + i=17988 + i=17989 + i=17990 + i=63 + + + + ListId + + i=68 + i=80 + i=17986 + + + + AgencyId + + i=68 + i=80 + i=17986 + + + + VersionId + + i=68 + i=80 + i=17986 + + + + EventTypes + Address Space Events 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.10 + + i=86 + i=2041 + i=61 + + + + Locations + Base Info Locations Object + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.12 + + i=85 + i=61 + + + + Server + Base Info Core Structure 2 + Address Space Events 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.3.2 + + i=2254 + i=2255 + i=15004 + i=2256 + i=2267 + i=2994 + i=12885 + i=17634 + i=2268 + i=2274 + i=2295 + i=2296 + i=11715 + i=11492 + i=12873 + i=12749 + i=12886 + i=85 + i=2004 + + + + ServerArray + + i=68 + i=2253 + + + + NamespaceArray + + i=68 + i=2253 + + + + UrisVersion + + i=68 + i=2253 + + + + ServerStatus + + i=2257 + i=2258 + i=2259 + i=2260 + i=2992 + i=2993 + i=2138 + i=2253 + + + + StartTime + + i=63 + i=2256 + + + + CurrentTime + + i=63 + i=2256 + + + + State + + i=63 + i=2256 + + + + BuildInfo + + i=2262 + i=2263 + i=2261 + i=2264 + i=2265 + i=2266 + i=3051 + i=2256 + + + + ProductUri + + i=63 + i=2260 + + + + ManufacturerName + + i=63 + i=2260 + + + + ProductName + + i=63 + i=2260 + + + + SoftwareVersion + + i=63 + i=2260 + + + + BuildNumber + + i=63 + i=2260 + + + + BuildDate + + i=63 + i=2260 + + + + SecondsTillShutdown + + i=63 + i=2256 + + + + ShutdownReason + + i=63 + i=2256 + + + + ServiceLevel + + i=68 + i=2253 + + + + Auditing + + i=68 + i=2253 + + + + EstimatedReturnTime + + i=68 + i=2253 + + + + LocalTime + + i=68 + i=2253 + + + + ServerCapabilities + + i=2269 + i=2271 + i=2272 + i=2735 + i=2736 + i=2737 + i=3704 + i=11702 + i=11703 + i=12911 + i=11704 + i=2996 + i=2997 + i=15606 + i=24095 + i=24096 + i=24097 + i=24098 + i=24104 + i=24099 + i=24100 + i=31916 + i=24101 + i=2013 + i=2253 + + + + ServerProfileArray + + i=68 + i=2268 + + + + LocaleIdArray + + i=68 + i=2268 + + + + MinSupportedSampleRate + + i=68 + i=2268 + + + + MaxBrowseContinuationPoints + + i=68 + i=2268 + + + + MaxQueryContinuationPoints + + i=68 + i=2268 + + + + MaxHistoryContinuationPoints + + i=68 + i=2268 + + + + SoftwareCertificates + + i=68 + i=2268 + + + + MaxArrayLength + + i=68 + i=2268 + + + + MaxStringLength + + i=68 + i=2268 + + + + MaxByteStringLength + + i=68 + i=2268 + + + + OperationLimits + + i=11705 + i=12165 + i=12166 + i=11707 + i=12167 + i=12168 + i=11709 + i=11710 + i=11711 + i=11712 + i=11713 + i=11714 + i=11564 + i=2268 + + + + MaxNodesPerRead + + i=68 + i=11704 + + + + MaxNodesPerHistoryReadData + + i=68 + i=11704 + + + + MaxNodesPerHistoryReadEvents + + i=68 + i=11704 + + + + MaxNodesPerWrite + + i=68 + i=11704 + + + + MaxNodesPerHistoryUpdateData + + i=68 + i=11704 + + + + MaxNodesPerHistoryUpdateEvents + + i=68 + i=11704 + + + + MaxNodesPerMethodCall + + i=68 + i=11704 + + + + MaxNodesPerBrowse + + i=68 + i=11704 + + + + MaxNodesPerRegisterNodes + + i=68 + i=11704 + + + + MaxNodesPerTranslateBrowsePathsToNodeIds + + i=68 + i=11704 + + + + MaxNodesPerNodeManagement + + i=68 + i=11704 + + + + MaxMonitoredItemsPerCall + + i=68 + i=11704 + + + + ModellingRules + + i=61 + i=2268 + + + + AggregateFunctions + Historical Access Aggregates + https://reference.opcfoundation.org/v105/Core/docs/Part13/4.2.2/#4.2.2.1 + + i=61 + i=2268 + + + + RoleSet + Security Role Server Base 2 + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.3 + + i=16301 + i=16304 + i=15607 + i=2268 + + + + AddRole + + i=16302 + i=16303 + i=15606 + + + + InputArguments + + i=68 + i=16301 + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=16301 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + RemoveRole + + i=16305 + i=15606 + + + + InputArguments + + i=68 + i=16304 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + MaxSessions + + i=68 + i=2268 + + + + MaxSubscriptions + + i=68 + i=2268 + + + + MaxMonitoredItems + + i=68 + i=2268 + + + + MaxSubscriptionsPerSession + + i=68 + i=2268 + + + + MaxMonitoredItemsPerSubscription + + i=68 + i=2268 + + + + MaxSelectClauseParameters + + i=68 + i=2268 + + + + MaxWhereClauseParameters + + i=68 + i=2268 + + + + MaxMonitoredItemsQueueSize + + i=68 + i=2268 + + + + ConformanceUnits + + i=68 + i=2268 + + + + ServerDiagnostics + + i=2275 + i=2289 + i=2290 + i=3706 + i=2294 + i=2020 + i=2253 + + + + ServerDiagnosticsSummary + + i=2276 + i=2277 + i=2278 + i=2279 + i=3705 + i=2281 + i=2282 + i=2284 + i=2285 + i=2286 + i=2287 + i=2288 + i=2150 + i=2274 + + + + ServerViewCount + + i=63 + i=2275 + + + + CurrentSessionCount + + i=63 + i=2275 + + + + CumulatedSessionCount + + i=63 + i=2275 + + + + SecurityRejectedSessionCount + + i=63 + i=2275 + + + + RejectedSessionCount + + i=63 + i=2275 + + + + SessionTimeoutCount + + i=63 + i=2275 + + + + SessionAbortCount + + i=63 + i=2275 + + + + PublishingIntervalCount + + i=63 + i=2275 + + + + CurrentSubscriptionCount + + i=63 + i=2275 + + + + CumulatedSubscriptionCount + + i=63 + i=2275 + + + + SecurityRejectedRequestsCount + + i=63 + i=2275 + + + + RejectedRequestsCount + + i=63 + i=2275 + + + + SamplingIntervalDiagnosticsArray + + i=2164 + i=2274 + + + + SubscriptionDiagnosticsArray + + i=2171 + i=2274 + + + + SessionsDiagnosticsSummary + + i=3707 + i=3708 + i=2026 + i=2274 + + + + SessionDiagnosticsArray + + i=2196 + i=3706 + + + + SessionSecurityDiagnosticsArray + + i=2243 + i=3706 + + + + EnabledFlag + + i=68 + i=2274 + + + + VendorServerInfo + + i=2033 + i=2253 + + + + ServerRedundancy + + i=3709 + i=2034 + i=2253 + + + + RedundancySupport + + i=68 + i=2296 + + + + Namespaces + + i=11645 + i=2253 + + + + GetMonitoredItems + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.1 + + i=11493 + i=11494 + i=2253 + + + + InputArguments + + i=68 + i=11492 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=11492 + + + + + + i=297 + + + + ServerHandles + + i=7 + + 1 + + 0 + + + + + + + i=297 + + + + ClientHandles + + i=7 + + 1 + + 0 + + + + + + + + + ResendData + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.2 + + i=12874 + i=2253 + + + + InputArguments + + i=68 + i=12873 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + + + SetSubscriptionDurable + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.3 + + i=12750 + i=12751 + i=2253 + + + + InputArguments + + i=68 + i=12749 + + + + + + i=297 + + + + SubscriptionId + + i=7 + + -1 + + + + + + + i=297 + + + + LifetimeInHours + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=12749 + + + + + + i=297 + + + + RevisedLifetimeInHours + + i=7 + + -1 + + + + + + + + + RequestServerStateChange + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/9.4 + + i=12887 + i=2253 + + + + InputArguments + + i=68 + i=12886 + + + + + + i=297 + + + + State + + i=852 + + -1 + + + + + + + i=297 + + + + EstimatedReturnTime + + i=13 + + -1 + + + + + + + i=297 + + + + SecondsTillShutdown + + i=7 + + -1 + + + + + + + i=297 + + + + Reason + + i=21 + + -1 + + + + + + + i=297 + + + + Restart + + i=1 + + -1 + + + + + + + + + CurrentServerId + + i=68 + + + + RedundantServerArray + + i=68 + + + + ServerUriArray + + i=68 + + + + ServerNetworkGroups + + i=68 + + + + HistoryServerCapabilities + + i=11193 + i=11242 + i=11273 + i=11274 + i=11196 + i=11197 + i=11198 + i=11199 + i=11200 + i=11281 + i=11282 + i=11283 + i=11502 + i=11275 + i=11201 + i=19091 + i=2268 + i=2330 + + + + AccessHistoryDataCapability + + i=68 + i=11192 + + + + AccessHistoryEventsCapability + + i=68 + i=11192 + + + + MaxReturnDataValues + + i=68 + i=11192 + + + + MaxReturnEventValues + + i=68 + i=11192 + + + + InsertDataCapability + + i=68 + i=11192 + + + + ReplaceDataCapability + + i=68 + i=11192 + + + + UpdateDataCapability + + i=68 + i=11192 + + + + DeleteRawCapability + + i=68 + i=11192 + + + + DeleteAtTimeCapability + + i=68 + i=11192 + + + + InsertEventCapability + + i=68 + i=11192 + + + + ReplaceEventCapability + + i=68 + i=11192 + + + + UpdateEventCapability + + i=68 + i=11192 + + + + DeleteEventCapability + + i=68 + i=11192 + + + + InsertAnnotationCapability + + i=68 + i=11192 + + + + AggregateFunctions + + i=61 + i=11192 + + + + ServerTimestampSupported + + i=68 + i=11192 + + + + IsDeprecated + Base Info Deprecated Information + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.22 + + i=32 + + Deprecates + + + BitFieldMaskDataType + Base Info BitFieldMaskDataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.18 + + i=9 + + + + SemanticVersionString + Base Info SemanticVersionString + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.41 + + i=12 + + + + KeyValuePair + Base Info KeyValuePair + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.21 + + i=22 + + + + + + + + AdditionalParametersType + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.1 + + i=22 + + + + + + + EphemeralKeyType + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.15 + + i=22 + + + + + + + + EndpointType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.2 + + i=22 + + + + + + + + + + Handle + Base Info Handle DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.42 + + i=7 + + + + TrimmedString + Base Info TrimmedString + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.43 + + i=12 + + + + StateMachineType + Base Info State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.2 + + i=2769 + i=2770 + i=58 + + + + CurrentState + + i=3720 + i=2755 + i=78 + i=2299 + + + + Id + + i=68 + i=78 + i=2769 + + + + LastTransition + + i=3724 + i=2762 + i=80 + i=2299 + + + + Id + + i=68 + i=78 + i=2770 + + + + StateVariableType + Base Info State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.3 + + i=2756 + i=2757 + i=2758 + i=2759 + i=63 + + + + Id + + i=68 + i=78 + i=2755 + + + + Name + + i=68 + i=80 + i=2755 + + + + Number + + i=68 + i=80 + i=2755 + + + + EffectiveDisplayName + + i=68 + i=80 + i=2755 + + + + TransitionVariableType + Base Info State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.4 + + i=2763 + i=2764 + i=2765 + i=2766 + i=11456 + i=63 + + + + Id + + i=68 + i=78 + i=2762 + + + + Name + + i=68 + i=80 + i=2762 + + + + Number + + i=68 + i=80 + i=2762 + + + + TransitionTime + + i=68 + i=80 + i=2762 + + + + EffectiveTransitionTime + + i=68 + i=80 + i=2762 + + + + FiniteStateMachineType + Base Info Finite State Machine Instance + Base Info Available States and Transitions + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.5 + + i=2772 + i=2773 + i=17635 + i=17636 + i=2299 + + + + CurrentState + + i=3728 + i=2760 + i=78 + i=2771 + + + + Id + + i=68 + i=78 + i=2772 + + + + LastTransition + + i=3732 + i=2767 + i=80 + i=2771 + + + + Id + + i=68 + i=78 + i=2773 + + + + AvailableStates + + i=63 + i=80 + i=2771 + + + + AvailableTransitions + + i=63 + i=80 + i=2771 + + + + FiniteStateVariableType + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.6 + + i=2761 + i=2755 + + + + Id + + i=68 + i=78 + i=2760 + + + + FiniteTransitionVariableType + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.7 + + i=2768 + i=2762 + + + + Id + + i=68 + i=78 + i=2767 + + + + StateType + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.8 + + i=2308 + i=58 + + + + StateNumber + + i=68 + i=78 + i=2307 + + + + InitialStateType + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.9 + + i=2307 + + + + TransitionType + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.10 + + i=2312 + i=58 + + + + TransitionNumber + + i=68 + i=78 + i=2310 + + + + ChoiceStateType + Base Info Choice States + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.6.2 + + i=2307 + + + + HasGuard + Base Info Choice States + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.6.3 + + i=47 + + GuardOf + + + GuardVariableType + Base Info Choice States + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.6.4 + + i=63 + + + + ExpressionGuardVariableType + Base Info Choice States + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.6.5 + + i=15129 + i=15113 + + + + Expression + + i=68 + i=78 + i=15128 + + + + ElseGuardVariableType + Base Info Choice States + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.6.6 + + i=15113 + + + + RationalNumberType + Base Info Rational Number + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.20 + + i=17712 + i=17713 + i=63 + + + + Numerator + + i=63 + i=78 + i=17709 + + + + Denominator + + i=63 + i=78 + i=17709 + + + + VectorType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.21 + + i=17715 + i=63 + + + + VectorUnit + + i=68 + i=80 + i=17714 + + + + 3DVectorType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.22 + + i=18769 + i=18770 + i=18771 + i=17714 + + + + X + + i=63 + i=78 + i=17716 + + + + Y + + i=63 + i=78 + i=17716 + + + + Z + + i=63 + i=78 + i=17716 + + + + CartesianCoordinatesType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.23 + + i=18773 + i=63 + + + + LengthUnit + + i=68 + i=80 + i=18772 + + + + 3DCartesianCoordinatesType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.24 + + i=18776 + i=18777 + i=18778 + i=18772 + + + + X + + i=63 + i=78 + i=18774 + + + + Y + + i=63 + i=78 + i=18774 + + + + Z + + i=63 + i=78 + i=18774 + + + + OrientationType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.25 + + i=18780 + i=63 + + + + AngleUnit + + i=68 + i=80 + i=18779 + + + + 3DOrientationType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.26 + + i=18783 + i=18784 + i=18785 + i=18779 + + + + A + + i=63 + i=78 + i=18781 + + + + B + + i=63 + i=78 + i=18781 + + + + C + + i=63 + i=78 + i=18781 + + + + FrameType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.27 + + i=18801 + i=18787 + i=18788 + i=18789 + i=18790 + i=63 + + + + CartesianCoordinates + + i=18772 + i=78 + i=18786 + + + + Orientation + + i=18779 + i=78 + i=18786 + + + + Constant + + i=68 + i=80 + i=18786 + + + + BaseFrame + + i=63 + i=80 + i=18786 + + + + FixedBase + + i=68 + i=80 + i=18786 + + + + 3DFrameType + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/7.28 + + i=18796 + i=18792 + i=18786 + + + + CartesianCoordinates + + i=18798 + i=18799 + i=18800 + i=18774 + i=78 + i=18791 + + + + X + + i=63 + i=78 + i=18796 + + + + Y + + i=63 + i=78 + i=18796 + + + + Z + + i=63 + i=78 + i=18796 + + + + Orientation + + i=19074 + i=19075 + i=19076 + i=18781 + i=78 + i=18791 + + + + A + + i=63 + i=78 + i=18792 + + + + B + + i=63 + i=78 + i=18792 + + + + C + + i=63 + i=78 + i=18792 + + + + RationalNumber + Base Info Rational Number + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.22 + + i=22 + + + + + + + + Vector + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.23 + + i=22 + + + + + 3DVector + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.24 + + i=18807 + + + + + + + + + CartesianCoordinates + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.25 + + i=22 + + + + + 3DCartesianCoordinates + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.26 + + i=18809 + + + + + + + + + Orientation + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.27 + + i=22 + + + + + 3DOrientation + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.28 + + i=18811 + + + + + + + + + Frame + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.29 + + i=22 + + + + + 3DFrame + Base Info Spatial Data + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.30 + + i=18813 + + + + + + + + TransitionEventType + Base Info Finite State Machine Instance + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.16 + + i=2774 + i=2775 + i=2776 + i=2041 + + + + Transition + + i=3754 + i=2762 + i=78 + i=2311 + + + + Id + + i=68 + i=78 + i=2774 + + + + FromState + + i=3746 + i=2755 + i=78 + i=2311 + + + + Id + + i=68 + i=78 + i=2775 + + + + ToState + + i=3750 + i=2755 + i=78 + i=2311 + + + + Id + + i=68 + i=78 + i=2776 + + + + AuditUpdateStateEventType + Auditing UpdateStates + https://reference.opcfoundation.org/v105/Core/docs/Part16/4.4.17 + + i=2777 + i=2778 + i=2127 + + + + OldStateId + + i=68 + i=78 + i=2315 + + + + NewStateId + + i=68 + i=78 + i=2315 + + + + OpenFileMode + + i=11940 + i=29 + + + + + + + + + + EnumValues + + i=68 + i=11939 + + + + + + i=7616 + + + + 1 + + Read + + + + + + + i=7616 + + + + 2 + + Write + + + + + + + i=7616 + + + + 4 + + EraseExisting + + + + + + + i=7616 + + + + 8 + + Append + + + + + + + + + FileDirectoryType + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.1 + + i=13354 + i=13366 + i=13387 + i=13390 + i=13393 + i=13395 + i=61 + + + + <FileDirectoryName> + + i=13355 + i=13358 + i=17718 + i=13363 + i=13353 + i=11508 + i=13353 + + + + CreateDirectory + + i=13356 + i=13357 + i=78 + i=13354 + + + + InputArguments + + i=68 + i=78 + i=13355 + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13355 + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + CreateFile + + i=13359 + i=13360 + i=78 + i=13354 + + + + InputArguments + + i=68 + i=78 + i=13358 + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13358 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Delete + + i=17719 + i=78 + i=13354 + + + + InputArguments + + i=68 + i=78 + i=17718 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + MoveOrCopy + + i=13364 + i=13365 + i=78 + i=13354 + + + + InputArguments + + i=68 + i=78 + i=13363 + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13363 + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + <FileName> + + i=13367 + i=13368 + i=13369 + i=13370 + i=13372 + i=13375 + i=13377 + i=13380 + i=13382 + i=13385 + i=11575 + i=11508 + i=13353 + + + + Size + + i=68 + i=78 + i=13366 + + + + Writable + + i=68 + i=78 + i=13366 + + + + UserWritable + + i=68 + i=78 + i=13366 + + + + OpenCount + + i=68 + i=78 + i=13366 + + + + Open + + i=13373 + i=13374 + i=78 + i=13366 + + + + InputArguments + + i=68 + i=78 + i=13372 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13372 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=13376 + i=78 + i=13366 + + + + InputArguments + + i=68 + i=78 + i=13375 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=13378 + i=13379 + i=78 + i=13366 + + + + InputArguments + + i=68 + i=78 + i=13377 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13377 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=13381 + i=78 + i=13366 + + + + InputArguments + + i=68 + i=78 + i=13380 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=13383 + i=13384 + i=78 + i=13366 + + + + InputArguments + + i=68 + i=78 + i=13382 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13382 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=13386 + i=78 + i=13366 + + + + InputArguments + + i=68 + i=78 + i=13385 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + CreateDirectory + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.3 + + i=13388 + i=13389 + i=78 + i=13353 + + + + InputArguments + + i=68 + i=78 + i=13387 + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13387 + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + CreateFile + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.4 + + i=13391 + i=13392 + i=78 + i=13353 + + + + InputArguments + + i=68 + i=78 + i=13390 + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13390 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Delete + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.5 + + i=13394 + i=78 + i=13353 + + + + InputArguments + + i=68 + i=78 + i=13393 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + MoveOrCopy + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.6 + + i=13396 + i=13397 + i=78 + i=13353 + + + + InputArguments + + i=68 + i=78 + i=13395 + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13395 + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + FileSystem + + i=16348 + i=16351 + i=16354 + i=16356 + i=13353 + + + + CreateDirectory + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.3 + + i=16349 + i=16350 + i=16314 + + + + InputArguments + + i=68 + i=16348 + + + + + + i=297 + + + + DirectoryName + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=16348 + + + + + + i=297 + + + + DirectoryNodeId + + i=17 + + -1 + + + + + + + + + CreateFile + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.4 + + i=16352 + i=16353 + i=16314 + + + + InputArguments + + i=68 + i=16351 + + + + + + i=297 + + + + FileName + + i=12 + + -1 + + + + + + + i=297 + + + + RequestFileOpen + + i=1 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=16351 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Delete + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.5 + + i=16355 + i=16314 + + + + InputArguments + + i=68 + i=16354 + + + + + + i=297 + + + + ObjectToDelete + + i=17 + + -1 + + + + + + + + + MoveOrCopy + Base Info FileDirectoryType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.3.6 + + i=16357 + i=16358 + i=16314 + + + + InputArguments + + i=68 + i=16356 + + + + + + i=297 + + + + ObjectToMoveOrCopy + + i=17 + + -1 + + + + + + + i=297 + + + + TargetDirectory + + i=17 + + -1 + + + + + + + i=297 + + + + CreateCopy + + i=1 + + -1 + + + + + + + i=297 + + + + NewName + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=16356 + + + + + + i=297 + + + + NewNodeId + + i=17 + + -1 + + + + + + + + + TemporaryFileTransferType + Base Info TemporaryFileTransferType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.4.1 + + i=15745 + i=15746 + i=15749 + i=15751 + i=15754 + i=58 + + + + ClientProcessingTimeout + + i=68 + i=78 + i=15744 + + + + GenerateFileForRead + Base Info TemporaryFileTransferType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.4.3 + + i=15747 + i=15748 + i=78 + i=15744 + + + + InputArguments + + i=68 + i=78 + i=15746 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15746 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + GenerateFileForWrite + Base Info TemporaryFileTransferType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.4.4 + + i=16359 + i=15750 + i=78 + i=15744 + + + + InputArguments + + i=68 + i=78 + i=15749 + + + + + + i=297 + + + + GenerateOptions + + i=24 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15749 + + + + + + i=297 + + + + FileNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndCommit + Base Info TemporaryFileTransferType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.4.5 + + i=15752 + i=15753 + i=78 + i=15744 + + + + InputArguments + + i=68 + i=78 + i=15751 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15751 + + + + + + i=297 + + + + CompletionStateMachine + + i=17 + + -1 + + + + + + + + + <TransferState> + + i=15755 + i=15794 + i=15803 + i=11508 + i=15744 + + + + CurrentState + + i=15756 + i=2760 + i=78 + i=15754 + + + + Id + + i=68 + i=78 + i=15755 + + + + Reset + https://reference.opcfoundation.org/v105/Core/docs/Part21/9.3.6 + + i=78 + i=15754 + + + + FileTransferStateMachineType + Base Info TemporaryFileTransferType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.4.6 + + i=15815 + i=15817 + i=15819 + i=15821 + i=15823 + i=15825 + i=15827 + i=15829 + i=15831 + i=15833 + i=15835 + i=15837 + i=15839 + i=15841 + i=15843 + i=2771 + + + + Idle + + i=15816 + i=15825 + i=15829 + i=15831 + i=15833 + i=15841 + i=2309 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15815 + + + 1 + + + + ReadPrepare + + i=15818 + i=15825 + i=15827 + i=15835 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15817 + + + 2 + + + + ReadTransfer + + i=15820 + i=15827 + i=15829 + i=15837 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15819 + + + 3 + + + + ApplyWrite + + i=15822 + i=15831 + i=15833 + i=15839 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15821 + + + 4 + + + + Error + + i=15824 + i=15835 + i=15837 + i=15839 + i=15841 + i=2307 + i=15803 + + + + StateNumber + + i=68 + i=78 + i=15823 + + + 5 + + + + IdleToReadPrepare + + i=15826 + i=15815 + i=15817 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15825 + + + 12 + + + + ReadPrepareToReadTransfer + + i=15828 + i=15817 + i=15819 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15827 + + + 23 + + + + ReadTransferToIdle + + i=15830 + i=15819 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15829 + + + 31 + + + + IdleToApplyWrite + + i=15832 + i=15815 + i=15821 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15831 + + + 14 + + + + ApplyWriteToIdle + + i=15834 + i=15821 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15833 + + + 41 + + + + ReadPrepareToError + + i=15836 + i=15817 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15835 + + + 25 + + + + ReadTransferToError + + i=15838 + i=15819 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15837 + + + 35 + + + + ApplyWriteToError + + i=15840 + i=15821 + i=15823 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15839 + + + 45 + + + + ErrorToIdle + + i=15842 + i=15823 + i=15815 + i=2311 + i=2310 + i=15803 + + + + TransitionNumber + + i=68 + i=78 + i=15841 + + + 51 + + + + Reset + Base Info TemporaryFileTransferType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/1 + + i=78 + i=15803 + + + + RoleSetType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.2.1 + + i=15608 + i=15997 + i=16000 + i=58 + + + + <RoleName> + + i=16162 + i=15620 + i=11508 + i=15607 + + + + Identities + + i=68 + i=78 + i=15608 + + + + AddRole + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.2.2 + + i=15998 + i=15999 + i=78 + i=15607 + + + + InputArguments + + i=68 + i=78 + i=15997 + + + + + + i=297 + + + + RoleName + + i=12 + + -1 + + + + + + + i=297 + + + + NamespaceUri + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15997 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + RemoveRole + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.2.3 + + i=16001 + i=78 + i=15607 + + + + InputArguments + + i=68 + i=78 + i=16000 + + + + + + i=297 + + + + RoleNodeId + + i=17 + + -1 + + + + + + + + + RoleType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.1 + + i=16173 + i=15410 + i=16174 + i=15411 + i=16175 + i=24139 + i=15624 + i=15626 + i=16176 + i=16178 + i=16180 + i=16182 + i=58 + + + + Identities + + i=68 + i=78 + i=15620 + + + + ApplicationsExclude + + i=68 + i=80 + i=15620 + + + + Applications + + i=68 + i=80 + i=15620 + + + + EndpointsExclude + + i=68 + i=80 + i=15620 + + + + Endpoints + + i=68 + i=80 + i=15620 + + + + CustomConfiguration + + i=68 + i=80 + i=15620 + + + + AddIdentity + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.5 + + i=15625 + i=80 + i=15620 + + + + InputArguments + + i=68 + i=78 + i=15624 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.6 + + i=15627 + i=80 + i=15620 + + + + InputArguments + + i=68 + i=78 + i=15626 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.7 + + i=16177 + i=80 + i=15620 + + + + InputArguments + + i=68 + i=78 + i=16176 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.8 + + i=16179 + i=80 + i=15620 + + + + InputArguments + + i=68 + i=78 + i=16178 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.9 + + i=16181 + i=80 + i=15620 + + + + InputArguments + + i=68 + i=78 + i=16180 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.10 + + i=16183 + i=80 + i=15620 + + + + InputArguments + + i=68 + i=78 + i=16182 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + IdentityCriteriaType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.4 + + i=15633 + i=29 + + + + The rule specifies a UserName from a UserNameIdentityToken. + + + The rule specifies the Thumbprint of a user or CA Certificate. + + + The rule is a Role specified in an Access Token. + + + The rule is a user group specified in the Access Token. + + + The rule specifies Anonymous UserIdentityToken. + + + The rule specifies any non Anonymous UserIdentityToken. + + + The rule specifies the combination of an application identity and an Anonymous UserIdentityToken. + + + The rule specifies the X509 subject name of a user or CA Certificate. + + + + + EnumValues + + i=68 + i=15632 + + + + + + i=7616 + + + + 1 + + UserName + + + The rule specifies a UserName from a UserNameIdentityToken. + + + + + + + i=7616 + + + + 2 + + Thumbprint + + + The rule specifies the Thumbprint of a user or CA Certificate. + + + + + + + i=7616 + + + + 3 + + Role + + + The rule is a Role specified in an Access Token. + + + + + + + i=7616 + + + + 4 + + GroupId + + + The rule is a user group specified in the Access Token. + + + + + + + i=7616 + + + + 5 + + Anonymous + + + The rule specifies Anonymous UserIdentityToken. + + + + + + + i=7616 + + + + 6 + + AuthenticatedUser + + + The rule specifies any non Anonymous UserIdentityToken. + + + + + + + i=7616 + + + + 7 + + Application + + + The rule specifies the combination of an application identity and an Anonymous UserIdentityToken. + + + + + + + i=7616 + + + + 8 + + X509Subject + + + The rule specifies the X509 subject name of a user or CA Certificate. + + + + + + + + + IdentityMappingRuleType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.4.3 + + i=22 + + + + + + + + RoleMappingRuleChangedAuditEventType + Security Role Server Base Eventing + https://reference.opcfoundation.org/v105/Core/docs/Part18/4.5 + + i=2127 + + + + Anonymous + The Role has very limited access for use when a Session has anonymous credentials. + + i=16192 + i=15412 + i=16193 + i=15413 + i=16194 + i=15648 + i=15650 + i=16195 + i=16197 + i=16199 + i=16201 + i=15606 + i=15620 + + + + Identities + + i=68 + i=15644 + + + + ApplicationsExclude + + i=68 + i=15644 + + + + Applications + + i=68 + i=15644 + + + + EndpointsExclude + + i=68 + i=15644 + + + + Endpoints + + i=68 + i=15644 + + + + AddIdentity + + i=15649 + i=15644 + + + + InputArguments + + i=68 + i=15648 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=15651 + i=15644 + + + + InputArguments + + i=68 + i=15650 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16196 + i=15644 + + + + InputArguments + + i=68 + i=16195 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16198 + i=15644 + + + + InputArguments + + i=68 + i=16197 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16200 + i=15644 + + + + InputArguments + + i=68 + i=16199 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16202 + i=15644 + + + + InputArguments + + i=68 + i=16201 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + AuthenticatedUser + The Role has limited access for use when a Session has valid non-anonymous credentials but has not been explicity granted access to a Role. + + i=16203 + i=15414 + i=16204 + i=15415 + i=16205 + i=24141 + i=15660 + i=15662 + i=16206 + i=16208 + i=16210 + i=16212 + i=15606 + i=15620 + + + + Identities + + i=68 + i=15656 + + + + ApplicationsExclude + + i=68 + i=15656 + + + + Applications + + i=68 + i=15656 + + + + EndpointsExclude + + i=68 + i=15656 + + + + Endpoints + + i=68 + i=15656 + + + + CustomConfiguration + + i=68 + i=15656 + + + + AddIdentity + + i=15661 + i=15656 + + + + InputArguments + + i=68 + i=15660 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=15663 + i=15656 + + + + InputArguments + + i=68 + i=15662 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16207 + i=15656 + + + + InputArguments + + i=68 + i=16206 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16209 + i=15656 + + + + InputArguments + + i=68 + i=16208 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16211 + i=15656 + + + + InputArguments + + i=68 + i=16210 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16213 + i=15656 + + + + InputArguments + + i=68 + i=16212 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + Observer + The Role is allowed to browse, read live data, read historical data/events or subscribe to data/events. + + i=16214 + i=15416 + i=16215 + i=15417 + i=16216 + i=24142 + i=15672 + i=15674 + i=16217 + i=16219 + i=16221 + i=16223 + i=15606 + i=15620 + + + + Identities + + i=68 + i=15668 + + + + ApplicationsExclude + + i=68 + i=15668 + + + + Applications + + i=68 + i=15668 + + + + EndpointsExclude + + i=68 + i=15668 + + + + Endpoints + + i=68 + i=15668 + + + + CustomConfiguration + + i=68 + i=15668 + + + + AddIdentity + + i=15673 + i=15668 + + + + InputArguments + + i=68 + i=15672 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=15675 + i=15668 + + + + InputArguments + + i=68 + i=15674 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16218 + i=15668 + + + + InputArguments + + i=68 + i=16217 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16220 + i=15668 + + + + InputArguments + + i=68 + i=16219 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16222 + i=15668 + + + + InputArguments + + i=68 + i=16221 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16224 + i=15668 + + + + InputArguments + + i=68 + i=16223 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + Operator + The Role is allowed to browse, read live data, read historical data/events or subscribe to data/events. + + i=16225 + i=15418 + i=16226 + i=15423 + i=16227 + i=24143 + i=15684 + i=15686 + i=16228 + i=16230 + i=16232 + i=16234 + i=15606 + i=15620 + + + + Identities + + i=68 + i=15680 + + + + ApplicationsExclude + + i=68 + i=15680 + + + + Applications + + i=68 + i=15680 + + + + EndpointsExclude + + i=68 + i=15680 + + + + Endpoints + + i=68 + i=15680 + + + + CustomConfiguration + + i=68 + i=15680 + + + + AddIdentity + + i=15685 + i=15680 + + + + InputArguments + + i=68 + i=15684 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=15687 + i=15680 + + + + InputArguments + + i=68 + i=15686 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16229 + i=15680 + + + + InputArguments + + i=68 + i=16228 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16231 + i=15680 + + + + InputArguments + + i=68 + i=16230 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16233 + i=15680 + + + + InputArguments + + i=68 + i=16232 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16235 + i=15680 + + + + InputArguments + + i=68 + i=16234 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + Engineer + The Role is allowed to browse, read live data, read and update historical data/events, call methods or subscribe to data/events. + + i=16236 + i=15424 + i=16237 + i=15425 + i=16238 + i=24144 + i=16041 + i=16043 + i=16239 + i=16241 + i=16243 + i=16245 + i=15606 + i=15620 + + + + Identities + + i=68 + i=16036 + + + + ApplicationsExclude + + i=68 + i=16036 + + + + Applications + + i=68 + i=16036 + + + + EndpointsExclude + + i=68 + i=16036 + + + + Endpoints + + i=68 + i=16036 + + + + CustomConfiguration + + i=68 + i=16036 + + + + AddIdentity + + i=16042 + i=16036 + + + + InputArguments + + i=68 + i=16041 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=16044 + i=16036 + + + + InputArguments + + i=68 + i=16043 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16240 + i=16036 + + + + InputArguments + + i=68 + i=16239 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16242 + i=16036 + + + + InputArguments + + i=68 + i=16241 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16244 + i=16036 + + + + InputArguments + + i=68 + i=16243 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16246 + i=16036 + + + + InputArguments + + i=68 + i=16245 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + Supervisor + The Role is allowed to browse, read live data, read and historical data/events, call methods or subscribe to data/events. + + i=16247 + i=15426 + i=16248 + i=15427 + i=16249 + i=24145 + i=15696 + i=15698 + i=16250 + i=16252 + i=16254 + i=16256 + i=15606 + i=15620 + + + + Identities + + i=68 + i=15692 + + + + ApplicationsExclude + + i=68 + i=15692 + + + + Applications + + i=68 + i=15692 + + + + EndpointsExclude + + i=68 + i=15692 + + + + Endpoints + + i=68 + i=15692 + + + + CustomConfiguration + + i=68 + i=15692 + + + + AddIdentity + + i=15697 + i=15692 + + + + InputArguments + + i=68 + i=15696 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=15699 + i=15692 + + + + InputArguments + + i=68 + i=15698 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16251 + i=15692 + + + + InputArguments + + i=68 + i=16250 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16253 + i=15692 + + + + InputArguments + + i=68 + i=16252 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16255 + i=15692 + + + + InputArguments + + i=68 + i=16254 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16257 + i=15692 + + + + InputArguments + + i=68 + i=16256 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + ConfigureAdmin + The Role is allowed to change the non-security related configuration settings. + + i=16269 + i=15428 + i=16270 + i=15429 + i=16271 + i=24146 + i=15720 + i=15722 + i=16272 + i=16274 + i=16276 + i=16278 + i=15606 + i=15620 + + + + Identities + + i=68 + i=15716 + + + + ApplicationsExclude + + i=68 + i=15716 + + + + Applications + + i=68 + i=15716 + + + + EndpointsExclude + + i=68 + i=15716 + + + + Endpoints + + i=68 + i=15716 + + + + CustomConfiguration + + i=68 + i=15716 + + + + AddIdentity + + i=15721 + i=15716 + + + + InputArguments + + i=68 + i=15720 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=15723 + i=15716 + + + + InputArguments + + i=68 + i=15722 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16273 + i=15716 + + + + InputArguments + + i=68 + i=16272 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16275 + i=15716 + + + + InputArguments + + i=68 + i=16274 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16277 + i=15716 + + + + InputArguments + + i=68 + i=16276 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16279 + i=15716 + + + + InputArguments + + i=68 + i=16278 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + SecurityAdmin + The Role is allowed to change security related settings. + + i=16258 + i=15430 + i=16259 + i=15527 + i=16260 + i=24147 + i=15708 + i=15710 + i=16261 + i=16263 + i=16265 + i=16267 + i=15606 + i=15620 + + + + Identities + + i=68 + i=15704 + + + + ApplicationsExclude + + i=68 + i=15704 + + + + Applications + + i=68 + i=15704 + + + + EndpointsExclude + + i=68 + i=15704 + + + + Endpoints + + i=68 + i=15704 + + + + CustomConfiguration + + i=68 + i=15704 + + + + AddIdentity + + i=15709 + i=15704 + + + + InputArguments + + i=68 + i=15708 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=15711 + i=15704 + + + + InputArguments + + i=68 + i=15710 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=16262 + i=15704 + + + + InputArguments + + i=68 + i=16261 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=16264 + i=15704 + + + + InputArguments + + i=68 + i=16263 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=16266 + i=15704 + + + + InputArguments + + i=68 + i=16265 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=16268 + i=15704 + + + + InputArguments + + i=68 + i=16267 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + SecurityKeyServerAdmin + This Role allows an administrator to manage SecurityGroups and PushTargets on a SKS. This includes executing methods related to management of SecurityGroups and PushTargets on an SKS. + + i=25566 + i=25567 + i=25568 + i=25569 + i=25570 + i=25571 + i=25572 + i=25574 + i=25576 + i=25578 + i=25580 + i=25582 + i=15606 + i=15620 + + + + Identities + + i=68 + i=25565 + + + + ApplicationsExclude + + i=68 + i=25565 + + + + Applications + + i=68 + i=25565 + + + + EndpointsExclude + + i=68 + i=25565 + + + + Endpoints + + i=68 + i=25565 + + + + CustomConfiguration + + i=68 + i=25565 + + + + AddIdentity + + i=25573 + i=25565 + + + + InputArguments + + i=68 + i=25572 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=25575 + i=25565 + + + + InputArguments + + i=68 + i=25574 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=25577 + i=25565 + + + + InputArguments + + i=68 + i=25576 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=25579 + i=25565 + + + + InputArguments + + i=68 + i=25578 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=25581 + i=25565 + + + + InputArguments + + i=68 + i=25580 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=25583 + i=25565 + + + + InputArguments + + i=68 + i=25582 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + SecurityKeyServerAccess + + This Role allows a PubSub Application to access an SKS to pull keys. It is the default Role for pull but it is expected that different custom Roles are used for different SecurityGroups. + + + i=25604 + i=25605 + i=25606 + i=25607 + i=25608 + i=25609 + i=25610 + i=25612 + i=25614 + i=25616 + i=25618 + i=25620 + i=15606 + i=15620 + + + + Identities + + i=68 + i=25603 + + + + ApplicationsExclude + + i=68 + i=25603 + + + + Applications + + i=68 + i=25603 + + + + EndpointsExclude + + i=68 + i=25603 + + + + Endpoints + + i=68 + i=25603 + + + + CustomConfiguration + + i=68 + i=25603 + + + + AddIdentity + + i=25611 + i=25603 + + + + InputArguments + + i=68 + i=25610 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=25613 + i=25603 + + + + InputArguments + + i=68 + i=25612 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=25615 + i=25603 + + + + InputArguments + + i=68 + i=25614 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=25617 + i=25603 + + + + InputArguments + + i=68 + i=25616 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=25619 + i=25603 + + + + InputArguments + + i=68 + i=25618 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=25621 + i=25603 + + + + InputArguments + + i=68 + i=25620 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + SecurityKeyServerPush + + This Role allows an SKS to push security keys to PubSub Applications. This includes executing methods related to PubSub security. + + + i=25585 + i=25586 + i=25587 + i=25588 + i=25589 + i=25590 + i=25591 + i=25593 + i=25595 + i=25597 + i=25599 + i=25601 + i=15606 + i=15620 + + + + Identities + + i=68 + i=25584 + + + + ApplicationsExclude + + i=68 + i=25584 + + + + Applications + + i=68 + i=25584 + + + + EndpointsExclude + + i=68 + i=25584 + + + + Endpoints + + i=68 + i=25584 + + + + CustomConfiguration + + i=68 + i=25584 + + + + AddIdentity + + i=25592 + i=25584 + + + + InputArguments + + i=68 + i=25591 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + RemoveIdentity + + i=25594 + i=25584 + + + + InputArguments + + i=68 + i=25593 + + + + + + i=297 + + + + Rule + + i=15634 + + -1 + + + + + + + + + AddApplication + + i=25596 + i=25584 + + + + InputArguments + + i=68 + i=25595 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + RemoveApplication + + i=25598 + i=25584 + + + + InputArguments + + i=68 + i=25597 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + + + AddEndpoint + + i=25600 + i=25584 + + + + InputArguments + + i=68 + i=25599 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + RemoveEndpoint + + i=25602 + i=25584 + + + + InputArguments + + i=68 + i=25601 + + + + + + i=297 + + + + Endpoint + + i=15528 + + -1 + + + + + + + + + DictionaryEntryType + Address Space Dictionary Entries + https://reference.opcfoundation.org/v105/Core/docs/Part19/5.1 + + i=17590 + i=58 + + + + <DictionaryEntryName> + + i=17589 + i=11508 + i=17589 + + + + DictionaryFolderType + Address Space Dictionary Entries + https://reference.opcfoundation.org/v105/Core/docs/Part19/5.2 + + i=17592 + i=17593 + i=61 + + + + <DictionaryFolderName> + + i=17591 + i=11508 + i=17591 + + + + <DictionaryEntryName> + + i=17589 + i=11508 + i=17591 + + + + Dictionaries + Address Space Dictionary Entries + https://reference.opcfoundation.org/v105/Core/docs/Part19/8.1 + + i=2253 + i=17591 + + + + HasDictionaryEntry + Address Space Dictionary Entries + https://reference.opcfoundation.org/v105/Core/docs/Part19/6.1 + + i=32 + + DictionaryEntryOf + + + IrdiDictionaryEntryType + Address Space Dictionary IRDI + https://reference.opcfoundation.org/v105/Core/docs/Part19/5.3 + + i=17589 + + + + UriDictionaryEntryType + Address Space Dictionary URI + https://reference.opcfoundation.org/v105/Core/docs/Part19/5.4 + + i=17589 + + + + BaseInterfaceType + Address Space Interfaces + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.9 + + i=58 + + + + InterfaceTypes + Address Space Interfaces + https://reference.opcfoundation.org/v105/Core/docs/Part5/8.2.11 + + i=17602 + i=86 + i=61 + + + + HasInterface + Address Space Interfaces + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.20 + + i=32 + + InterfaceOf + + + HasAddIn + Address Space AddIn Reference + https://reference.opcfoundation.org/v105/Core/docs/Part5/11.21 + + i=47 + + AddInOf + + + CurrencyUnitType + Base Info Currency + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.2 + + i=22 + + + + + + + + + + CurrencyUnit + + i=68 + + + + IOrderedObjectType + Base Info OrderedList + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.11 + + i=23517 + i=17602 + + + + NumberInList + + i=68 + i=78 + i=23513 + + + + OrderedListType + Base Info OrderedList + https://reference.opcfoundation.org/v105/Core/docs/Part5/6.10 + + i=23519 + i=23525 + i=2133 + i=58 + + + + <OrderedObject> + + i=23521 + i=23513 + i=58 + i=11508 + i=23518 + + + + NumberInList + + i=68 + i=78 + i=23519 + + + + NodeVersion + + i=68 + i=80 + i=23518 + + + + DataItemType + Data Access DataItems + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.1 + + i=2366 + i=2367 + i=63 + + + + Definition + + i=68 + i=80 + i=2365 + + + + ValuePrecision + + i=68 + i=80 + i=2365 + + + + BaseAnalogType + Data Access BaseAnalogType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.2/#5.3.2.2 + + i=17567 + i=17568 + i=17569 + i=2365 + + + + InstrumentRange + + i=68 + i=80 + i=15318 + + + + EURange + + i=68 + i=80 + i=15318 + + + + EngineeringUnits + + i=68 + i=80 + i=15318 + + + + AnalogItemType + Data Access AnalogItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.2/#5.3.2.3 + + i=2369 + i=15318 + + + + EURange + + i=68 + i=78 + i=2368 + + + + AnalogUnitType + Data Access AnalogUnitType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.2/#5.3.2.4 + + i=17502 + i=15318 + + + + EngineeringUnits + + i=68 + i=78 + i=17497 + + + + AnalogUnitRangeType + Data Access AnalogUnitRangeType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.2/#5.3.2.5 + + i=17575 + i=2368 + + + + EngineeringUnits + + i=68 + i=78 + i=17570 + + + + DiscreteItemType + Data Access DiscreteItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.3/#5.3.3.1 + + i=2365 + + + + TwoStateDiscreteType + Data Access TwoState + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.3/#5.3.3.2 + + i=2374 + i=2375 + i=2372 + + + + FalseState + + i=68 + i=78 + i=2373 + + + + TrueState + + i=68 + i=78 + i=2373 + + + + MultiStateDiscreteType + Data Access MultiState + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.3/#5.3.3.3 + + i=2377 + i=2372 + + + + EnumStrings + + i=68 + i=78 + i=2376 + + + + MultiStateValueDiscreteType + Data Access MultiStateValueDiscrete + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.3/#5.3.3.4 + + i=11241 + i=11461 + i=2372 + + + + EnumValues + + i=68 + i=78 + i=11238 + + + + ValueAsText + + i=68 + i=78 + i=11238 + + + + ArrayItemType + Data Access ArrayItem2Type + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.4/#5.3.4.1 + + i=12024 + i=12025 + i=12026 + i=12027 + i=12028 + i=2365 + + + + InstrumentRange + + i=68 + i=80 + i=12021 + + + + EURange + + i=68 + i=78 + i=12021 + + + + EngineeringUnits + + i=68 + i=78 + i=12021 + + + + Title + + i=68 + i=78 + i=12021 + + + + AxisScaleType + + i=68 + i=78 + i=12021 + + + + YArrayItemType + Data Access YArrayItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.4/#5.3.4.2 + + i=12037 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12029 + + + + XYArrayItemType + Data Access XYArrayItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.4/#5.3.4.3 + + i=12046 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12038 + + + + ImageItemType + Data Access ImageItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.4/#5.3.4.4 + + i=12055 + i=12056 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12047 + + + + YAxisDefinition + + i=68 + i=78 + i=12047 + + + + CubeItemType + Data Access CubeItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.4/#5.3.4.5 + + i=12065 + i=12066 + i=12067 + i=12021 + + + + XAxisDefinition + + i=68 + i=78 + i=12057 + + + + YAxisDefinition + + i=68 + i=78 + i=12057 + + + + ZAxisDefinition + + i=68 + i=78 + i=12057 + + + + NDimensionArrayItemType + Data Access NDimensionArrayItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.3.4/#5.3.4.6 + + i=12076 + i=12021 + + + + AxisDefinition + + i=68 + i=78 + i=12068 + + + + TwoStateVariableType + A & C Basic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.2 + + i=8996 + i=9000 + i=9001 + i=11110 + i=11111 + i=2755 + + + + Id + + i=68 + i=78 + i=8995 + + + + TransitionTime + + i=68 + i=80 + i=8995 + + + + EffectiveTransitionTime + + i=68 + i=80 + i=8995 + + + + TrueState + + i=68 + i=80 + i=8995 + + + + FalseState + + i=68 + i=80 + i=8995 + + + + ConditionVariableType + A & C Basic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.3 + + i=9003 + i=63 + + + + SourceTimestamp + + i=68 + i=78 + i=9002 + + + + HasTrueSubState + A & C Basic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.4.2 + + i=32 + + IsTrueSubStateOf + + + HasFalseSubState + A & C Basic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.4.3 + + i=32 + + IsFalseSubStateOf + + + HasAlarmSuppressionGroup + A & C Suppression Group + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.4.4 + + i=47 + + IsAlarmSuppressionGroupOf + + + AlarmGroupMember + A & C Suppression Group + A & C First in Group Alarm + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.4.5 + + i=35 + + MemberOfAlarmGroup + + + AlarmSuppressionGroupMember + A & C Suppression Group + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.4.6 + + i=16362 + + MemberOfAlarmSuppressionGroup + + + ConditionType + A & C Basic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.5.2 + + i=11112 + i=11113 + i=9009 + i=9010 + i=3874 + i=32060 + i=9011 + i=9020 + i=9022 + i=9024 + i=9026 + i=9028 + i=9027 + i=9029 + i=3875 + i=12912 + i=2041 + + + + ConditionClassId + + i=68 + i=78 + i=2782 + + + + ConditionClassName + + i=68 + i=78 + i=2782 + + + + ConditionName + + i=68 + i=78 + i=2782 + + + + BranchId + + i=68 + i=78 + i=2782 + + + + Retain + + i=68 + i=78 + i=2782 + + + + SupportsFilteredRetain + + i=68 + i=2782 + + + + EnabledState + + i=9012 + i=9015 + i=9016 + i=9017 + i=9018 + i=9019 + i=8995 + i=78 + i=2782 + + + + Id + + i=68 + i=78 + i=9011 + + + + EffectiveDisplayName + + i=68 + i=80 + i=9011 + + + + TransitionTime + + i=68 + i=80 + i=9011 + + + + EffectiveTransitionTime + + i=68 + i=80 + i=9011 + + + + TrueState + + i=68 + i=9011 + + + + en + Enabled + + + + + FalseState + + i=68 + i=9011 + + + + en + Disabled + + + + + Quality + + i=9021 + i=9002 + i=78 + i=2782 + + + + SourceTimestamp + + i=68 + i=78 + i=9020 + + + + LastSeverity + + i=9023 + i=9002 + i=78 + i=2782 + + + + SourceTimestamp + + i=68 + i=78 + i=9022 + + + + Comment + + i=9025 + i=9002 + i=78 + i=2782 + + + + SourceTimestamp + + i=68 + i=78 + i=9024 + + + + ClientUserId + + i=68 + i=78 + i=2782 + + + + Disable + A & C Enable + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.5.4 + + i=2803 + i=78 + i=2782 + + + + Enable + A & C Enable + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.5.5 + + i=2803 + i=78 + i=2782 + + + + AddComment + A & C Comment + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.5.6 + + i=9030 + i=2829 + i=78 + i=2782 + + + + InputArguments + + i=68 + i=78 + i=9029 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + ConditionRefresh + A & C Refresh + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.5.7 + + i=3876 + i=2787 + i=2788 + i=2782 + + + + InputArguments + + i=68 + i=78 + i=3875 + + + + + + i=297 + + + + SubscriptionId + + i=288 + + -1 + + + The identifier for the subscription to refresh. + + + + + + + + + ConditionRefresh2 + A & C Refresh2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.5.8 + + i=12913 + i=2787 + i=2788 + i=2782 + + + + InputArguments + + i=68 + i=78 + i=12912 + + + + + + i=297 + + + + SubscriptionId + + i=288 + + -1 + + + The identifier for the subscription to refresh. + + + + + + + i=297 + + + + MonitoredItemId + + i=288 + + -1 + + + The identifier for the monitored item to refresh. + + + + + + + + + DialogConditionType + A & C Dialog + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.6.2 + + i=9035 + i=9055 + i=2831 + i=9064 + i=9065 + i=9066 + i=9067 + i=9068 + i=9069 + i=24312 + i=2782 + + + + EnabledState + + i=9036 + i=9055 + i=8995 + i=78 + i=2830 + + + + Id + + i=68 + i=78 + i=9035 + + + + DialogState + + i=9056 + i=9060 + i=9062 + i=9063 + i=9035 + i=8995 + i=78 + i=2830 + + + + Id + + i=68 + i=78 + i=9055 + + + + TransitionTime + + i=68 + i=80 + i=9055 + + + + TrueState + + i=68 + i=9055 + + + + en + Active + + + + + FalseState + + i=68 + i=9055 + + + + en + Inactive + + + + + Prompt + + i=68 + i=78 + i=2830 + + + + ResponseOptionSet + + i=68 + i=78 + i=2830 + + + + DefaultResponse + + i=68 + i=78 + i=2830 + + + + OkResponse + + i=68 + i=78 + i=2830 + + + + CancelResponse + + i=68 + i=78 + i=2830 + + + + LastResponse + + i=68 + i=78 + i=2830 + + + + Respond + A & C Dialog + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.6.3 + + i=9070 + i=8927 + i=78 + i=2830 + + + + InputArguments + + i=68 + i=78 + i=9069 + + + + + + i=297 + + + + SelectedResponse + + i=6 + + -1 + + + + + + + + + Respond2 + A & C Dialog2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.6.4 + + i=24313 + i=8927 + i=80 + i=2830 + + + + InputArguments + + i=68 + i=78 + i=24312 + + + + + + i=297 + + + + SelectedResponse + + i=6 + + -1 + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + AcknowledgeableConditionType + A & C Acknowledge + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.7.2 + + i=9073 + i=9093 + i=9102 + i=9111 + i=9113 + i=2782 + + + + EnabledState + + i=9074 + i=9093 + i=9102 + i=8995 + i=78 + i=2881 + + + + Id + + i=68 + i=78 + i=9073 + + + + AckedState + + i=9094 + i=9098 + i=9100 + i=9101 + i=9073 + i=8995 + i=78 + i=2881 + + + + Id + + i=68 + i=78 + i=9093 + + + + TransitionTime + + i=68 + i=80 + i=9093 + + + + TrueState + + i=68 + i=9093 + + + + en + Acknowledged + + + + + FalseState + + i=68 + i=9093 + + + + en + Unacknowledged + + + + + ConfirmedState + + i=9103 + i=9107 + i=9109 + i=9110 + i=9073 + i=8995 + i=80 + i=2881 + + + + Id + + i=68 + i=78 + i=9102 + + + + TransitionTime + + i=68 + i=80 + i=9102 + + + + TrueState + + i=68 + i=9102 + + + + en + Confirmed + + + + + FalseState + + i=68 + i=9102 + + + + en + Unconfirmed + + + + + Acknowledge + A & C Acknowledge + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.7.3 + + i=9112 + i=8944 + i=78 + i=2881 + + + + InputArguments + + i=68 + i=78 + i=9111 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + Confirm + A & C Confirm + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.7.4 + + i=9114 + i=8961 + i=80 + i=2881 + + + + InputArguments + + i=68 + i=78 + i=9113 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + AlarmConditionType + A & C Alarm + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.2 + + i=9118 + i=9160 + i=11120 + i=9169 + i=16371 + i=9178 + i=9215 + i=9216 + i=16389 + i=16390 + i=16380 + i=16395 + i=16396 + i=16397 + i=16398 + i=18190 + i=16399 + i=16400 + i=16401 + i=16402 + i=16403 + i=24316 + i=17868 + i=24318 + i=17869 + i=24320 + i=17870 + i=24322 + i=18199 + i=24324 + i=24744 + i=2881 + + + + EnabledState + + i=9119 + i=9160 + i=9169 + i=9178 + i=8995 + i=78 + i=2915 + + + + Id + + i=68 + i=78 + i=9118 + + + + ActiveState + + i=9161 + i=9164 + i=9165 + i=9166 + i=9167 + i=9168 + i=9118 + i=8995 + i=78 + i=2915 + + + + Id + + i=68 + i=78 + i=9160 + + + + EffectiveDisplayName + + i=68 + i=80 + i=9160 + + + + TransitionTime + + i=68 + i=80 + i=9160 + + + + EffectiveTransitionTime + + i=68 + i=80 + i=9160 + + + + TrueState + + i=68 + i=9160 + + + + en + Active + + + + + FalseState + + i=68 + i=9160 + + + + en + Inactive + + + + + InputNode + + i=68 + i=78 + i=2915 + + + + SuppressedState + + i=9170 + i=9174 + i=9176 + i=9177 + i=9118 + i=8995 + i=80 + i=2915 + + + + Id + + i=68 + i=78 + i=9169 + + + + TransitionTime + + i=68 + i=80 + i=9169 + + + + TrueState + + i=68 + i=9169 + + + + en + Suppressed + + + + + FalseState + + i=68 + i=9169 + + + + en + Unsuppressed + + + + + OutOfServiceState + + i=16372 + i=16376 + i=16378 + i=16379 + i=8995 + i=80 + i=2915 + + + + Id + + i=68 + i=78 + i=16371 + + + + TransitionTime + + i=68 + i=80 + i=16371 + + + + TrueState + + i=68 + i=16371 + + + + en + Out of Service + + + + + FalseState + + i=68 + i=16371 + + + + en + In Service + + + + + ShelvingState + + i=9179 + i=9184 + i=9189 + i=9213 + i=9211 + i=9212 + i=9118 + i=2929 + i=80 + i=2915 + + + + CurrentState + + i=9180 + i=2760 + i=78 + i=9178 + + + + Id + + i=68 + i=78 + i=9179 + + + + LastTransition + + i=9185 + i=9188 + i=2767 + i=80 + i=9178 + + + + Id + + i=68 + i=78 + i=9184 + + + + TransitionTime + + i=68 + i=80 + i=9184 + + + + UnshelveTime + + i=68 + i=78 + i=9178 + + + + TimedShelve + + i=9214 + i=11093 + i=78 + i=9178 + + + + InputArguments + + i=68 + i=78 + i=9213 + + + + + + i=297 + + + + ShelvingTime + + i=290 + + -1 + + + + + + + + + Unshelve + + i=11093 + i=78 + i=9178 + + + + OneShotShelve + + i=11093 + i=78 + i=9178 + + + + SuppressedOrShelved + + i=68 + i=78 + i=2915 + + + + MaxTimeShelved + + i=68 + i=80 + i=2915 + + + + AudibleEnabled + + i=68 + i=80 + i=2915 + + + + AudibleSound + + i=17986 + i=80 + i=2915 + + + + SilenceState + + i=16381 + i=16385 + i=16387 + i=16388 + i=8995 + i=80 + i=2915 + + + + Id + + i=68 + i=78 + i=16380 + + + + TransitionTime + + i=68 + i=80 + i=16380 + + + + TrueState + + i=68 + i=16380 + + + + en + Silenced + + + + + FalseState + + i=68 + i=16380 + + + + en + Not Silenced + + + + + OnDelay + + i=68 + i=80 + i=2915 + + + + OffDelay + + i=68 + i=80 + i=2915 + + + + FirstInGroupFlag + + i=63 + i=80 + i=2915 + + + + FirstInGroup + + i=16405 + i=80 + i=2915 + + + + LatchedState + + i=18191 + i=18195 + i=18197 + i=18198 + i=8995 + i=80 + i=2915 + + + + Id + + i=68 + i=78 + i=18190 + + + + TransitionTime + + i=68 + i=80 + i=18190 + + + + TrueState + + i=68 + i=18190 + + + + en + Latched + + + + + FalseState + + i=68 + i=18190 + + + + en + Unlatched + + + + + <AlarmGroup> + + i=16405 + i=11508 + i=2915 + + + + ReAlarmTime + + i=68 + i=80 + i=2915 + + + + ReAlarmRepeatCount + + i=63 + i=80 + i=2915 + + + + Silence + A & C Silencing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.7 + + i=17242 + i=80 + i=2915 + + + + Suppress + A & C Suppression by Operator + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.8 + + i=17225 + i=80 + i=2915 + + + + Suppress2 + A & C Suppression2 by Operator + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.9 + + i=24317 + i=17225 + i=80 + i=2915 + + + + InputArguments + + i=68 + i=78 + i=24316 + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + Unsuppress + A & C Suppression by Operator + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.10 + + i=17225 + i=80 + i=2915 + + + + Unsuppress2 + A & C Suppression2 by Operator + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.11 + + i=24319 + i=17225 + i=80 + i=2915 + + + + InputArguments + + i=68 + i=78 + i=24318 + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + RemoveFromService + A & C OutOfService + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.12 + + i=17259 + i=80 + i=2915 + + + + RemoveFromService2 + A & C OutOfService2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.13 + + i=24321 + i=17259 + i=80 + i=2915 + + + + InputArguments + + i=68 + i=78 + i=24320 + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + PlaceInService + A & C OutOfService + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.14 + + i=17259 + i=80 + i=2915 + + + + PlaceInService2 + A & C Out Of Service2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.15 + + i=24323 + i=17259 + i=80 + i=2915 + + + + InputArguments + + i=68 + i=78 + i=24322 + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + Reset + A & C Latched State + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.5 + + i=15013 + i=80 + i=2915 + + + + Reset2 + A & C Latched State + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.6 + + i=24325 + i=15013 + i=80 + i=2915 + + + + InputArguments + + i=68 + i=78 + i=24324 + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + GetGroupMemberships + A & C GetGroupMemberships + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.16 + + i=25154 + i=80 + i=2915 + + + + OutputArguments + + i=68 + i=78 + i=24744 + + + + + + i=297 + + + + Groups + + i=17 + + 1 + + 0 + + + + + + + + + AlarmGroupType + A & C First in Group Alarm + A & C Suppression Group + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.3 + + i=16406 + i=61 + + + + <AlarmConditionInstance> + + i=16407 + i=16408 + i=16409 + i=16410 + i=16411 + i=16412 + i=16414 + i=16415 + i=16416 + i=16417 + i=16420 + i=16421 + i=16422 + i=16423 + i=16432 + i=16434 + i=16436 + i=16438 + i=16439 + i=16440 + i=16441 + i=16443 + i=16461 + i=16465 + i=16474 + i=16519 + i=2915 + i=11508 + i=16405 + + + + EventId + + i=68 + i=78 + i=16406 + + + + EventType + + i=68 + i=78 + i=16406 + + + + SourceNode + + i=68 + i=78 + i=16406 + + + + SourceName + + i=68 + i=78 + i=16406 + + + + Time + + i=68 + i=78 + i=16406 + + + + ReceiveTime + + i=68 + i=78 + i=16406 + + + + Message + + i=68 + i=78 + i=16406 + + + + Severity + + i=68 + i=78 + i=16406 + + + + ConditionClassId + + i=68 + i=78 + i=16406 + + + + ConditionClassName + + i=68 + i=78 + i=16406 + + + + ConditionName + + i=68 + i=78 + i=16406 + + + + BranchId + + i=68 + i=78 + i=16406 + + + + Retain + + i=68 + i=78 + i=16406 + + + + EnabledState + + i=16424 + i=8995 + i=78 + i=16406 + + + + Id + + i=68 + i=78 + i=16423 + + + + Quality + + i=16433 + i=9002 + i=78 + i=16406 + + + + SourceTimestamp + + i=68 + i=78 + i=16432 + + + + LastSeverity + + i=16435 + i=9002 + i=78 + i=16406 + + + + SourceTimestamp + + i=68 + i=78 + i=16434 + + + + Comment + + i=16437 + i=9002 + i=78 + i=16406 + + + + SourceTimestamp + + i=68 + i=78 + i=16436 + + + + ClientUserId + + i=68 + i=78 + i=16406 + + + + Disable + + i=2803 + i=78 + i=16406 + + + + Enable + + i=2803 + i=78 + i=16406 + + + + AddComment + + i=16442 + i=2829 + i=78 + i=16406 + + + + InputArguments + + i=68 + i=78 + i=16441 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + AckedState + + i=16444 + i=8995 + i=78 + i=16406 + + + + Id + + i=68 + i=78 + i=16443 + + + + Acknowledge + + i=16462 + i=8944 + i=78 + i=16406 + + + + InputArguments + + i=68 + i=78 + i=16461 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + ActiveState + + i=16466 + i=16472 + i=16473 + i=8995 + i=78 + i=16406 + + + + Id + + i=68 + i=78 + i=16465 + + + + TrueState + + i=68 + i=16465 + + + + en + Active + + + + + FalseState + + i=68 + i=16465 + + + + en + Inactive + + + + + InputNode + + i=68 + i=78 + i=16406 + + + + SuppressedOrShelved + + i=68 + i=78 + i=16406 + + + + AlarmSuppressionGroupType + A & C Suppression Group + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.4 + + i=32226 + i=16405 + + + + <DigitalVariable> + + i=63 + i=11508 + i=32064 + + + + ShelvedStateMachineType + A & C Shelving + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.17/#5.8.17.1 + + i=9115 + i=2930 + i=2932 + i=2933 + i=2935 + i=2936 + i=2940 + i=2942 + i=2943 + i=2945 + i=2949 + i=24756 + i=2947 + i=24758 + i=2948 + i=24760 + i=2771 + + + + UnshelveTime + + i=68 + i=78 + i=2929 + + + + Unshelved + + i=6098 + i=2935 + i=2936 + i=2940 + i=2943 + i=2307 + i=2929 + + + + StateNumber + + i=68 + i=78 + i=2930 + + + 1 + + + + TimedShelved + + i=6100 + i=2935 + i=2940 + i=2942 + i=2945 + i=2307 + i=2929 + + + + StateNumber + + i=68 + i=78 + i=2932 + + + 2 + + + + OneShotShelved + + i=6101 + i=2936 + i=2942 + i=2943 + i=2945 + i=2307 + i=2929 + + + + StateNumber + + i=68 + i=78 + i=2933 + + + 3 + + + + UnshelvedToTimedShelved + + i=11322 + i=2930 + i=2932 + i=2915 + i=2949 + i=24756 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2935 + + + 12 + + + + UnshelvedToOneShotShelved + + i=11323 + i=2930 + i=2933 + i=2915 + i=2948 + i=24760 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2936 + + + 13 + + + + TimedShelvedToUnshelved + + i=11324 + i=2932 + i=2930 + i=2915 + i=2947 + i=24758 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2940 + + + 21 + + + + TimedShelvedToOneShotShelved + + i=11325 + i=2932 + i=2933 + i=2915 + i=2948 + i=24760 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2942 + + + 23 + + + + OneShotShelvedToUnshelved + + i=11326 + i=2933 + i=2930 + i=2915 + i=2947 + i=24758 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2943 + + + 31 + + + + OneShotShelvedToTimedShelved + + i=11327 + i=2933 + i=2932 + i=2915 + i=2949 + i=24756 + i=2310 + i=2929 + + + + TransitionNumber + + i=68 + i=78 + i=2945 + + + 32 + + + + TimedShelve + A & C Shelving + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.17/#5.8.17.4 + + i=2991 + i=2935 + i=2945 + i=11093 + i=78 + i=2929 + + + + InputArguments + + i=68 + i=78 + i=2949 + + + + + + i=297 + + + + ShelvingTime + + i=290 + + -1 + + + + + + + + + TimedShelve2 + A & C Shelving2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.17/#5.8.17.5 + + i=24757 + i=2935 + i=2945 + i=11093 + i=80 + i=2929 + + + + InputArguments + + i=68 + i=78 + i=24756 + + + + + + i=297 + + + + ShelvingTime + + i=290 + + -1 + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + Unshelve + A & C Shelving + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.17/#5.8.17.2 + + i=2940 + i=2943 + i=11093 + i=78 + i=2929 + + + + Unshelve2 + A & C Shelving2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.17/#5.8.17.3 + + i=24759 + i=2940 + i=2943 + i=11093 + i=80 + i=2929 + + + + InputArguments + + i=68 + i=78 + i=24758 + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + OneShotShelve + A & C Shelving + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.17/#5.8.17.6 + + i=2936 + i=2942 + i=11093 + i=78 + i=2929 + + + + OneShotShelve2 + A & C Shelving2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.17/#5.8.17.7 + + i=24761 + i=2936 + i=2942 + i=11093 + i=80 + i=2929 + + + + InputArguments + + i=68 + i=78 + i=24760 + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + + + + + + + LimitAlarmType + A & C Exclusive Limit + A & C Non-Exclusive Limit + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.18 + + i=11124 + i=11125 + i=11126 + i=11127 + i=16572 + i=16573 + i=16574 + i=16575 + i=24770 + i=24771 + i=24772 + i=24773 + i=24774 + i=24775 + i=24776 + i=24777 + i=2915 + + + + HighHighLimit + + i=68 + i=80 + i=2955 + + + + HighLimit + + i=68 + i=80 + i=2955 + + + + LowLimit + + i=68 + i=80 + i=2955 + + + + LowLowLimit + + i=68 + i=80 + i=2955 + + + + BaseHighHighLimit + + i=68 + i=80 + i=2955 + + + + BaseHighLimit + + i=68 + i=80 + i=2955 + + + + BaseLowLimit + + i=68 + i=80 + i=2955 + + + + BaseLowLowLimit + + i=68 + i=80 + i=2955 + + + + SeverityHighHigh + + i=68 + i=80 + i=2955 + + + + SeverityHigh + + i=68 + i=80 + i=2955 + + + + SeverityLow + + i=68 + i=80 + i=2955 + + + + SeverityLowLow + + i=68 + i=80 + i=2955 + + + + HighHighDeadband + + i=68 + i=80 + i=2955 + + + + HighDeadband + + i=68 + i=80 + i=2955 + + + + LowDeadband + + i=68 + i=80 + i=2955 + + + + LowLowDeadband + + i=68 + i=80 + i=2955 + + + + ExclusiveLimitStateMachineType + A & C Exclusive Limit + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.19/#5.8.19.2 + + i=9329 + i=9331 + i=9333 + i=9335 + i=9337 + i=9338 + i=9339 + i=9340 + i=2771 + + + + HighHigh + + i=9330 + i=9339 + i=9340 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9329 + + + 1 + + + + High + + i=9332 + i=9339 + i=9340 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9331 + + + 2 + + + + Low + + i=9334 + i=9337 + i=9338 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9333 + + + 3 + + + + LowLow + + i=9336 + i=9337 + i=9338 + i=2307 + i=9318 + + + + StateNumber + + i=68 + i=78 + i=9335 + + + 4 + + + + LowLowToLow + + i=11340 + i=9335 + i=9333 + i=2915 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9337 + + + 43 + + + + LowToLowLow + + i=11341 + i=9333 + i=9335 + i=2915 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9338 + + + 34 + + + + HighHighToHigh + + i=11342 + i=9329 + i=9331 + i=2915 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9339 + + + 12 + + + + HighToHighHigh + + i=11343 + i=9331 + i=9329 + i=2915 + i=2310 + i=9318 + + + + TransitionNumber + + i=68 + i=78 + i=9340 + + + 21 + + + + ExclusiveLimitAlarmType + A & C Exclusive Limit + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.19/#5.8.19.3 + + i=9398 + i=9455 + i=2955 + + + + ActiveState + + i=9399 + i=9455 + i=8995 + i=78 + i=9341 + + + + Id + + i=68 + i=78 + i=9398 + + + + LimitState + + i=9456 + i=9461 + i=9398 + i=9318 + i=78 + i=9341 + + + + CurrentState + + i=9457 + i=2760 + i=78 + i=9455 + + + + Id + + i=68 + i=78 + i=9456 + + + + LastTransition + + i=9462 + i=9465 + i=2767 + i=80 + i=9455 + + + + Id + + i=68 + i=78 + i=9461 + + + + TransitionTime + + i=68 + i=80 + i=9461 + + + + NonExclusiveLimitAlarmType + A & C Non-Exclusive Limit + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.20 + + i=9963 + i=10020 + i=10029 + i=10038 + i=10047 + i=2955 + + + + ActiveState + + i=9964 + i=10020 + i=10029 + i=10038 + i=10047 + i=8995 + i=78 + i=9906 + + + + Id + + i=68 + i=78 + i=9963 + + + + HighHighState + + i=10021 + i=10025 + i=10027 + i=10028 + i=9963 + i=8995 + i=80 + i=9906 + + + + Id + + i=68 + i=78 + i=10020 + + + + TransitionTime + + i=68 + i=80 + i=10020 + + + + TrueState + + i=68 + i=10020 + + + + en + HighHigh active + + + + + FalseState + + i=68 + i=10020 + + + + en + HighHigh inactive + + + + + HighState + + i=10030 + i=10034 + i=10036 + i=10037 + i=9963 + i=8995 + i=80 + i=9906 + + + + Id + + i=68 + i=78 + i=10029 + + + + TransitionTime + + i=68 + i=80 + i=10029 + + + + TrueState + + i=68 + i=10029 + + + + en + High active + + + + + FalseState + + i=68 + i=10029 + + + + en + High inactive + + + + + LowState + + i=10039 + i=10043 + i=10045 + i=10046 + i=9963 + i=8995 + i=80 + i=9906 + + + + Id + + i=68 + i=78 + i=10038 + + + + TransitionTime + + i=68 + i=80 + i=10038 + + + + TrueState + + i=68 + i=10038 + + + + en + Low active + + + + + FalseState + + i=68 + i=10038 + + + + en + Low inactive + + + + + LowLowState + + i=10048 + i=10052 + i=10054 + i=10055 + i=9963 + i=8995 + i=80 + i=9906 + + + + Id + + i=68 + i=78 + i=10047 + + + + TransitionTime + + i=68 + i=80 + i=10047 + + + + TrueState + + i=68 + i=10047 + + + + en + LowLow active + + + + + FalseState + + i=68 + i=10047 + + + + en + LowLow inactive + + + + + NonExclusiveLevelAlarmType + A & C Non-Exclusive Level + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.21/#5.8.21.2 + + i=9906 + + + + ExclusiveLevelAlarmType + A & C Exclusive Level + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.21/#5.8.21.3 + + i=9341 + + + + NonExclusiveDeviationAlarmType + A & C Non-Exclusive Deviation + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.22/#5.8.22.2 + + i=10522 + i=16776 + i=9906 + + + + SetpointNode + + i=68 + i=78 + i=10368 + + + + BaseSetpointNode + + i=68 + i=80 + i=10368 + + + + NonExclusiveRateOfChangeAlarmType + A & C Non-Exclusive RateOfChange + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.23/#5.8.23.2 + + i=16858 + i=9906 + + + + EngineeringUnits + + i=68 + i=80 + i=10214 + + + + ExclusiveDeviationAlarmType + A & C Exclusive Deviation + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.22/#5.8.22.3 + + i=9905 + i=16817 + i=9341 + + + + SetpointNode + + i=68 + i=78 + i=9764 + + + + BaseSetpointNode + + i=68 + i=80 + i=9764 + + + + ExclusiveRateOfChangeAlarmType + A & C Exclusive RateOfChange + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.23/#5.8.23.3 + + i=16899 + i=9341 + + + + EngineeringUnits + + i=68 + i=80 + i=9623 + + + + DiscreteAlarmType + A & C Discrete + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.24/#5.8.24.1 + + i=2915 + + + + OffNormalAlarmType + A & C OffNormal + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.24/#5.8.24.2 + + i=11158 + i=10523 + + + + NormalState + + i=68 + i=78 + i=10637 + + + + SystemOffNormalAlarmType + A & C SystemOffNormal + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.24/#5.8.24.3 + + i=10637 + + + + TripAlarmType + A & C Trip + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.24/#5.8.24.4 + + i=10637 + + + + InstrumentDiagnosticAlarmType + A & C InstrumentDiagnostic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.24/#5.8.24.5 + + i=10637 + + + + SystemDiagnosticAlarmType + A & C SystemDiagnostic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.24/#5.8.24.6 + + i=10637 + + + + CertificateExpirationAlarmType + A & C CertificateExpiration + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.24/#5.8.24.7 + + i=13325 + i=14900 + i=13326 + i=13327 + i=11753 + + + + ExpirationDate + + i=68 + i=78 + i=13225 + + + + ExpirationLimit + + i=68 + i=80 + i=13225 + + + + CertificateType + + i=68 + i=78 + i=13225 + + + + Certificate + + i=68 + i=78 + i=13225 + + + + DiscrepancyAlarmType + A & C Discrepancy + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.8.25 + + i=17215 + i=17216 + i=17217 + i=2915 + + + + TargetValueNode + + i=68 + i=78 + i=17080 + + + + ExpectedTime + + i=68 + i=78 + i=17080 + + + + Tolerance + + i=68 + i=80 + i=17080 + + + + BaseConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.2 + + i=58 + + + + ProcessConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.3 + + i=11163 + + + + MaintenanceConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.4 + + i=11163 + + + + SystemConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.5 + + i=11163 + + + + SafetyConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.6 + + i=11163 + + + + HighlyManagedAlarmConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.7 + + i=11163 + + + + TrainingConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.8 + + i=11163 + + + + StatisticalConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.9 + + i=11163 + + + + TestingConditionClassType + A & C ConditionClasses + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.9.10 + + i=11163 + + + + AuditConditionEventType + A & C Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.2 + + i=2127 + + + + AuditConditionEnableEventType + A & C Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.3 + + i=2790 + + + + AuditConditionCommentEventType + A & C Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.4 + + i=17222 + i=11851 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=2829 + + + + Comment + + i=68 + i=78 + i=2829 + + + + AuditConditionRespondEventType + A & C Dialog Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.5 + + i=11852 + i=2790 + + + + SelectedResponse + + i=68 + i=78 + i=8927 + + + + AuditConditionAcknowledgeEventType + A & C Acknowledge Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.6 + + i=17223 + i=11853 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=8944 + + + + Comment + + i=68 + i=78 + i=8944 + + + + AuditConditionConfirmEventType + A & C Confirm Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.7 + + i=17224 + i=11854 + i=2790 + + + + ConditionEventId + + i=68 + i=78 + i=8961 + + + + Comment + + i=68 + i=78 + i=8961 + + + + AuditConditionShelvingEventType + A & C Shelving Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.8 + + i=11855 + i=2790 + + + + ShelvingTime + + i=68 + i=80 + i=11093 + + + + AuditConditionSuppressionEventType + A & C Suppression Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.9 + + i=2790 + + + + AuditConditionSilenceEventType + A & C Silencing Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.10 + + i=2790 + + + + AuditConditionResetEventType + A & C Latching Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.11 + + i=2790 + + + + AuditConditionOutOfServiceEventType + A & C OutOfService Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.10.12 + + i=2790 + + + + RefreshStartEventType + A & C Refresh + A & C Refresh2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.11.2 + + i=2130 + + + + RefreshEndEventType + A & C Refresh + A & C Refresh2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.11.3 + + i=2130 + + + + RefreshRequiredEventType + A & C Refresh + A & C Refresh2 + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.11.4 + + i=2130 + + + + HasCondition + A & C Basic + https://reference.opcfoundation.org/v105/Core/docs/Part9/5.12 + + i=32 + + IsConditionOf + + + HasEffectDisable + A & C StateMachine Trigger + https://reference.opcfoundation.org/v105/Core/docs/Part9/7.2 + + i=54 + + MayBeDisabledBy + + + HasEffectEnable + A & C Statemachine Trigger + https://reference.opcfoundation.org/v105/Core/docs/Part9/7.3 + + i=54 + + MayBeEnabledBy + + + HasEffectSuppressed + A & C Statemachine Suppression Trigger + https://reference.opcfoundation.org/v105/Core/docs/Part9/7.4 + + i=54 + + MayBeSuppressedBy + + + HasEffectUnsuppressed + A & C Statemachine Suppression Trigger + https://reference.opcfoundation.org/v105/Core/docs/Part9/7.5 + + i=54 + + MayBeUnsuppressedBy + + + AlarmMetricsType + A & C Alarm Metrics + https://reference.opcfoundation.org/v105/Core/docs/Part9/9.2 + + i=17280 + i=17991 + i=17281 + i=17282 + i=17284 + i=17286 + i=17283 + i=17288 + i=18666 + i=58 + + + + AlarmCount + + i=63 + i=78 + i=17279 + + + + StartTime + + i=63 + i=78 + i=17279 + + + + MaximumActiveState + + i=63 + i=78 + i=17279 + + + + MaximumUnAck + + i=63 + i=78 + i=17279 + + + + CurrentAlarmRate + + i=17285 + i=17277 + i=78 + i=17279 + + + + Rate + + i=68 + i=78 + i=17284 + + + + MaximumAlarmRate + + i=17287 + i=17277 + i=78 + i=17279 + + + + Rate + + i=68 + i=78 + i=17286 + + + + MaximumReAlarmCount + + i=63 + i=78 + i=17279 + + + + AverageAlarmRate + + i=17289 + i=17277 + i=78 + i=17279 + + + + Rate + + i=68 + i=78 + i=17288 + + + + Reset + A & C Alarm Metrics + https://reference.opcfoundation.org/v105/Core/docs/Part9/9.4 + + i=2127 + i=78 + i=17279 + + + + AlarmRateVariableType + A & C Alarm Metrics + https://reference.opcfoundation.org/v105/Core/docs/Part9/9.3 + + i=17278 + i=63 + + + + Rate + + i=68 + i=78 + i=17277 + + + + AlarmStateVariableType + A & C Summary + https://reference.opcfoundation.org/v105/Core/docs/Part9/8.2 + + i=32245 + i=32246 + i=32247 + i=32248 + i=32249 + i=32250 + i=63 + + + + HighestActiveSeverity + + i=68 + i=78 + i=32244 + + + + HighestUnackSeverity + + i=68 + i=78 + i=32244 + + + + ActiveCount + + i=68 + i=78 + i=32244 + + + + UnacknowledgedCount + + i=68 + i=78 + i=32244 + + + + UnconfirmedCount + + i=68 + i=78 + i=32244 + + + + Filter + + i=68 + i=78 + i=32244 + + + + AlarmMask + A & C Summary + https://reference.opcfoundation.org/v105/Core/docs/Part9/8.3 + + i=32252 + i=5 + + + + + + + + + OptionSetValues + + i=68 + i=32251 + + + + + Active + + + Unacknowledged + + + Unconfirmed + + + + + + ProgramStateMachineType + Program Basic + https://reference.opcfoundation.org/v105/Core/docs/Part10/5.2.1 + + i=3830 + i=3835 + i=2392 + i=2393 + i=2394 + i=2395 + i=2396 + i=2397 + i=2398 + i=2399 + i=3850 + i=2406 + i=2400 + i=2402 + i=2404 + i=2408 + i=2410 + i=2412 + i=2414 + i=2416 + i=2418 + i=2420 + i=2422 + i=2424 + i=2426 + i=2427 + i=2428 + i=2429 + i=2430 + i=2771 + + + + CurrentState + + i=3831 + i=3833 + i=2760 + i=78 + i=2391 + + + + Id + + i=68 + i=78 + i=3830 + + + + Number + + i=68 + i=78 + i=3830 + + + + LastTransition + + i=3836 + i=3838 + i=3839 + i=2767 + i=78 + i=2391 + + + + Id + + i=68 + i=78 + i=3835 + + + + Number + + i=68 + i=78 + i=3835 + + + + TransitionTime + + i=68 + i=78 + i=3835 + + + + Creatable + + i=68 + i=2391 + + + + Deletable + + i=68 + i=78 + i=2391 + + + + AutoDelete + + i=68 + i=78 + i=2391 + + + + RecycleCount + + i=68 + i=78 + i=2391 + + + + InstanceCount + + i=68 + i=2391 + + + + MaxInstanceCount + + i=68 + i=2391 + + + + MaxRecycleCount + + i=68 + i=2391 + + + + ProgramDiagnostic + + i=3840 + i=3841 + i=3842 + i=3843 + i=3844 + i=3845 + i=3846 + i=3847 + i=15038 + i=15040 + i=3848 + i=3849 + i=15383 + i=80 + i=2391 + + + + CreateSessionId + + i=63 + i=78 + i=2399 + + + + CreateClientName + + i=63 + i=78 + i=2399 + + + + InvocationCreationTime + + i=63 + i=78 + i=2399 + + + + LastTransitionTime + + i=68 + i=78 + i=2399 + + + + LastMethodCall + + i=63 + i=78 + i=2399 + + + + LastMethodSessionId + + i=63 + i=78 + i=2399 + + + + LastMethodInputArguments + + i=63 + i=78 + i=2399 + + + + LastMethodOutputArguments + + i=63 + i=78 + i=2399 + + + + LastMethodInputValues + + i=63 + i=78 + i=2399 + + + + LastMethodOutputValues + + i=63 + i=78 + i=2399 + + + + LastMethodCallTime + + i=63 + i=78 + i=2399 + + + + LastMethodReturnStatus + + i=63 + i=78 + i=2399 + + + + FinalResultData + https://reference.opcfoundation.org/v105/Core/docs/Part10/A.2.6/#A.2.6.2 + + i=58 + i=80 + i=2391 + + + + Halted + + i=2407 + i=2408 + i=2412 + i=2420 + i=2424 + i=2307 + i=2391 + + + + StateNumber + + i=68 + i=78 + i=2406 + + + 11 + + + + Ready + + i=2401 + i=2408 + i=2410 + i=2414 + i=2422 + i=2424 + i=2307 + i=2391 + + + + StateNumber + + i=68 + i=78 + i=2400 + + + 12 + + + + Running + + i=2403 + i=2410 + i=2412 + i=2414 + i=2416 + i=2418 + i=2307 + i=2391 + + + + StateNumber + + i=68 + i=78 + i=2402 + + + 13 + + + + Suspended + + i=2405 + i=2416 + i=2418 + i=2420 + i=2422 + i=2307 + i=2391 + + + + StateNumber + + i=68 + i=78 + i=2404 + + + 14 + + + + HaltedToReady + + i=2409 + i=2406 + i=2400 + i=2430 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2408 + + + 1 + + + + ReadyToRunning + + i=2411 + i=2400 + i=2402 + i=2426 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2410 + + + 2 + + + + RunningToHalted + + i=2413 + i=2402 + i=2406 + i=2429 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2412 + + + 3 + + + + RunningToReady + + i=2415 + i=2402 + i=2400 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2414 + + + 4 + + + + RunningToSuspended + + i=2417 + i=2402 + i=2404 + i=2427 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2416 + + + 5 + + + + SuspendedToRunning + + i=2419 + i=2404 + i=2402 + i=2428 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2418 + + + 6 + + + + SuspendedToHalted + + i=2421 + i=2404 + i=2406 + i=2429 + i=2430 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2420 + + + 7 + + + + SuspendedToReady + + i=2423 + i=2404 + i=2400 + i=2378 + i=11856 + i=2430 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2422 + + + 8 + + + + ReadyToHalted + + i=2425 + i=2400 + i=2406 + i=2429 + i=2378 + i=11856 + i=2310 + i=2391 + + + + TransitionNumber + + i=68 + i=78 + i=2424 + + + 9 + + + + Start + + i=2410 + i=11508 + i=2391 + + + + Suspend + + i=2416 + i=11508 + i=2391 + + + + Resume + + i=2418 + i=11508 + i=2391 + + + + Halt + + i=2412 + i=2420 + i=2424 + i=11508 + i=2391 + + + + Reset + + i=2408 + i=2420 + i=2422 + i=11508 + i=2391 + + + + ProgramTransitionEventType + Program Basic + https://reference.opcfoundation.org/v105/Core/docs/Part10/5.2.5/#5.2.5.2 + + i=2379 + i=2311 + + + + IntermediateResult + + i=63 + i=78 + i=2378 + + + + AuditProgramTransitionEventType + Program Auditing + https://reference.opcfoundation.org/v105/Core/docs/Part10/5.2.6 + + i=11875 + i=2315 + + + + TransitionNumber + + i=68 + i=78 + i=11856 + + + + ProgramTransitionAuditEventType + + i=3825 + i=2315 + + + + Transition + + i=3826 + i=2767 + i=78 + i=3806 + + + + Id + + i=68 + i=78 + i=3825 + + + + ProgramDiagnosticType + + i=2381 + i=2382 + i=2383 + i=2384 + i=2385 + i=2386 + i=2387 + i=2388 + i=2389 + i=2390 + i=63 + + + + CreateSessionId + + i=68 + i=78 + i=2380 + + + + CreateClientName + + i=68 + i=78 + i=2380 + + + + InvocationCreationTime + + i=68 + i=78 + i=2380 + + + + LastTransitionTime + + i=68 + i=78 + i=2380 + + + + LastMethodCall + + i=68 + i=78 + i=2380 + + + + LastMethodSessionId + + i=68 + i=78 + i=2380 + + + + LastMethodInputArguments + + i=68 + i=78 + i=2380 + + + + LastMethodOutputArguments + + i=68 + i=78 + i=2380 + + + + LastMethodCallTime + + i=68 + i=78 + i=2380 + + + + LastMethodReturnStatus + + i=68 + i=78 + i=2380 + + + + ProgramDiagnostic2Type + Program Basic + https://reference.opcfoundation.org/v105/Core/docs/Part10/5.2.9 + + i=15384 + i=15385 + i=15386 + i=15387 + i=15388 + i=15389 + i=15390 + i=15391 + i=15392 + i=15393 + i=15394 + i=15395 + i=63 + + + + CreateSessionId + + i=63 + i=78 + i=15383 + + + + CreateClientName + + i=63 + i=78 + i=15383 + + + + InvocationCreationTime + + i=63 + i=78 + i=15383 + + + + LastTransitionTime + + i=68 + i=78 + i=15383 + + + + LastMethodCall + + i=63 + i=78 + i=15383 + + + + LastMethodSessionId + + i=63 + i=78 + i=15383 + + + + LastMethodInputArguments + + i=63 + i=78 + i=15383 + + + + LastMethodOutputArguments + + i=63 + i=78 + i=15383 + + + + LastMethodInputValues + + i=63 + i=78 + i=15383 + + + + LastMethodOutputValues + + i=63 + i=78 + i=15383 + + + + LastMethodCallTime + + i=63 + i=78 + i=15383 + + + + LastMethodReturnStatus + + i=63 + i=78 + i=15383 + + + + Annotations + + i=68 + + + + HistoricalDataConfigurationType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.2.2 + + i=3059 + i=11876 + i=2323 + i=2324 + i=2325 + i=2326 + i=2327 + i=2328 + i=11499 + i=11500 + i=19092 + i=58 + + + + AggregateConfiguration + + i=11168 + i=11169 + i=11170 + i=11171 + i=11187 + i=78 + i=2318 + + + + TreatUncertainAsBad + + i=68 + i=78 + i=3059 + + + + PercentDataBad + + i=68 + i=78 + i=3059 + + + + PercentDataGood + + i=68 + i=78 + i=3059 + + + + UseSlopedExtrapolation + + i=68 + i=78 + i=3059 + + + + AggregateFunctions + + i=61 + i=80 + i=2318 + + + + Stepped + + i=68 + i=78 + i=2318 + + + + Definition + + i=68 + i=80 + i=2318 + + + + MaxTimeInterval + + i=68 + i=80 + i=2318 + + + + MinTimeInterval + + i=68 + i=80 + i=2318 + + + + ExceptionDeviation + + i=68 + i=80 + i=2318 + + + + ExceptionDeviationFormat + + i=68 + i=80 + i=2318 + + + + StartOfArchive + + i=68 + i=80 + i=2318 + + + + StartOfOnlineArchive + + i=68 + i=80 + i=2318 + + + + ServerTimestampSupported + + i=68 + i=80 + i=2318 + + + + HA Configuration + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.2.4 + + i=11203 + i=11208 + i=2318 + + + + AggregateConfiguration + + i=11204 + i=11205 + i=11206 + i=11207 + i=11187 + i=11202 + + + + TreatUncertainAsBad + + i=68 + i=11203 + + + + PercentDataBad + + i=68 + i=11203 + + + + PercentDataGood + + i=68 + i=11203 + + + + UseSlopedExtrapolation + + i=68 + i=11203 + + + + Stepped + + i=68 + i=11202 + + + + HistoricalEventFilter + + i=68 + + + + HistoryServerCapabilitiesType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.4.2 + + i=2331 + i=2332 + i=11268 + i=11269 + i=2334 + i=2335 + i=2336 + i=2337 + i=2338 + i=11278 + i=11279 + i=11280 + i=11501 + i=11270 + i=11172 + i=19094 + i=58 + + + + AccessHistoryDataCapability + + i=68 + i=78 + i=2330 + + + + AccessHistoryEventsCapability + + i=68 + i=78 + i=2330 + + + + MaxReturnDataValues + + i=68 + i=78 + i=2330 + + + + MaxReturnEventValues + + i=68 + i=78 + i=2330 + + + + InsertDataCapability + + i=68 + i=78 + i=2330 + + + + ReplaceDataCapability + + i=68 + i=78 + i=2330 + + + + UpdateDataCapability + + i=68 + i=78 + i=2330 + + + + DeleteRawCapability + + i=68 + i=78 + i=2330 + + + + DeleteAtTimeCapability + + i=68 + i=78 + i=2330 + + + + InsertEventCapability + + i=68 + i=78 + i=2330 + + + + ReplaceEventCapability + + i=68 + i=78 + i=2330 + + + + UpdateEventCapability + + i=68 + i=78 + i=2330 + + + + DeleteEventCapability + + i=68 + i=78 + i=2330 + + + + InsertAnnotationCapability + + i=68 + i=78 + i=2330 + + + + AggregateFunctions + + i=61 + i=78 + i=2330 + + + + ServerTimestampSupported + + i=68 + i=78 + i=2330 + + + + AuditHistoryEventUpdateEventType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.6.2 + + i=3025 + i=3028 + i=3003 + i=3029 + i=3030 + i=2104 + + + + UpdatedNode + + i=68 + i=78 + i=2999 + + + + PerformInsertReplace + + i=68 + i=78 + i=2999 + + + + Filter + + i=68 + i=78 + i=2999 + + + + NewValues + + i=68 + i=78 + i=2999 + + + + OldValues + + i=68 + i=78 + i=2999 + + + + AuditHistoryValueUpdateEventType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.6.3 + + i=3026 + i=3031 + i=3032 + i=3033 + i=2104 + + + + UpdatedNode + + i=68 + i=78 + i=3006 + + + + PerformInsertReplace + + i=68 + i=78 + i=3006 + + + + NewValues + + i=68 + i=78 + i=3006 + + + + OldValues + + i=68 + i=78 + i=3006 + + + + AuditHistoryAnnotationUpdateEventType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.6.4 + + i=19293 + i=19294 + i=19295 + i=2104 + + + + PerformInsertReplace + + i=68 + i=78 + i=19095 + + + + NewValues + + i=68 + i=78 + i=19095 + + + + OldValues + + i=68 + i=78 + i=19095 + + + + AuditHistoryDeleteEventType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.6.5 + + i=3027 + i=2104 + + + + UpdatedNode + + i=68 + i=78 + i=3012 + + + + AuditHistoryRawModifyDeleteEventType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.6.6 + + i=3015 + i=3016 + i=3017 + i=3034 + i=3012 + + + + IsDeleteModified + + i=68 + i=78 + i=3014 + + + + StartTime + + i=68 + i=78 + i=3014 + + + + EndTime + + i=68 + i=78 + i=3014 + + + + OldValues + + i=68 + i=78 + i=3014 + + + + AuditHistoryAtTimeDeleteEventType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.6.7 + + i=3020 + i=3021 + i=3012 + + + + ReqTimes + + i=68 + i=78 + i=3019 + + + + OldValues + + i=68 + i=78 + i=3019 + + + + AuditHistoryEventDeleteEventType + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.6.8 + + i=3023 + i=3024 + i=3012 + + + + EventIds + + i=68 + i=78 + i=3022 + + + + OldValues + + i=68 + i=78 + i=3022 + + + + TrustListType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.1 + + i=12542 + i=19296 + i=32254 + i=23563 + i=12543 + i=12546 + i=12548 + i=12550 + i=11575 + + + + LastUpdateTime + + i=68 + i=78 + i=12522 + + + + UpdateFrequency + + i=68 + i=80 + i=12522 + + + + ActivityTimeout + + i=68 + i=80 + i=12522 + + + + DefaultValidationOptions + + i=68 + i=80 + i=12522 + + + + OpenWithMasks + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.2 + + i=12544 + i=12545 + i=78 + i=12522 + + + + InputArguments + + i=68 + i=78 + i=12543 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=12543 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.3 + + i=12705 + i=12547 + i=78 + i=12522 + + + + InputArguments + + i=68 + i=78 + i=12546 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=12546 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.4 + + i=12549 + i=78 + i=12522 + + + + InputArguments + + i=68 + i=78 + i=12548 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.5 + + i=12551 + i=78 + i=12522 + + + + InputArguments + + i=68 + i=78 + i=12550 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + TrustListValidationOptions + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.8 + + i=23565 + i=7 + + + + Ignore errors related to the validity time of the Certificate. + + + Ignore mismatches between the host name or ApplicationUri. + + + Ignore errors if the revocation list cannot be found for the issuer of the Certificate. + + + Ignore errors if an issuer has an expired Certificate. + + + Ignore errors if the revocation list cannot be found for any issuer of issuer Certificates. + + + Check the revocation status online. + + + Check the revocation status offline. + + + + + OptionSetValues + + i=68 + i=23564 + + + + + SuppressCertificateExpired + + + SuppressHostNameInvalid + + + SuppressRevocationStatusUnknown + + + SuppressIssuerCertificateExpired + + + SuppressIssuerRevocationStatusUnknown + + + CheckRevocationStatusOnline + + + CheckRevocationStatusOffline + + + + + + TrustListMasks + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.7 + + i=12553 + i=29 + + + + No fields are provided. + + + The TrustedCertificates are provided. + + + The TrustedCrls are provided. + + + The IssuerCertificates are provided. + + + The IssuerCrls are provided. + + + All fields are provided. + + + + + EnumValues + + i=68 + i=12552 + + + + + + i=7616 + + + + 0 + + None + + + No fields are provided. + + + + + + + i=7616 + + + + 1 + + TrustedCertificates + + + The TrustedCertificates are provided. + + + + + + + i=7616 + + + + 2 + + TrustedCrls + + + The TrustedCrls are provided. + + + + + + + i=7616 + + + + 4 + + IssuerCertificates + + + The IssuerCertificates are provided. + + + + + + + i=7616 + + + + 8 + + IssuerCrls + + + The IssuerCrls are provided. + + + + + + + i=7616 + + + + 15 + + All + + + All fields are provided. + + + + + + + + + TrustListDataType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.6 + + i=22 + + + + + + + + + + + TrustListOutOfDateAlarmType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.9 + + i=19446 + i=19447 + i=19448 + i=11753 + + + + TrustListId + + i=68 + i=78 + i=19297 + + + + LastUpdateTime + + i=68 + i=78 + i=19297 + + + + UpdateFrequency + + i=68 + i=78 + i=19297 + + + + CertificateGroupType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.3/#7.8.3.1 + + i=13599 + i=13631 + i=23526 + i=19450 + i=20143 + i=13225 + i=58 + + + + TrustList + + i=13600 + i=13601 + i=13602 + i=13603 + i=13605 + i=13608 + i=13610 + i=13613 + i=13615 + i=13618 + i=13620 + i=13621 + i=13624 + i=13627 + i=13629 + i=12522 + i=78 + i=12555 + + + + Size + + i=68 + i=78 + i=13599 + + + + Writable + + i=68 + i=78 + i=13599 + + + + UserWritable + + i=68 + i=78 + i=13599 + + + + OpenCount + + i=68 + i=78 + i=13599 + + + + Open + + i=13606 + i=13607 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13605 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13605 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=13609 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13608 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=13611 + i=13612 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13610 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13610 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=13614 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13613 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=13616 + i=13617 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13615 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13615 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=13619 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13618 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=78 + i=13599 + + + + OpenWithMasks + + i=13622 + i=13623 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13621 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13621 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=13625 + i=13626 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13624 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13624 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=13628 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13627 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=13630 + i=78 + i=13599 + + + + InputArguments + + i=68 + i=78 + i=13629 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=78 + i=12555 + + + + GetRejectedList + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.3/#7.8.3.2 + + i=23527 + i=80 + i=12555 + + + + OutputArguments + + i=68 + i=78 + i=23526 + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + CertificateExpired + + i=19451 + i=19452 + i=19453 + i=19454 + i=19455 + i=19456 + i=19458 + i=19459 + i=19460 + i=19461 + i=19464 + i=19465 + i=19466 + i=19467 + i=19476 + i=19478 + i=19480 + i=19482 + i=19483 + i=19484 + i=19485 + i=19487 + i=19505 + i=19509 + i=19518 + i=20101 + i=20138 + i=20139 + i=20141 + i=20142 + i=13225 + i=80 + i=12555 + + + + EventId + + i=68 + i=78 + i=19450 + + + + EventType + + i=68 + i=78 + i=19450 + + + + SourceNode + + i=68 + i=78 + i=19450 + + + + SourceName + + i=68 + i=78 + i=19450 + + + + Time + + i=68 + i=78 + i=19450 + + + + ReceiveTime + + i=68 + i=78 + i=19450 + + + + Message + + i=68 + i=78 + i=19450 + + + + Severity + + i=68 + i=78 + i=19450 + + + + ConditionClassId + + i=68 + i=78 + i=19450 + + + + ConditionClassName + + i=68 + i=78 + i=19450 + + + + ConditionName + + i=68 + i=78 + i=19450 + + + + BranchId + + i=68 + i=78 + i=19450 + + + + Retain + + i=68 + i=78 + i=19450 + + + + EnabledState + + i=19468 + i=8995 + i=78 + i=19450 + + + + Id + + i=68 + i=78 + i=19467 + + + + Quality + + i=19477 + i=9002 + i=78 + i=19450 + + + + SourceTimestamp + + i=68 + i=78 + i=19476 + + + + LastSeverity + + i=19479 + i=9002 + i=78 + i=19450 + + + + SourceTimestamp + + i=68 + i=78 + i=19478 + + + + Comment + + i=19481 + i=9002 + i=78 + i=19450 + + + + SourceTimestamp + + i=68 + i=78 + i=19480 + + + + ClientUserId + + i=68 + i=78 + i=19450 + + + + Disable + + i=2803 + i=78 + i=19450 + + + + Enable + + i=2803 + i=78 + i=19450 + + + + AddComment + + i=19486 + i=2829 + i=78 + i=19450 + + + + InputArguments + + i=68 + i=78 + i=19485 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + AckedState + + i=19488 + i=8995 + i=78 + i=19450 + + + + Id + + i=68 + i=78 + i=19487 + + + + Acknowledge + + i=19506 + i=8944 + i=78 + i=19450 + + + + InputArguments + + i=68 + i=78 + i=19505 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + ActiveState + + i=19510 + i=8995 + i=78 + i=19450 + + + + Id + + i=68 + i=78 + i=19509 + + + + InputNode + + i=68 + i=78 + i=19450 + + + + SuppressedOrShelved + + i=68 + i=78 + i=19450 + + + + NormalState + + i=68 + i=78 + i=19450 + + + + ExpirationDate + + i=68 + i=78 + i=19450 + + + + CertificateType + + i=68 + i=78 + i=19450 + + + + Certificate + + i=68 + i=78 + i=19450 + + + + TrustListOutOfDate + + i=20144 + i=20145 + i=20146 + i=20147 + i=20148 + i=20149 + i=20151 + i=20152 + i=20153 + i=20154 + i=20157 + i=20158 + i=20159 + i=20160 + i=20169 + i=20171 + i=20173 + i=20175 + i=20176 + i=20177 + i=20178 + i=20180 + i=20198 + i=20202 + i=20211 + i=20249 + i=20286 + i=20287 + i=20288 + i=20289 + i=19297 + i=80 + i=12555 + + + + EventId + + i=68 + i=78 + i=20143 + + + + EventType + + i=68 + i=78 + i=20143 + + + + SourceNode + + i=68 + i=78 + i=20143 + + + + SourceName + + i=68 + i=78 + i=20143 + + + + Time + + i=68 + i=78 + i=20143 + + + + ReceiveTime + + i=68 + i=78 + i=20143 + + + + Message + + i=68 + i=78 + i=20143 + + + + Severity + + i=68 + i=78 + i=20143 + + + + ConditionClassId + + i=68 + i=78 + i=20143 + + + + ConditionClassName + + i=68 + i=78 + i=20143 + + + + ConditionName + + i=68 + i=78 + i=20143 + + + + BranchId + + i=68 + i=78 + i=20143 + + + + Retain + + i=68 + i=78 + i=20143 + + + + EnabledState + + i=20161 + i=8995 + i=78 + i=20143 + + + + Id + + i=68 + i=78 + i=20160 + + + + Quality + + i=20170 + i=9002 + i=78 + i=20143 + + + + SourceTimestamp + + i=68 + i=78 + i=20169 + + + + LastSeverity + + i=20172 + i=9002 + i=78 + i=20143 + + + + SourceTimestamp + + i=68 + i=78 + i=20171 + + + + Comment + + i=20174 + i=9002 + i=78 + i=20143 + + + + SourceTimestamp + + i=68 + i=78 + i=20173 + + + + ClientUserId + + i=68 + i=78 + i=20143 + + + + Disable + + i=2803 + i=78 + i=20143 + + + + Enable + + i=2803 + i=78 + i=20143 + + + + AddComment + + i=20179 + i=2829 + i=78 + i=20143 + + + + InputArguments + + i=68 + i=78 + i=20178 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + AckedState + + i=20181 + i=8995 + i=78 + i=20143 + + + + Id + + i=68 + i=78 + i=20180 + + + + Acknowledge + + i=20199 + i=8944 + i=78 + i=20143 + + + + InputArguments + + i=68 + i=78 + i=20198 + + + + + + i=297 + + + + EventId + + i=15 + + -1 + + + The identifier for the event to comment. + + + + + + + i=297 + + + + Comment + + i=21 + + -1 + + + The comment to add to the condition. + + + + + + + + + ActiveState + + i=20203 + i=8995 + i=78 + i=20143 + + + + Id + + i=68 + i=78 + i=20202 + + + + InputNode + + i=68 + i=78 + i=20143 + + + + SuppressedOrShelved + + i=68 + i=78 + i=20143 + + + + NormalState + + i=68 + i=78 + i=20143 + + + + TrustListId + + i=68 + i=78 + i=20143 + + + + LastUpdateTime + + i=68 + i=78 + i=20143 + + + + UpdateFrequency + + i=68 + i=78 + i=20143 + + + + CertificateGroupFolderType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.3/#7.8.3.3 + + i=13814 + i=13848 + i=13882 + i=13916 + i=61 + + + + DefaultApplicationGroup + + i=13815 + i=13847 + i=13225 + i=12555 + i=78 + i=13813 + + + + TrustList + + i=13816 + i=13817 + i=13818 + i=13819 + i=13821 + i=13824 + i=13826 + i=13829 + i=13831 + i=13834 + i=13836 + i=13837 + i=13840 + i=13843 + i=13845 + i=12522 + i=78 + i=13814 + + + + Size + + i=68 + i=78 + i=13815 + + + + Writable + + i=68 + i=78 + i=13815 + + + + UserWritable + + i=68 + i=78 + i=13815 + + + + OpenCount + + i=68 + i=78 + i=13815 + + + + Open + + i=13822 + i=13823 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13821 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13821 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=13825 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13824 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=13827 + i=13828 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13826 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13826 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=13830 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13829 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=13832 + i=13833 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13831 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13831 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=13835 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13834 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=78 + i=13815 + + + + OpenWithMasks + + i=13838 + i=13839 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13837 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13837 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=13841 + i=13842 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13840 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13840 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=13844 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13843 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=13846 + i=78 + i=13815 + + + + InputArguments + + i=68 + i=78 + i=13845 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=78 + i=13814 + + + + DefaultHttpsGroup + + i=13849 + i=13881 + i=13225 + i=12555 + i=80 + i=13813 + + + + TrustList + + i=13850 + i=13851 + i=13852 + i=13853 + i=13855 + i=13858 + i=13860 + i=13863 + i=13865 + i=13868 + i=13870 + i=13871 + i=13874 + i=13877 + i=13879 + i=12522 + i=78 + i=13848 + + + + Size + + i=68 + i=78 + i=13849 + + + + Writable + + i=68 + i=78 + i=13849 + + + + UserWritable + + i=68 + i=78 + i=13849 + + + + OpenCount + + i=68 + i=78 + i=13849 + + + + Open + + i=13856 + i=13857 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13855 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13855 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=13859 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13858 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=13861 + i=13862 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13860 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13860 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=13864 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13863 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=13866 + i=13867 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13865 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13865 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=13869 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13868 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=78 + i=13849 + + + + OpenWithMasks + + i=13872 + i=13873 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13871 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13871 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=13875 + i=13876 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13874 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13874 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=13878 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13877 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=13880 + i=78 + i=13849 + + + + InputArguments + + i=68 + i=78 + i=13879 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=78 + i=13848 + + + + DefaultUserTokenGroup + + i=13883 + i=13915 + i=13225 + i=12555 + i=80 + i=13813 + + + + TrustList + + i=13884 + i=13885 + i=13886 + i=13887 + i=13889 + i=13892 + i=13894 + i=13897 + i=13899 + i=13902 + i=13904 + i=13905 + i=13908 + i=13911 + i=13913 + i=12522 + i=78 + i=13882 + + + + Size + + i=68 + i=78 + i=13883 + + + + Writable + + i=68 + i=78 + i=13883 + + + + UserWritable + + i=68 + i=78 + i=13883 + + + + OpenCount + + i=68 + i=78 + i=13883 + + + + Open + + i=13890 + i=13891 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13889 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13889 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=13893 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13892 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=13895 + i=13896 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13894 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13894 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=13898 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13897 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=13900 + i=13901 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13899 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13899 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=13903 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13902 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=78 + i=13883 + + + + OpenWithMasks + + i=13906 + i=13907 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13905 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13905 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=13909 + i=13910 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13908 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13908 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=13912 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13911 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=13914 + i=78 + i=13883 + + + + InputArguments + + i=68 + i=78 + i=13913 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=78 + i=13882 + + + + <AdditionalGroup> + + i=13917 + i=13949 + i=13225 + i=12555 + i=11508 + i=13813 + + + + TrustList + + i=13918 + i=13919 + i=13920 + i=13921 + i=13923 + i=13926 + i=13928 + i=13931 + i=13933 + i=13936 + i=13938 + i=13939 + i=13942 + i=13945 + i=13947 + i=12522 + i=78 + i=13916 + + + + Size + + i=68 + i=78 + i=13917 + + + + Writable + + i=68 + i=78 + i=13917 + + + + UserWritable + + i=68 + i=78 + i=13917 + + + + OpenCount + + i=68 + i=78 + i=13917 + + + + Open + + i=13924 + i=13925 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13923 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13923 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=13927 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13926 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=13929 + i=13930 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13928 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13928 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=13932 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13931 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=13934 + i=13935 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13933 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13933 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=13937 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13936 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=78 + i=13917 + + + + OpenWithMasks + + i=13940 + i=13941 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13939 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13939 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=13943 + i=13944 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13942 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13942 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=13946 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13945 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=13948 + i=78 + i=13917 + + + + InputArguments + + i=68 + i=78 + i=13947 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=78 + i=13916 + + + + CertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.1 + + i=58 + + + + ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.2 + + i=12556 + + + + HttpsCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.3 + + i=12556 + + + + UserCredentialCertificateType + + i=12556 + + + + RsaMinApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.4 + + i=12557 + + + + RsaSha256ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.5 + + i=12557 + + + + EccApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.6 + + i=12557 + + + + EccNistP256ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.7 + + i=23537 + + + + EccNistP384ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.8 + + i=23537 + + + + EccBrainpoolP256r1ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.9 + + i=23537 + + + + EccBrainpoolP384r1ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.10 + + i=23537 + + + + EccCurve25519ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.11 + + i=23537 + + + + EccCurve448ApplicationCertificateType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.4/#7.8.4.12 + + i=23537 + + + + TrustListUpdateRequestedAuditEventType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.10 + + i=2127 + + + + TrustListUpdatedAuditEventType + GDS Certificate Manager Pull Model + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.2/#7.8.2.11 + + i=32281 + i=2052 + + + + TrustListId + + i=68 + i=78 + i=12561 + + + + TransactionErrorType + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.12 + + i=22 + + + + + + + + + TransactionDiagnosticsType + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.11 + + i=32287 + i=32288 + i=32289 + i=32290 + i=32291 + i=32292 + i=58 + + + + StartTime + + i=68 + i=78 + i=32286 + + + + EndTime + + i=68 + i=78 + i=32286 + + + + Result + + i=68 + i=78 + i=32286 + + + + AffectedTrustLists + + i=68 + i=78 + i=32286 + + + + AffectedCertificateGroups + + i=68 + i=78 + i=32286 + + + + Errors + + i=68 + i=78 + i=32286 + + + + ServerConfigurationType + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.3 + + i=13950 + i=25696 + i=25724 + i=25697 + i=12708 + i=12583 + i=12584 + i=12585 + i=23593 + i=12616 + i=32296 + i=12734 + i=25698 + i=12731 + i=12775 + i=25699 + i=32299 + i=58 + + + + CertificateGroups + + i=13951 + i=13813 + i=78 + i=12581 + + + + DefaultApplicationGroup + + i=13952 + i=13984 + i=13225 + i=12555 + i=78 + i=13950 + + + + TrustList + + i=13953 + i=13954 + i=13955 + i=13956 + i=13958 + i=13961 + i=13963 + i=13966 + i=13968 + i=13971 + i=13973 + i=13974 + i=13977 + i=13980 + i=13982 + i=12522 + i=78 + i=13951 + + + + Size + + i=68 + i=78 + i=13952 + + + + Writable + + i=68 + i=78 + i=13952 + + + + UserWritable + + i=68 + i=78 + i=13952 + + + + OpenCount + + i=68 + i=78 + i=13952 + + + + Open + + i=13959 + i=13960 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13958 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13958 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=13962 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13961 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=13964 + i=13965 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13963 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13963 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=13967 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13966 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=13969 + i=13970 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13968 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13968 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=13972 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13971 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=78 + i=13952 + + + + OpenWithMasks + + i=13975 + i=13976 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13974 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13974 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=13978 + i=13979 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13977 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=13977 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=13981 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13980 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=13983 + i=78 + i=13952 + + + + InputArguments + + i=68 + i=78 + i=13982 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=78 + i=13951 + + + + ApplicationUri + + i=68 + i=80 + i=12581 + + + + ProductUri + + i=68 + i=80 + i=12581 + + + + ApplicationType + + i=68 + i=80 + i=12581 + + + + ServerCapabilities + + i=68 + i=78 + i=12581 + + + + SupportedPrivateKeyFormats + + i=68 + i=78 + i=12581 + + + + MaxTrustListSize + + i=68 + i=78 + i=12581 + + + + MulticastDnsEnabled + + i=68 + i=78 + i=12581 + + + + HasSecureElement + + i=68 + i=80 + i=12581 + + + + UpdateCertificate + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.4 + + i=12617 + i=12618 + i=78 + i=12581 + + + + InputArguments + + i=68 + i=78 + i=12616 + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IssuerCertificates + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + PrivateKeyFormat + + i=12 + + -1 + + + + + + + i=297 + + + + PrivateKey + + i=15 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=12616 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + GetCertificates + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.5 + + i=32297 + i=32298 + i=80 + i=12581 + + + + InputArguments + + i=68 + i=78 + i=32296 + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=32296 + + + + + + i=297 + + + + CertificateTypeIds + + i=17 + + 1 + + 0 + + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + ApplyChanges + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.6 + + i=78 + i=12581 + + + + CancelChanges + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.8 + + i=80 + i=12581 + + + + CreateSigningRequest + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.7 + + i=12732 + i=12733 + i=78 + i=12581 + + + + InputArguments + + i=68 + i=78 + i=12731 + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + SubjectName + + i=12 + + -1 + + + + + + + i=297 + + + + RegeneratePrivateKey + + i=1 + + -1 + + + + + + + i=297 + + + + Nonce + + i=15 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=12731 + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + GetRejectedList + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.9 + + i=12776 + i=78 + i=12581 + + + + OutputArguments + + i=68 + i=78 + i=12775 + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + ResetToServerDefaults + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.10 + + i=80 + i=12581 + + + + TransactionDiagnostics + + i=32300 + i=32301 + i=32302 + i=32303 + i=32304 + i=32305 + i=32286 + i=80 + i=12581 + + + + StartTime + + i=68 + i=78 + i=32299 + + + + EndTime + + i=68 + i=78 + i=32299 + + + + Result + + i=68 + i=78 + i=32299 + + + + AffectedTrustLists + + i=68 + i=78 + i=32299 + + + + AffectedCertificateGroups + + i=68 + i=78 + i=32299 + + + + Errors + + i=68 + i=78 + i=32299 + + + + CertificateUpdateRequestedAuditEventType + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.13 + + i=2127 + + + + CertificateUpdatedAuditEventType + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.14 + + i=13735 + i=13736 + i=2052 + + + + CertificateGroup + + i=68 + i=78 + i=12620 + + + + CertificateType + + i=68 + i=78 + i=12620 + + + + ServerConfiguration + Push Model for Global Certificate and TrustList Management + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.2 + + i=14053 + i=25706 + i=25725 + i=25707 + i=12710 + i=12639 + i=12640 + i=12641 + i=23597 + i=13737 + i=12740 + i=25708 + i=12737 + i=12777 + i=25709 + i=25710 + i=2253 + i=12581 + + + + CertificateGroups + + i=14156 + i=14088 + i=14122 + i=13813 + i=12637 + + + + DefaultApplicationGroup + + i=12642 + i=14161 + i=13225 + i=12555 + i=14053 + + + + TrustList + + i=12643 + i=14157 + i=14158 + i=12646 + i=12647 + i=12650 + i=12652 + i=12655 + i=12657 + i=12660 + i=12662 + i=12663 + i=12666 + i=12668 + i=12670 + i=12522 + i=14156 + + + + Size + + i=68 + i=12642 + + + + Writable + + i=68 + i=12642 + + + + UserWritable + + i=68 + i=12642 + + + + OpenCount + + i=68 + i=12642 + + + + Open + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.2 + + i=12648 + i=12649 + i=12642 + + + + InputArguments + + i=68 + i=12647 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=12647 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.3 + + i=12651 + i=12642 + + + + InputArguments + + i=68 + i=12650 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.4 + + i=12653 + i=12654 + i=12642 + + + + InputArguments + + i=68 + i=12652 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=12652 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.5 + + i=12656 + i=12642 + + + + InputArguments + + i=68 + i=12655 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.6 + + i=12658 + i=12659 + i=12642 + + + + InputArguments + + i=68 + i=12657 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=12657 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + Base Info FileType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/4.2.7 + + i=12661 + i=12642 + + + + InputArguments + + i=68 + i=12660 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=12642 + + + + OpenWithMasks + + i=12664 + i=12665 + i=12642 + + + + InputArguments + + i=68 + i=12663 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=12663 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=14160 + i=12667 + i=12642 + + + + InputArguments + + i=68 + i=12666 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=12666 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=12669 + i=12642 + + + + InputArguments + + i=68 + i=12668 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=12671 + i=12642 + + + + InputArguments + + i=68 + i=12670 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=14156 + + + + DefaultHttpsGroup + + i=14089 + i=14121 + i=13225 + i=12555 + i=14053 + + + + TrustList + + i=14090 + i=14091 + i=14092 + i=14093 + i=14095 + i=14098 + i=14100 + i=14103 + i=14105 + i=14108 + i=14110 + i=14111 + i=14114 + i=14117 + i=14119 + i=12522 + i=14088 + + + + Size + + i=68 + i=14089 + + + + Writable + + i=68 + i=14089 + + + + UserWritable + + i=68 + i=14089 + + + + OpenCount + + i=68 + i=14089 + + + + Open + + i=14096 + i=14097 + i=14089 + + + + InputArguments + + i=68 + i=14095 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14095 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=14099 + i=14089 + + + + InputArguments + + i=68 + i=14098 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=14101 + i=14102 + i=14089 + + + + InputArguments + + i=68 + i=14100 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14100 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=14104 + i=14089 + + + + InputArguments + + i=68 + i=14103 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=14106 + i=14107 + i=14089 + + + + InputArguments + + i=68 + i=14105 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14105 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=14109 + i=14089 + + + + InputArguments + + i=68 + i=14108 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=14089 + + + + OpenWithMasks + + i=14112 + i=14113 + i=14089 + + + + InputArguments + + i=68 + i=14111 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14111 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=14115 + i=14116 + i=14089 + + + + InputArguments + + i=68 + i=14114 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14114 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=14118 + i=14089 + + + + InputArguments + + i=68 + i=14117 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=14120 + i=14089 + + + + InputArguments + + i=68 + i=14119 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=14088 + + + + DefaultUserTokenGroup + + i=14123 + i=14155 + i=13225 + i=12555 + i=14053 + + + + TrustList + + i=14124 + i=14125 + i=14126 + i=14127 + i=14129 + i=14132 + i=14134 + i=14137 + i=14139 + i=14142 + i=14144 + i=14145 + i=14148 + i=14151 + i=14153 + i=12522 + i=14122 + + + + Size + + i=68 + i=14123 + + + + Writable + + i=68 + i=14123 + + + + UserWritable + + i=68 + i=14123 + + + + OpenCount + + i=68 + i=14123 + + + + Open + + i=14130 + i=14131 + i=14123 + + + + InputArguments + + i=68 + i=14129 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14129 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=14133 + i=14123 + + + + InputArguments + + i=68 + i=14132 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=14135 + i=14136 + i=14123 + + + + InputArguments + + i=68 + i=14134 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14134 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=14138 + i=14123 + + + + InputArguments + + i=68 + i=14137 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=14140 + i=14141 + i=14123 + + + + InputArguments + + i=68 + i=14139 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14139 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=14143 + i=14123 + + + + InputArguments + + i=68 + i=14142 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=14123 + + + + OpenWithMasks + + i=14146 + i=14147 + i=14123 + + + + InputArguments + + i=68 + i=14145 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14145 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=14149 + i=14150 + i=14123 + + + + InputArguments + + i=68 + i=14148 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=14148 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=14152 + i=14123 + + + + InputArguments + + i=68 + i=14151 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=14154 + i=14123 + + + + InputArguments + + i=68 + i=14153 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=14122 + + + + ApplicationUri + + i=68 + i=12637 + + + + ProductUri + + i=68 + i=12637 + + + + ApplicationType + + i=68 + i=12637 + + + + ServerCapabilities + + i=68 + i=12637 + + + + SupportedPrivateKeyFormats + + i=68 + i=12637 + + + + MaxTrustListSize + + i=68 + i=12637 + + + + MulticastDnsEnabled + + i=68 + i=12637 + + + + HasSecureElement + + i=68 + i=12637 + + + + UpdateCertificate + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.4 + + i=13738 + i=13739 + i=12637 + + + + InputArguments + + i=68 + i=13737 + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IssuerCertificates + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + PrivateKeyFormat + + i=12 + + -1 + + + + + + + i=297 + + + + PrivateKey + + i=15 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=13737 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + ApplyChanges + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.6 + + i=12637 + + + + CancelChanges + + i=12637 + + + + CreateSigningRequest + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.7 + + i=12738 + i=12739 + i=12637 + + + + InputArguments + + i=68 + i=12737 + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + SubjectName + + i=12 + + -1 + + + + + + + i=297 + + + + RegeneratePrivateKey + + i=1 + + -1 + + + + + + + i=297 + + + + Nonce + + i=15 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=12737 + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + GetRejectedList + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.9 + + i=12778 + i=12637 + + + + OutputArguments + + i=68 + i=12777 + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + ResetToServerDefaults + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.10.10 + + i=12637 + + + + SetAdminPassword + https://reference.opcfoundation.org/v105/Core/docs/Part12/7.8.10 + + i=12637 + + + + KeyCredentialConfigurationFolderType + GDS Key Credential Service Push Model + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.1 + + i=17511 + i=17522 + i=61 + + + + <ServiceName> + + i=17512 + i=17513 + i=18001 + i=11508 + i=17496 + + + + ResourceUri + + i=68 + i=78 + i=17511 + + + + ProfileUri + + i=68 + i=78 + i=17511 + + + + CreateCredential + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.2 + + i=17523 + i=17524 + i=80 + i=17496 + + + + InputArguments + + i=68 + i=78 + i=17522 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + ResourceUri + + i=12 + + -1 + + + + + + + i=297 + + + + ProfileUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrls + + i=12 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=17522 + + + + + + i=297 + + + + CredentialNodeId + + i=17 + + -1 + + + + + + + + + KeyCredentialConfiguration + GDS Key Credential Service Push Model + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.3 + + i=12637 + i=17496 + + + + KeyCredentialConfigurationType + GDS Key Credential Service Push Model + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.4 + + i=18069 + i=18165 + i=18004 + i=18005 + i=17534 + i=18006 + i=18008 + i=58 + + + + ResourceUri + + i=68 + i=78 + i=18001 + + + + ProfileUri + + i=68 + i=78 + i=18001 + + + + EndpointUrls + + i=68 + i=80 + i=18001 + + + + ServiceStatus + + i=68 + i=80 + i=18001 + + + + GetEncryptingKey + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.5 + + i=17535 + i=17536 + i=80 + i=18001 + + + + InputArguments + + i=68 + i=78 + i=17534 + + + + + + i=297 + + + + CredentialId + + i=12 + + -1 + + + + + + + i=297 + + + + RequestedSecurityPolicyUri + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=17534 + + + + + + i=297 + + + + PublicKey + + i=15 + + -1 + + + + + + + i=297 + + + + RevisedSecurityPolicyUri + + i=12 + + -1 + + + + + + + + + UpdateCredential + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.6 + + i=18007 + i=80 + i=18001 + + + + InputArguments + + i=68 + i=78 + i=18006 + + + + + + i=297 + + + + CredentialId + + i=12 + + -1 + + + + + + + i=297 + + + + CredentialSecret + + i=15 + + -1 + + + + + + + i=297 + + + + CertificateThumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + + + DeleteCredential + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.7 + + i=80 + i=18001 + + + + KeyCredentialAuditEventType + GDS Key Credential Service Pull Model + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.5.8 + + i=18028 + i=2127 + + + + ResourceUri + + i=68 + i=78 + i=18011 + + + + KeyCredentialUpdatedAuditEventType + Push Model for KeyCredential Service + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.8 + + i=18011 + + + + KeyCredentialDeletedAuditEventType + GDS Key Credential Service Push Model + https://reference.opcfoundation.org/v105/Core/docs/Part12/8.6.9 + + i=18064 + i=18011 + + + + ResourceUri + + i=68 + i=78 + i=18047 + + + + AuthorizationServicesConfigurationFolderType + Authorization Service Configuration Server + https://reference.opcfoundation.org/v105/Core/docs/Part12/9.7.2 + + i=23557 + i=61 + + + + <ServiceName> + + i=23558 + i=23559 + i=23560 + i=17852 + i=11508 + i=23556 + + + + ServiceUri + + i=68 + i=78 + i=23557 + + + + ServiceCertificate + + i=68 + i=78 + i=23557 + + + + IssuerEndpointUrl + + i=68 + i=78 + i=23557 + + + + AuthorizationServices + Authorization Service Configuration Server + https://reference.opcfoundation.org/v105/Core/docs/Part12/9.7.3 + + i=12637 + i=61 + + + + AuthorizationServiceConfigurationType + Authorization Service Configuration Server + https://reference.opcfoundation.org/v105/Core/docs/Part12/9.7.4 + + i=18072 + i=17860 + i=18073 + i=58 + + + + ServiceUri + + i=68 + i=78 + i=17852 + + + + ServiceCertificate + + i=68 + i=78 + i=17852 + + + + IssuerEndpointUrl + + i=68 + i=78 + i=17852 + + + + AggregateConfigurationType + Aggregate Master Configuration + https://reference.opcfoundation.org/v105/Core/docs/Part13/4.2.1/#4.2.1.2 + + i=11188 + i=11189 + i=11190 + i=11191 + i=58 + + + + TreatUncertainAsBad + + i=68 + i=78 + i=11187 + + + + PercentDataBad + + i=68 + i=78 + i=11187 + + + + PercentDataGood + + i=68 + i=78 + i=11187 + + + + UseSlopedExtrapolation + + i=68 + i=78 + i=11187 + + + + Interpolative + + i=2340 + + + + Average + + i=2340 + + + + TimeAverage + + i=2340 + + + + TimeAverage2 + + i=2340 + + + + Total + + i=2340 + + + + Total2 + + i=2340 + + + + Minimum + + i=2340 + + + + Maximum + + i=2340 + + + + MinimumActualTime + + i=2340 + + + + MaximumActualTime + + i=2340 + + + + Range + + i=2340 + + + + Minimum2 + + i=2340 + + + + Maximum2 + + i=2340 + + + + MinimumActualTime2 + + i=2340 + + + + MaximumActualTime2 + + i=2340 + + + + Range2 + + i=2340 + + + + AnnotationCount + + i=2340 + + + + Count + + i=2340 + + + + DurationInStateZero + + i=2340 + + + + DurationInStateNonZero + + i=2340 + + + + NumberOfTransitions + + i=2340 + + + + Start + https://reference.opcfoundation.org/v105/Core/docs/Part10/A.2.6/#A.2.6.2 + + i=2340 + + + + End + + i=2340 + + + + Delta + + i=2340 + + + + StartBound + + i=2340 + + + + EndBound + + i=2340 + + + + DeltaBounds + + i=2340 + + + + DurationGood + + i=2340 + + + + DurationBad + + i=2340 + + + + PercentGood + + i=2340 + + + + PercentBad + + i=2340 + + + + WorstQuality + + i=2340 + + + + WorstQuality2 + + i=2340 + + + + StandardDeviationSample + + i=2340 + + + + StandardDeviationPopulation + + i=2340 + + + + VarianceSample + + i=2340 + + + + VariancePopulation + + i=2340 + + + + DataTypeSchemaHeader + Base Info UaBinary File + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.31 + + i=22 + + + + + + + + + + DataTypeDescription + Base Info UaBinary File + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.32 + + i=22 + + + + + + + + StructureDescription + Base Info UaBinary File + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.33 + + i=14525 + + + + + + + EnumDescription + Base Info UaBinary File + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.34 + + i=14525 + + + + + + + + SimpleTypeDescription + Base Info UaBinary File + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.35 + + i=14525 + + + + + + + + UABinaryFileDataType + Base Info UaBinary File + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.36 + + i=15534 + + + + + + + + + PortableQualifiedName + Base Info Portable IDs + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.37 + + i=22 + + + + + + + + PortableNodeId + Base Info Portable IDs + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.38 + + i=22 + + + + + + + + UnsignedRationalNumber + Base Info Rational Number + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.40 + + i=22 + + + + + + + + PubSubState + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.1 + + i=14648 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=14647 + + + + + Disabled + + + Paused + + + Operational + + + Error + + + PreOperational + + + + + + DataSetMetaDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.2.2 + + i=15534 + + + + + + + + + + + FieldMetaData + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.2.3 + + i=22 + + + + + + + + + + + + + + + + DataSetFieldFlags + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.2.4 + + i=15577 + i=5 + + + + + + + OptionSetValues + + i=68 + i=15904 + + + + + PromotedField + + + + + + ConfigurationVersionDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.2.5 + + i=22 + + + + + + + + PublishedDataSetDataType + PubSub Parameters PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.5 + + i=22 + + + + + + + + + + + PublishedDataSetSourceDataType + PubSub Parameters PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.6 + + i=22 + + + + + PublishedVariableDataType + PubSub Parameters PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.7.1 + + i=22 + + + + + + + + + + + + + + PublishedDataItemsDataType + PubSub Parameters PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.7.2 + + i=15580 + + + + + + + PublishedEventsDataType + PubSub Parameters PublishedDataSet Events + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.8.4 + + i=15580 + + + + + + + + + PublishedDataSetCustomSourceDataType + PubSub Parameters PublishedDataSet Custom + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.3/#6.2.3.9.2 + + i=15580 + + + + + + + DataSetFieldContentMask + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.4/#6.2.4.2 + + i=15584 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=15583 + + + + + StatusCode + + + SourceTimestamp + + + ServerTimestamp + + + SourcePicoSeconds + + + ServerPicoSeconds + + + RawData + + + + + + DataSetWriterDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.4/#6.2.4.5.1 + + i=22 + + + + + + + + + + + + + + + DataSetWriterTransportDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.4/#6.2.4.5.2 + + i=22 + + + + + DataSetWriterMessageDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.4/#6.2.4.5.3 + + i=22 + + + + + PubSubGroupDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.5/#6.2.5.7 + + i=22 + + + + + + + + + + + + + WriterGroupDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.6/#6.2.6.7.1 + + i=15609 + + + + + + + + + + + + + + + WriterGroupTransportDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.6/#6.2.6.7.2 + + i=22 + + + + + WriterGroupMessageDataType + PubSub Parameters Discovery + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.6/#6.2.6.7.3 + + i=22 + + + + + PubSubConnectionDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.7/#6.2.7.5.1 + + i=22 + + + + + + + + + + + + + + + ConnectionTransportDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.7/#6.2.7.5.2 + + i=22 + + + + + NetworkAddressDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.7/#6.2.7.5.3 + + i=22 + + + + + + + NetworkAddressUrlDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.7/#6.2.7.5.4 + + i=15502 + + + + + + + ReaderGroupDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.8/#6.2.8.2.1 + + i=15609 + + + + + + + + + ReaderGroupTransportDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.8/#6.2.8.2.2 + + i=22 + + + + + ReaderGroupMessageDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.8/#6.2.8.2.3 + + i=22 + + + + + DataSetReaderDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.9/#6.2.9.13.1 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + DataSetReaderTransportDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.9/#6.2.9.13.2 + + i=22 + + + + + DataSetReaderMessageDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.9/#6.2.9.13.3 + + i=22 + + + + + SubscribedDataSetDataType + PubSub Parameters Discovery Extended + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.10/#6.2.10.1 + + i=22 + + + + + TargetVariablesDataType + PubSub Parameters SubscribedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.10/#6.2.10.2.2 + + i=15630 + + + + + + + FieldTargetDataType + PubSub Parameters SubscribedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.10/#6.2.10.2.3 + + i=22 + + + + + + + + + + + + + OverrideValueHandling + PubSub Parameters SubscribedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.10/#6.2.10.2.4 + + i=15875 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=15874 + + + + + Disabled + + + LastUsableValue + + + OverrideValue + + + + + + SubscribedDataSetMirrorDataType + PubSub Parameters SubscribedDataSet Mirror + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.10/#6.2.10.3.4 + + i=15630 + + + + + + + + PubSubConfigurationDataType + PubSub Parameters Configuration + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.12/#6.2.12.1 + + i=22 + + + + + + + + + StandaloneSubscribedDataSetRefDataType + PubSub Parameters SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.10/#6.2.10.4 + + i=15630 + + + + + + + StandaloneSubscribedDataSetDataType + PubSub Parameters SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.10/#6.2.10.5 + + i=15630 + + + + + + + + + + SecurityGroupDataType + PubSub Parameters Configuration2 + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.12/#6.2.12.2 + + i=22 + + + + + + + + + + + + + + + PubSubKeyPushTargetDataType + PubSub Parameters Configuration2 + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.12/#6.2.12.3 + + i=22 + + + + + + + + + + + + + + + PubSubConfiguration2DataType + PubSub Parameters Configuration2 + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.2.12/#6.2.12.4 + + i=15530 + + + + + + + + + + + + + DataSetOrderingType + PubSub Parameters UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.1/#6.3.1.1.3 + + i=15641 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=20408 + + + + + Undefined + + + AscendingWriterId + + + AscendingWriterIdSingle + + + + + + UadpNetworkMessageContentMask + PubSub Parameters UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.1/#6.3.1.1.4 + + i=15643 + i=7 + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=15642 + + + + + PublisherId + + + GroupHeader + + + WriterGroupId + + + GroupVersion + + + NetworkMessageNumber + + + SequenceNumber + + + PayloadHeader + + + Timestamp + + + PicoSeconds + + + DataSetClassId + + + PromotedFields + + + + + + UadpWriterGroupMessageDataType + PubSub Parameters UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.1/#6.3.1.1.7 + + i=15616 + + + + + + + + + + + UadpDataSetMessageContentMask + PubSub Parameters UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.1/#6.3.1.3.2 + + i=15647 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=15646 + + + + + Timestamp + + + PicoSeconds + + + Status + + + MajorVersion + + + MinorVersion + + + SequenceNumber + + + + + + UadpDataSetWriterMessageDataType + PubSub Parameters UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.1/#6.3.1.3.6 + + i=15605 + + + + + + + + + + UadpDataSetReaderMessageDataType + PubSub Parameters UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.1/#6.3.1.4.10 + + i=15629 + + + + + + + + + + + + + + + JsonNetworkMessageContentMask + PubSub Parameters JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.2/#6.3.2.1.1 + + i=15655 + i=7 + + + + + + + + + + + + OptionSetValues + + i=68 + i=15654 + + + + + NetworkMessageHeader + + + DataSetMessageHeader + + + SingleDataSetMessage + + + PublisherId + + + DataSetClassId + + + ReplyTo + + + + + + JsonWriterGroupMessageDataType + PubSub Parameters JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.2/#6.3.2.1.2 + + i=15616 + + + + + + + JsonDataSetMessageContentMask + PubSub Parameters JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.2/#6.3.2.3.1 + + i=15659 + i=7 + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=15658 + + + + + DataSetWriterId + + + MetaDataVersion + + + SequenceNumber + + + Timestamp + + + Status + + + MessageType + + + DataSetWriterName + + + ReversibleFieldEncoding + + + + + + JsonDataSetWriterMessageDataType + PubSub Parameters JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.2/#6.3.2.3.2 + + i=15605 + + + + + + + JsonDataSetReaderMessageDataType + PubSub Parameters JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.3.2/#6.3.2.4.3 + + i=15629 + + + + + + + + QosDataType + PubSub Parameters QoS + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.1.2 + + i=22 + + + + + TransmitQosDataType + PubSub Parameters QoS + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.1.3 + + i=23603 + + + + + TransmitQosPriorityDataType + PubSub Parameters QoS + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.1.4.2 + + i=23604 + + + + + + + ReceiveQosDataType + PubSub Parameters QoS + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.1.5 + + i=23603 + + + + + ReceiveQosPriorityDataType + PubSub Parameters QoS + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.1.6.2 + + i=23608 + + + + + + + DatagramConnectionTransportDataType + PubSub Parameters Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.2.2 + + i=15618 + + + + + + + DatagramConnectionTransport2DataType + PubSub Parameters Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.2.7 + + i=17467 + + + + + + + + + + DatagramWriterGroupTransportDataType + PubSub Parameters Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.3.3 + + i=15611 + + + + + + + + DatagramWriterGroupTransport2DataType + PubSub Parameters Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.3.9 + + i=15532 + + + + + + + + + + + DatagramDataSetReaderTransportDataType + PubSub Parameters Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.1/#6.4.1.6.5 + + i=15628 + + + + + + + + + + BrokerConnectionTransportDataType + PubSub Parameters Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.2/#6.4.2.2.3 + + i=15618 + + + + + + + + BrokerTransportQualityOfService + PubSub Parameters Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.2/#6.4.2.1 + + i=15009 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=15008 + + + + + NotSpecified + + + BestEffort + + + AtLeastOnce + + + AtMostOnce + + + ExactlyOnce + + + + + + BrokerWriterGroupTransportDataType + PubSub Parameters Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.2/#6.4.2.3.5 + + i=15611 + + + + + + + + + + BrokerDataSetWriterTransportDataType + PubSub Parameters Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.2/#6.4.2.5.7 + + i=15598 + + + + + + + + + + + + BrokerDataSetReaderTransportDataType + PubSub Parameters Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/6.4.2/#6.4.2.6.6 + + i=15628 + + + + + + + + + + + PubSubKeyServiceType + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.3.1 + + i=15907 + i=15910 + i=15913 + i=25277 + i=58 + + + + GetSecurityKeys + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.3.2 + + i=15908 + i=15909 + i=80 + i=15906 + + + + InputArguments + + i=68 + i=78 + i=15907 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + StartingTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15907 + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + FirstTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + Keys + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + TimeToNextKey + + i=290 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + + + GetSecurityGroup + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.3.3 + + i=15911 + i=15912 + i=80 + i=15906 + + + + InputArguments + + i=68 + i=78 + i=15910 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15910 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + SecurityGroups + + i=15914 + i=15917 + i=15452 + i=80 + i=15906 + + + + AddSecurityGroup + + i=15915 + i=15916 + i=78 + i=15913 + + + + InputArguments + + i=68 + i=78 + i=15914 + + + + + + i=297 + + + + SecurityGroupName + + i=12 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + MaxFutureKeyCount + + i=7 + + -1 + + + + + + + i=297 + + + + MaxPastKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15914 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + RemoveSecurityGroup + + i=15918 + i=78 + i=15913 + + + + InputArguments + + i=68 + i=78 + i=15917 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + KeyPushTargets + + i=25278 + i=25281 + i=25346 + i=80 + i=15906 + + + + AddPushTarget + + i=25279 + i=25280 + i=78 + i=25277 + + + + InputArguments + + i=68 + i=78 + i=25278 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrl + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + UserTokenType + + i=304 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=5 + + -1 + + + + + + + i=297 + + + + RetryInterval + + i=290 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25278 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + RemovePushTarget + + i=25282 + i=78 + i=25277 + + + + InputArguments + + i=68 + i=78 + i=25281 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + SecurityGroupFolderType + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.5.1 + + i=15453 + i=15459 + i=15461 + i=15464 + i=25312 + i=25315 + i=25317 + i=61 + + + + <SecurityGroupFolderName> + + i=15454 + i=15457 + i=25293 + i=25296 + i=25298 + i=15452 + i=11508 + i=15452 + + + + AddSecurityGroup + + i=15455 + i=15456 + i=78 + i=15453 + + + + InputArguments + + i=68 + i=78 + i=15454 + + + + + + i=297 + + + + SecurityGroupName + + i=12 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + MaxFutureKeyCount + + i=7 + + -1 + + + + + + + i=297 + + + + MaxPastKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15454 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + RemoveSecurityGroup + + i=15458 + i=78 + i=15453 + + + + InputArguments + + i=68 + i=78 + i=15457 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + AddSecurityGroupFolder + + i=25294 + i=25295 + i=80 + i=15453 + + + + InputArguments + + i=68 + i=78 + i=25293 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25293 + + + + + + i=297 + + + + SecurityGroupFolderNodeId + + i=17 + + -1 + + + + + + + + + RemoveSecurityGroupFolder + + i=25297 + i=80 + i=15453 + + + + InputArguments + + i=68 + i=78 + i=25296 + + + + + + i=297 + + + + SecurityGroupFolderNodeId + + i=17 + + -1 + + + + + + + + + SupportedSecurityPolicyUris + + i=68 + i=80 + i=15453 + + + + <SecurityGroupName> + + i=15460 + i=15010 + i=15011 + i=15012 + i=15043 + i=15471 + i=11508 + i=15452 + + + + SecurityGroupId + + i=68 + i=78 + i=15459 + + + + KeyLifetime + + i=68 + i=78 + i=15459 + + + + SecurityPolicyUri + + i=68 + i=78 + i=15459 + + + + MaxFutureKeyCount + + i=68 + i=78 + i=15459 + + + + MaxPastKeyCount + + i=68 + i=78 + i=15459 + + + + AddSecurityGroup + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.5.2 + + i=15462 + i=15463 + i=78 + i=15452 + + + + InputArguments + + i=68 + i=78 + i=15461 + + + + + + i=297 + + + + SecurityGroupName + + i=12 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + MaxFutureKeyCount + + i=7 + + -1 + + + + + + + i=297 + + + + MaxPastKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15461 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + RemoveSecurityGroup + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.5.3 + + i=15465 + i=78 + i=15452 + + + + InputArguments + + i=68 + i=78 + i=15464 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + AddSecurityGroupFolder + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.5.4 + + i=25313 + i=25314 + i=80 + i=15452 + + + + InputArguments + + i=68 + i=78 + i=25312 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25312 + + + + + + i=297 + + + + SecurityGroupFolderNodeId + + i=17 + + -1 + + + + + + + + + RemoveSecurityGroupFolder + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.5.5 + + i=25316 + i=80 + i=15452 + + + + InputArguments + + i=68 + i=78 + i=25315 + + + + + + i=297 + + + + SecurityGroupFolderNodeId + + i=17 + + -1 + + + + + + + + + SupportedSecurityPolicyUris + + i=68 + i=80 + i=15452 + + + + SecurityGroupType + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.4.1 + + i=15472 + i=15046 + i=15047 + i=15048 + i=15056 + i=25624 + i=25625 + i=58 + + + + SecurityGroupId + + i=68 + i=78 + i=15471 + + + + KeyLifetime + + i=68 + i=78 + i=15471 + + + + SecurityPolicyUri + + i=68 + i=78 + i=15471 + + + + MaxFutureKeyCount + + i=68 + i=78 + i=15471 + + + + MaxPastKeyCount + + i=68 + i=78 + i=15471 + + + + InvalidateKeys + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.4.2 + + i=80 + i=15471 + + + + ForceKeyRotation + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.4.3 + + i=80 + i=15471 + + + + HasPushedSecurityGroup + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.6.6 + + i=33 + + HasPushTarget + + + PubSubKeyPushTargetType + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.6.1 + + i=25626 + i=25634 + i=25635 + i=25340 + i=25636 + i=25637 + i=25638 + i=25639 + i=25640 + i=25641 + i=25644 + i=25647 + i=58 + + + + <SecurityGroupName> + + i=25627 + i=25628 + i=25629 + i=25630 + i=25631 + i=15471 + i=11508 + i=25337 + + + + SecurityGroupId + + i=68 + i=78 + i=25626 + + + + KeyLifetime + + i=68 + i=78 + i=25626 + + + + SecurityPolicyUri + + i=68 + i=78 + i=25626 + + + + MaxFutureKeyCount + + i=68 + i=78 + i=25626 + + + + MaxPastKeyCount + + i=68 + i=78 + i=25626 + + + + ApplicationUri + + i=68 + i=78 + i=25337 + + + + EndpointUrl + + i=68 + i=78 + i=25337 + + + + SecurityPolicyUri + + i=68 + i=78 + i=25337 + + + + UserTokenType + + i=68 + i=78 + i=25337 + + + + RequestedKeyCount + + i=68 + i=78 + i=25337 + + + + RetryInterval + + i=68 + i=78 + i=25337 + + + + LastPushExecutionTime + + i=68 + i=78 + i=25337 + + + + LastPushErrorTime + + i=68 + i=78 + i=25337 + + + + ConnectSecurityGroups + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.6.3 + + i=25642 + i=25643 + i=78 + i=25337 + + + + InputArguments + + i=68 + i=78 + i=25641 + + + + + + i=297 + + + + SecurityGroupIds + + i=17 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25641 + + + + + + i=297 + + + + ConnectResults + + i=19 + + 1 + + 0 + + + + + + + + + DisconnectSecurityGroups + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.6.4 + + i=25645 + i=25646 + i=78 + i=25337 + + + + InputArguments + + i=68 + i=78 + i=25644 + + + + + + i=297 + + + + SecurityGroupIds + + i=17 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25644 + + + + + + i=297 + + + + DisconnectResults + + i=19 + + 1 + + 0 + + + + + + + + + TriggerKeyUpdate + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.6.6 + + i=78 + i=25337 + + + + PubSubKeyPushTargetFolderType + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.7.1 + + i=25347 + i=25358 + i=25366 + i=25369 + i=25371 + i=25374 + i=61 + + + + <PushTargetFolderName> + + i=25348 + i=25351 + i=25353 + i=25356 + i=25346 + i=11508 + i=25346 + + + + AddPushTarget + + i=25349 + i=25350 + i=78 + i=25347 + + + + InputArguments + + i=68 + i=78 + i=25348 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrl + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + UserTokenType + + i=304 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=5 + + -1 + + + + + + + i=297 + + + + RetryInterval + + i=290 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25348 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + RemovePushTarget + + i=25352 + i=78 + i=25347 + + + + InputArguments + + i=68 + i=78 + i=25351 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + AddPushTargetFolder + + i=25354 + i=25355 + i=80 + i=25347 + + + + InputArguments + + i=68 + i=78 + i=25353 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25353 + + + + + + i=297 + + + + PushTargetFolderNodeId + + i=17 + + -1 + + + + + + + + + RemovePushTargetFolder + + i=25357 + i=80 + i=25347 + + + + InputArguments + + i=68 + i=78 + i=25356 + + + + + + i=297 + + + + PushTargetFolderNodeId + + i=17 + + -1 + + + + + + + + + <PushTargetName> + + i=25648 + i=25649 + i=25361 + i=25650 + i=25651 + i=25652 + i=25653 + i=25654 + i=25655 + i=25658 + i=25661 + i=25337 + i=11508 + i=25346 + + + + ApplicationUri + + i=68 + i=78 + i=25358 + + + + EndpointUrl + + i=68 + i=78 + i=25358 + + + + SecurityPolicyUri + + i=68 + i=78 + i=25358 + + + + UserTokenType + + i=68 + i=78 + i=25358 + + + + RequestedKeyCount + + i=68 + i=78 + i=25358 + + + + RetryInterval + + i=68 + i=78 + i=25358 + + + + LastPushExecutionTime + + i=68 + i=78 + i=25358 + + + + LastPushErrorTime + + i=68 + i=78 + i=25358 + + + + ConnectSecurityGroups + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.6.3 + + i=25656 + i=25657 + i=78 + i=25358 + + + + InputArguments + + i=68 + i=78 + i=25655 + + + + + + i=297 + + + + SecurityGroupIds + + i=17 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25655 + + + + + + i=297 + + + + ConnectResults + + i=19 + + 1 + + 0 + + + + + + + + + DisconnectSecurityGroups + + i=25659 + i=25660 + i=78 + i=25358 + + + + InputArguments + + i=68 + i=78 + i=25658 + + + + + + i=297 + + + + SecurityGroupIds + + i=17 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25658 + + + + + + i=297 + + + + DisconnectResults + + i=19 + + 1 + + 0 + + + + + + + + + TriggerKeyUpdate + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.6.6 + + i=78 + i=25358 + + + + AddPushTarget + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.7.2 + + i=25367 + i=25368 + i=78 + i=25346 + + + + InputArguments + + i=68 + i=78 + i=25366 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrl + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + UserTokenType + + i=304 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=5 + + -1 + + + + + + + i=297 + + + + RetryInterval + + i=290 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25366 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + RemovePushTarget + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.7.3 + + i=25370 + i=78 + i=25346 + + + + InputArguments + + i=68 + i=78 + i=25369 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + AddPushTargetFolder + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.7.4 + + i=25372 + i=25373 + i=80 + i=25346 + + + + InputArguments + + i=68 + i=78 + i=25371 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25371 + + + + + + i=297 + + + + PushTargetFolderNodeId + + i=17 + + -1 + + + + + + + + + RemovePushTargetFolder + PubSub Model SKS Push + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.7.5 + + i=25375 + i=80 + i=25346 + + + + InputArguments + + i=68 + i=78 + i=25374 + + + + + + i=297 + + + + PushTargetFolderNodeId + + i=17 + + -1 + + + + + + + + + PublishSubscribeType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.2 + + i=14417 + i=17296 + i=16598 + i=14432 + i=14434 + i=23622 + i=25403 + i=15844 + i=18715 + i=23642 + i=23649 + i=17479 + i=25432 + i=25433 + i=32396 + i=32397 + i=15906 + + + + <ConnectionName> + + i=14418 + i=17292 + i=17478 + i=14423 + i=14419 + i=14209 + i=11508 + i=14416 + + + + PublisherId + + i=68 + i=78 + i=14417 + + + + TransportProfileUri + + i=17706 + i=16309 + i=78 + i=14417 + + + + Selections + + i=68 + i=78 + i=17292 + + + + ConnectionProperties + + i=68 + i=78 + i=14417 + + + + Address + + i=15533 + i=21145 + i=78 + i=14417 + + + + NetworkInterface + + i=17503 + i=16309 + i=78 + i=14423 + + + + Selections + + i=68 + i=78 + i=15533 + + + + Status + + i=14420 + i=14643 + i=78 + i=14417 + + + + State + + i=63 + i=78 + i=14419 + + + + SetSecurityKeys + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.3 + + i=17297 + i=80 + i=14416 + + + + InputArguments + + i=68 + i=78 + i=17296 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + CurrentTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + CurrentKey + + i=15 + + -1 + + + + + + + i=297 + + + + FutureKeys + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + TimeToNextKey + + i=290 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + + + AddConnection + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.4 + + i=16599 + i=16600 + i=80 + i=14416 + + + + InputArguments + + i=68 + i=78 + i=16598 + + + + + + i=297 + + + + Configuration + + i=15617 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16598 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + RemoveConnection + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.5 + + i=14433 + i=80 + i=14416 + + + + InputArguments + + i=68 + i=78 + i=14432 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + PublishedDataSets + + i=14477 + i=78 + i=14416 + + + + SubscribedDataSets + + i=23795 + i=80 + i=14416 + + + + PubSubConfiguration + + i=25404 + i=25405 + i=25406 + i=25407 + i=25411 + i=25414 + i=25416 + i=25419 + i=25421 + i=25424 + i=25426 + i=25429 + i=25482 + i=80 + i=14416 + + + + Size + + i=68 + i=78 + i=25403 + + + + Writable + + i=68 + i=78 + i=25403 + + + + UserWritable + + i=68 + i=78 + i=25403 + + + + OpenCount + + i=68 + i=78 + i=25403 + + + + Open + + i=25412 + i=25413 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25411 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25411 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=25415 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25414 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=25417 + i=25418 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25416 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25416 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=25420 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25419 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=25422 + i=25423 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25421 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25421 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=25425 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25424 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + ReserveIds + + i=25427 + i=25428 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25426 + + + + + + i=297 + + + + TransportProfileUri + + i=12 + + -1 + + + + + + + i=297 + + + + NumReqWriterGroupIds + + i=5 + + -1 + + + + + + + i=297 + + + + NumReqDataSetWriterIds + + i=5 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25426 + + + + + + i=297 + + + + DefaultPublisherId + + i=24 + + -1 + + + + + + + i=297 + + + + WriterGroupIds + + i=5 + + 1 + + 0 + + + + + + + i=297 + + + + DataSetWriterIds + + i=5 + + 1 + + 0 + + + + + + + + + CloseAndUpdate + + i=25430 + i=25431 + i=78 + i=25403 + + + + InputArguments + + i=68 + i=78 + i=25429 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + RequireCompleteUpdate + + i=1 + + -1 + + + + + + + i=297 + + + + ConfigurationReferences + + i=25519 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25429 + + + + + + i=297 + + + + ChangesApplied + + i=1 + + -1 + + + + + + + i=297 + + + + ReferencesResults + + i=19 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationValues + + i=25520 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationObjects + + i=17 + + 1 + + 0 + + + + + + + + + Status + + i=15845 + i=14643 + i=78 + i=14416 + + + + State + + i=63 + i=78 + i=15844 + + + + Diagnostics + + i=18716 + i=18717 + i=18722 + i=18727 + i=18728 + i=18729 + i=18760 + i=19732 + i=80 + i=14416 + + + + DiagnosticsLevel + + i=63 + i=78 + i=18715 + + + + TotalInformation + + i=18718 + i=18719 + i=18720 + i=19725 + i=78 + i=18715 + + + + Active + + i=68 + i=78 + i=18717 + + + + Classification + + i=68 + i=78 + i=18717 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18717 + + + + TotalError + + i=18723 + i=18724 + i=18725 + i=19725 + i=78 + i=18715 + + + + Active + + i=68 + i=78 + i=18722 + + + + Classification + + i=68 + i=78 + i=18722 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18722 + + + + Reset + + i=78 + i=18715 + + + + SubError + + i=63 + i=78 + i=18715 + + + + Counters + + i=18730 + i=18735 + i=18740 + i=18745 + i=18750 + i=18755 + i=58 + i=78 + i=18715 + + + + StateError + + i=18731 + i=18732 + i=18733 + i=19725 + i=78 + i=18729 + + + + Active + + i=68 + i=78 + i=18730 + + + + Classification + + i=68 + i=78 + i=18730 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18730 + + + 0 + + + + StateOperationalByMethod + + i=18736 + i=18737 + i=18738 + i=19725 + i=78 + i=18729 + + + + Active + + i=68 + i=78 + i=18735 + + + + Classification + + i=68 + i=78 + i=18735 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18735 + + + 0 + + + + StateOperationalByParent + + i=18741 + i=18742 + i=18743 + i=19725 + i=78 + i=18729 + + + + Active + + i=68 + i=78 + i=18740 + + + + Classification + + i=68 + i=78 + i=18740 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18740 + + + 0 + + + + StateOperationalFromError + + i=18746 + i=18747 + i=18748 + i=19725 + i=78 + i=18729 + + + + Active + + i=68 + i=78 + i=18745 + + + + Classification + + i=68 + i=78 + i=18745 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18745 + + + 0 + + + + StatePausedByParent + + i=18751 + i=18752 + i=18753 + i=19725 + i=78 + i=18729 + + + + Active + + i=68 + i=78 + i=18750 + + + + Classification + + i=68 + i=78 + i=18750 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18750 + + + 0 + + + + StateDisabledByMethod + + i=18756 + i=18757 + i=18758 + i=19725 + i=78 + i=18729 + + + + Active + + i=68 + i=78 + i=18755 + + + + Classification + + i=68 + i=78 + i=18755 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18755 + + + 0 + + + + LiveValues + + i=18761 + i=18763 + i=18765 + i=18767 + i=58 + i=78 + i=18715 + + + + ConfiguredDataSetWriters + + i=18762 + i=63 + i=78 + i=18760 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18761 + + + 0 + + + + ConfiguredDataSetReaders + + i=18764 + i=63 + i=78 + i=18760 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18763 + + + 0 + + + + OperationalDataSetWriters + + i=18766 + i=63 + i=78 + i=18760 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18765 + + + 0 + + + + OperationalDataSetReaders + + i=18768 + i=63 + i=78 + i=18760 + + + + DiagnosticsLevel + + i=68 + i=78 + i=18767 + + + 0 + + + + PubSubCapablities + + i=23643 + i=23644 + i=23645 + i=23646 + i=23647 + i=23648 + i=23832 + i=80 + i=14416 + + + + MaxPubSubConnections + + i=68 + i=78 + i=23642 + + + + MaxWriterGroups + + i=68 + i=78 + i=23642 + + + + MaxReaderGroups + + i=68 + i=78 + i=23642 + + + + MaxDataSetWriters + + i=68 + i=78 + i=23642 + + + + MaxDataSetReaders + + i=68 + i=78 + i=23642 + + + + MaxFieldsPerDataSet + + i=68 + i=78 + i=23642 + + + + DataSetClasses + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.2 + + i=24009 + i=61 + i=80 + i=14416 + + + + <DataSetName> + + i=63 + i=11508 + i=23649 + + + + SupportedTransportProfiles + + i=68 + i=78 + i=14416 + + + + DefaultDatagramPublisherId + + i=68 + i=80 + i=14416 + + + + ConfigurationVersion + + i=68 + i=80 + i=14416 + + + + DefaultSecurityKeyServices + + i=68 + i=80 + i=14416 + + + + ConfigurationProperties + + i=68 + i=80 + i=14416 + + + + PublishSubscribe + PubSub Model SKS + https://reference.opcfoundation.org/v105/Core/docs/Part14/8.2 + + i=15215 + i=15440 + i=15443 + i=25440 + i=17364 + i=17366 + i=17369 + i=17371 + i=23658 + i=25451 + i=17405 + i=17409 + i=23678 + i=23685 + i=17481 + i=25480 + i=25481 + i=32403 + i=32404 + i=2253 + i=14416 + + + + GetSecurityKeys + + i=15216 + i=15217 + i=14443 + + + + InputArguments + + i=68 + i=15215 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + StartingTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=15215 + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + FirstTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + Keys + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + TimeToNextKey + + i=290 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + + + GetSecurityGroup + + i=15441 + i=15442 + i=14443 + + + + InputArguments + + i=68 + i=15440 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=15440 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + SecurityGroups + + i=15444 + i=15447 + i=15452 + i=14443 + + + + AddSecurityGroup + + i=15445 + i=15446 + i=15443 + + + + InputArguments + + i=68 + i=15444 + + + + + + i=297 + + + + SecurityGroupName + + i=12 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + MaxFutureKeyCount + + i=7 + + -1 + + + + + + + i=297 + + + + MaxPastKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=15444 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + RemoveSecurityGroup + + i=15448 + i=15443 + + + + InputArguments + + i=68 + i=15447 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + KeyPushTargets + + i=25441 + i=25444 + i=25346 + i=14443 + + + + AddPushTarget + + i=25442 + i=25443 + i=25440 + + + + InputArguments + + i=68 + i=25441 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrl + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + UserTokenType + + i=304 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=5 + + -1 + + + + + + + i=297 + + + + RetryInterval + + i=290 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=25441 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + RemovePushTarget + + i=25445 + i=25440 + + + + InputArguments + + i=68 + i=25444 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + SetSecurityKeys + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.3 + + i=17365 + i=14443 + + + + InputArguments + + i=68 + i=17364 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + CurrentTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + CurrentKey + + i=15 + + -1 + + + + + + + i=297 + + + + FutureKeys + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + TimeToNextKey + + i=290 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + + + AddConnection + + i=17367 + i=17368 + i=14443 + + + + InputArguments + + i=68 + i=17366 + + + + + + i=297 + + + + Configuration + + i=15617 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=17366 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + RemoveConnection + + i=17370 + i=14443 + + + + InputArguments + + i=68 + i=17369 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + PublishedDataSets + + i=14477 + i=14443 + + + + SubscribedDataSets + + i=23795 + i=14443 + + + + PubSubConfiguration + + i=25452 + i=25453 + i=25454 + i=25455 + i=25459 + i=25462 + i=25464 + i=25467 + i=25469 + i=25472 + i=25474 + i=25477 + i=25482 + i=14443 + + + + Size + + i=68 + i=25451 + + + + Writable + + i=68 + i=25451 + + + + UserWritable + + i=68 + i=25451 + + + + OpenCount + + i=68 + i=25451 + + + + Open + + i=25460 + i=25461 + i=25451 + + + + InputArguments + + i=68 + i=25459 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=25459 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=25463 + i=25451 + + + + InputArguments + + i=68 + i=25462 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=25465 + i=25466 + i=25451 + + + + InputArguments + + i=68 + i=25464 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=25464 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=25468 + i=25451 + + + + InputArguments + + i=68 + i=25467 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=25470 + i=25471 + i=25451 + + + + InputArguments + + i=68 + i=25469 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=25469 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=25473 + i=25451 + + + + InputArguments + + i=68 + i=25472 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + ReserveIds + + i=25475 + i=25476 + i=25451 + + + + InputArguments + + i=68 + i=25474 + + + + + + i=297 + + + + TransportProfileUri + + i=12 + + -1 + + + + + + + i=297 + + + + NumReqWriterGroupIds + + i=5 + + -1 + + + + + + + i=297 + + + + NumReqDataSetWriterIds + + i=5 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=25474 + + + + + + i=297 + + + + DefaultPublisherId + + i=24 + + -1 + + + + + + + i=297 + + + + WriterGroupIds + + i=5 + + 1 + + 0 + + + + + + + i=297 + + + + DataSetWriterIds + + i=5 + + 1 + + 0 + + + + + + + + + CloseAndUpdate + + i=25478 + i=25479 + i=25451 + + + + InputArguments + + i=68 + i=25477 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + RequireCompleteUpdate + + i=1 + + -1 + + + + + + + i=297 + + + + ConfigurationReferences + + i=25519 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=25477 + + + + + + i=297 + + + + ChangesApplied + + i=1 + + -1 + + + + + + + i=297 + + + + ReferencesResults + + i=19 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationValues + + i=25520 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationObjects + + i=17 + + 1 + + 0 + + + + + + + + + Status + https://reference.opcfoundation.org/v104/Core/docs/Part14/9.1.10/#9.1.10.4 + + i=17406 + i=14643 + i=14443 + + + + State + + i=63 + i=17405 + + + + Diagnostics + + i=17410 + i=17411 + i=17416 + i=17421 + i=17422 + i=17423 + i=17457 + i=19732 + i=14443 + + + + DiagnosticsLevel + + i=63 + i=17409 + + + + TotalInformation + + i=17412 + i=17413 + i=17414 + i=19725 + i=17409 + + + + Active + + i=68 + i=17411 + + + + Classification + + i=68 + i=17411 + + + + DiagnosticsLevel + + i=68 + i=17411 + + + + TotalError + + i=17417 + i=17418 + i=17419 + i=19725 + i=17409 + + + + Active + + i=68 + i=17416 + + + + Classification + + i=68 + i=17416 + + + + DiagnosticsLevel + + i=68 + i=17416 + + + + Reset + Base Info TemporaryFileTransferType Base + https://reference.opcfoundation.org/v105/Core/docs/Part20/1 + + i=17409 + + + + SubError + + i=63 + i=17409 + + + + Counters + + i=17424 + i=17431 + i=17436 + i=17441 + i=17446 + i=17451 + i=58 + i=17409 + + + + StateError + + i=17425 + i=17426 + i=17429 + i=19725 + i=17423 + + + + Active + + i=68 + i=17424 + + + + Classification + + i=68 + i=17424 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=17424 + + + 0 + + + + StateOperationalByMethod + + i=17432 + i=17433 + i=17434 + i=19725 + i=17423 + + + + Active + + i=68 + i=17431 + + + + Classification + + i=68 + i=17431 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=17431 + + + 0 + + + + StateOperationalByParent + + i=17437 + i=17438 + i=17439 + i=19725 + i=17423 + + + + Active + + i=68 + i=17436 + + + + Classification + + i=68 + i=17436 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=17436 + + + 0 + + + + StateOperationalFromError + + i=17442 + i=17443 + i=17444 + i=19725 + i=17423 + + + + Active + + i=68 + i=17441 + + + + Classification + + i=68 + i=17441 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=17441 + + + 0 + + + + StatePausedByParent + + i=17447 + i=17448 + i=17449 + i=19725 + i=17423 + + + + Active + + i=68 + i=17446 + + + + Classification + + i=68 + i=17446 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=17446 + + + 0 + + + + StateDisabledByMethod + + i=17452 + i=17453 + i=17454 + i=19725 + i=17423 + + + + Active + + i=68 + i=17451 + + + + Classification + + i=68 + i=17451 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=17451 + + + 0 + + + + LiveValues + + i=17458 + i=17460 + i=17462 + i=17464 + i=58 + i=17409 + + + + ConfiguredDataSetWriters + + i=17459 + i=63 + i=17457 + + + + DiagnosticsLevel + + i=68 + i=17458 + + + 0 + + + + ConfiguredDataSetReaders + + i=17461 + i=63 + i=17457 + + + + DiagnosticsLevel + + i=68 + i=17460 + + + 0 + + + + OperationalDataSetWriters + + i=17463 + i=63 + i=17457 + + + + DiagnosticsLevel + + i=68 + i=17462 + + + 0 + + + + OperationalDataSetReaders + + i=17466 + i=63 + i=17457 + + + + DiagnosticsLevel + + i=68 + i=17464 + + + 0 + + + + PubSubCapablities + + i=23679 + i=23680 + i=23681 + i=23682 + i=23683 + i=23684 + i=23832 + i=14443 + + + + MaxPubSubConnections + + i=68 + i=23678 + + + + MaxWriterGroups + + i=68 + i=23678 + + + + MaxReaderGroups + + i=68 + i=23678 + + + + MaxDataSetWriters + + i=68 + i=23678 + + + + MaxDataSetReaders + + i=68 + i=23678 + + + + MaxFieldsPerDataSet + + i=68 + i=23678 + + + + DataSetClasses + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.2 + + i=61 + i=14443 + + + + SupportedTransportProfiles + + i=68 + i=14443 + + + + DefaultDatagramPublisherId + + i=68 + i=14443 + + + + ConfigurationVersion + + i=68 + i=14443 + + + + DefaultSecurityKeyServices + + i=68 + i=14443 + + + + ConfigurationProperties + + i=68 + i=14443 + + + + DataSetClasses + + i=32406 + i=32409 + i=32412 + i=32424 + i=32508 + i=32510 + i=32513 + i=32515 + i=32535 + i=32546 + i=32575 + i=32579 + i=32633 + i=32644 + i=32646 + i=32647 + i=32648 + i=2253 + i=14416 + + + + GetSecurityKeys + + i=32407 + i=32408 + i=32405 + + + + InputArguments + + i=68 + i=32406 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + StartingTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32406 + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + FirstTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + Keys + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + TimeToNextKey + + i=290 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + + + GetSecurityGroup + + i=32410 + i=32411 + i=32405 + + + + InputArguments + + i=68 + i=32409 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32409 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + SecurityGroups + + i=32413 + i=32416 + i=15452 + i=32405 + + + + AddSecurityGroup + + i=32414 + i=32415 + i=32412 + + + + InputArguments + + i=68 + i=32413 + + + + + + i=297 + + + + SecurityGroupName + + i=12 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + MaxFutureKeyCount + + i=7 + + -1 + + + + + + + i=297 + + + + MaxPastKeyCount + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32413 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + RemoveSecurityGroup + + i=32417 + i=32412 + + + + InputArguments + + i=68 + i=32416 + + + + + + i=297 + + + + SecurityGroupNodeId + + i=17 + + -1 + + + + + + + + + KeyPushTargets + + i=32425 + i=32428 + i=25346 + i=32405 + + + + AddPushTarget + + i=32426 + i=32427 + i=32424 + + + + InputArguments + + i=68 + i=32425 + + + + + + i=297 + + + + ApplicationUri + + i=12 + + -1 + + + + + + + i=297 + + + + EndpointUrl + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + UserTokenType + + i=304 + + -1 + + + + + + + i=297 + + + + RequestedKeyCount + + i=5 + + -1 + + + + + + + i=297 + + + + RetryInterval + + i=290 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32425 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + RemovePushTarget + + i=32429 + i=32424 + + + + InputArguments + + i=68 + i=32428 + + + + + + i=297 + + + + PushTargetId + + i=17 + + -1 + + + + + + + + + SetSecurityKeys + + i=32509 + i=32405 + + + + InputArguments + + i=68 + i=32508 + + + + + + i=297 + + + + SecurityGroupId + + i=12 + + -1 + + + + + + + i=297 + + + + SecurityPolicyUri + + i=12 + + -1 + + + + + + + i=297 + + + + CurrentTokenId + + i=288 + + -1 + + + + + + + i=297 + + + + CurrentKey + + i=15 + + -1 + + + + + + + i=297 + + + + FutureKeys + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + TimeToNextKey + + i=290 + + -1 + + + + + + + i=297 + + + + KeyLifetime + + i=290 + + -1 + + + + + + + + + AddConnection + + i=32511 + i=32512 + i=32405 + + + + InputArguments + + i=68 + i=32510 + + + + + + i=297 + + + + Configuration + + i=15617 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32510 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + RemoveConnection + + i=32514 + i=32405 + + + + InputArguments + + i=68 + i=32513 + + + + + + i=297 + + + + ConnectionId + + i=17 + + -1 + + + + + + + + + PublishedDataSets + + i=14477 + i=32405 + + + + SubscribedDataSets + + i=23795 + i=32405 + + + + PubSubConfiguration + + i=32547 + i=32548 + i=32549 + i=32550 + i=32554 + i=32557 + i=32559 + i=32562 + i=32564 + i=32567 + i=32569 + i=32572 + i=25482 + i=32405 + + + + Size + + i=68 + i=32546 + + + + Writable + + i=68 + i=32546 + + + + UserWritable + + i=68 + i=32546 + + + + OpenCount + + i=68 + i=32546 + + + + Open + + i=32555 + i=32556 + i=32546 + + + + InputArguments + + i=68 + i=32554 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32554 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=32558 + i=32546 + + + + InputArguments + + i=68 + i=32557 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=32560 + i=32561 + i=32546 + + + + InputArguments + + i=68 + i=32559 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32559 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=32563 + i=32546 + + + + InputArguments + + i=68 + i=32562 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=32565 + i=32566 + i=32546 + + + + InputArguments + + i=68 + i=32564 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32564 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=32568 + i=32546 + + + + InputArguments + + i=68 + i=32567 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + ReserveIds + + i=32570 + i=32571 + i=32546 + + + + InputArguments + + i=68 + i=32569 + + + + + + i=297 + + + + TransportProfileUri + + i=12 + + -1 + + + + + + + i=297 + + + + NumReqWriterGroupIds + + i=5 + + -1 + + + + + + + i=297 + + + + NumReqDataSetWriterIds + + i=5 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=32569 + + + + + + i=297 + + + + DefaultPublisherId + + i=24 + + -1 + + + + + + + i=297 + + + + WriterGroupIds + + i=5 + + 1 + + 0 + + + + + + + i=297 + + + + DataSetWriterIds + + i=5 + + 1 + + 0 + + + + + + + + + CloseAndUpdate + + i=32573 + i=32574 + i=32546 + + + + InputArguments + + i=68 + i=32572 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + RequireCompleteUpdate + + i=1 + + -1 + + + + + + + i=297 + + + + ConfigurationReferences + + i=25519 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=32572 + + + + + + i=297 + + + + ChangesApplied + + i=1 + + -1 + + + + + + + i=297 + + + + ReferencesResults + + i=19 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationValues + + i=25520 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationObjects + + i=17 + + 1 + + 0 + + + + + + + + + Status + + i=32576 + i=14643 + i=32405 + + + + State + + i=63 + i=32575 + + + + Diagnostics + + i=32580 + i=32581 + i=32586 + i=32591 + i=32592 + i=32593 + i=32624 + i=19732 + i=32405 + + + + DiagnosticsLevel + + i=63 + i=32579 + + + + TotalInformation + + i=32582 + i=32583 + i=32584 + i=19725 + i=32579 + + + + Active + + i=68 + i=32581 + + + + Classification + + i=68 + i=32581 + + + + DiagnosticsLevel + + i=68 + i=32581 + + + + TotalError + + i=32587 + i=32588 + i=32589 + i=19725 + i=32579 + + + + Active + + i=68 + i=32586 + + + + Classification + + i=68 + i=32586 + + + + DiagnosticsLevel + + i=68 + i=32586 + + + + Reset + + i=32579 + + + + SubError + + i=63 + i=32579 + + + + Counters + + i=32594 + i=32599 + i=32604 + i=32609 + i=32614 + i=32619 + i=58 + i=32579 + + + + StateError + + i=32595 + i=32596 + i=32597 + i=19725 + i=32593 + + + + Active + + i=68 + i=32594 + + + + Classification + + i=68 + i=32594 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=32594 + + + 0 + + + + StateOperationalByMethod + + i=32600 + i=32601 + i=32602 + i=19725 + i=32593 + + + + Active + + i=68 + i=32599 + + + + Classification + + i=68 + i=32599 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=32599 + + + 0 + + + + StateOperationalByParent + + i=32605 + i=32606 + i=32607 + i=19725 + i=32593 + + + + Active + + i=68 + i=32604 + + + + Classification + + i=68 + i=32604 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=32604 + + + 0 + + + + StateOperationalFromError + + i=32610 + i=32611 + i=32612 + i=19725 + i=32593 + + + + Active + + i=68 + i=32609 + + + + Classification + + i=68 + i=32609 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=32609 + + + 0 + + + + StatePausedByParent + + i=32615 + i=32616 + i=32617 + i=19725 + i=32593 + + + + Active + + i=68 + i=32614 + + + + Classification + + i=68 + i=32614 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=32614 + + + 0 + + + + StateDisabledByMethod + + i=32620 + i=32621 + i=32622 + i=19725 + i=32593 + + + + Active + + i=68 + i=32619 + + + + Classification + + i=68 + i=32619 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=32619 + + + 0 + + + + LiveValues + + i=32625 + i=32627 + i=32629 + i=32631 + i=58 + i=32579 + + + + ConfiguredDataSetWriters + + i=32626 + i=63 + i=32624 + + + + DiagnosticsLevel + + i=68 + i=32625 + + + 0 + + + + ConfiguredDataSetReaders + + i=32628 + i=63 + i=32624 + + + + DiagnosticsLevel + + i=68 + i=32627 + + + 0 + + + + OperationalDataSetWriters + + i=32630 + i=63 + i=32624 + + + + DiagnosticsLevel + + i=68 + i=32629 + + + 0 + + + + OperationalDataSetReaders + + i=32632 + i=63 + i=32624 + + + + DiagnosticsLevel + + i=68 + i=32631 + + + 0 + + + + PubSubCapablities + + i=32634 + i=32635 + i=32636 + i=32637 + i=32638 + i=32656 + i=23832 + i=32405 + + + + MaxPubSubConnections + + i=68 + i=32633 + + + + MaxWriterGroups + + i=68 + i=32633 + + + + MaxReaderGroups + + i=68 + i=32633 + + + + MaxDataSetWriters + + i=68 + i=32633 + + + + MaxDataSetReaders + + i=68 + i=32633 + + + + MaxFieldsPerDataSet + + i=68 + i=32633 + + + + DataSetClasses + + i=61 + i=32405 + + + + SupportedTransportProfiles + + i=68 + i=32405 + + + + DefaultDatagramPublisherId + + i=68 + i=32405 + + + + ConfigurationVersion + + i=68 + i=32405 + + + + HasPubSubConnection + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.6 + + i=47 + + PubSubConnectionOf + + + PubSubConfigurationType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.7.1 + + i=25505 + i=25508 + i=11575 + + + + ReserveIds + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.7.5 + + i=25506 + i=25507 + i=78 + i=25482 + + + + InputArguments + + i=68 + i=78 + i=25505 + + + + + + i=297 + + + + TransportProfileUri + + i=12 + + -1 + + + + + + + i=297 + + + + NumReqWriterGroupIds + + i=5 + + -1 + + + + + + + i=297 + + + + NumReqDataSetWriterIds + + i=5 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25505 + + + + + + i=297 + + + + DefaultPublisherId + + i=24 + + -1 + + + + + + + i=297 + + + + WriterGroupIds + + i=5 + + 1 + + 0 + + + + + + + i=297 + + + + DataSetWriterIds + + i=5 + + 1 + + 0 + + + + + + + + + CloseAndUpdate + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.7.6 + + i=25509 + i=25510 + i=78 + i=25482 + + + + InputArguments + + i=68 + i=78 + i=25508 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + RequireCompleteUpdate + + i=1 + + -1 + + + + + + + i=297 + + + + ConfigurationReferences + + i=25519 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=25508 + + + + + + i=297 + + + + ChangesApplied + + i=1 + + -1 + + + + + + + i=297 + + + + ReferencesResults + + i=19 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationValues + + i=25520 + + 1 + + 0 + + + + + + + i=297 + + + + ConfigurationObjects + + i=17 + + 1 + + 0 + + + + + + + + + PubSubConfigurationRefMask + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.7.2 + + i=25518 + i=7 + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=25517 + + + + + ElementAdd + + + ElementMatch + + + ElementModify + + + ElementRemove + + + ReferenceWriter + + + ReferenceReader + + + ReferenceWriterGroup + + + ReferenceReaderGroup + + + ReferenceConnection + + + ReferencePubDataset + + + ReferenceSubDataset + + + ReferenceSecurityGroup + + + ReferencePushTarget + + + + + + PubSubConfigurationRefDataType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.7.3 + + i=22 + + + + + + + + + + PubSubConfigurationValueDataType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.3/#9.1.3.7.4 + + i=22 + + + + + + + + + PublishedDataSetType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.2.1 + + i=15222 + i=14519 + i=15229 + i=16759 + i=25521 + i=15481 + i=58 + + + + <DataSetWriterName> + + i=16720 + i=16721 + i=17482 + i=15223 + i=15298 + i=11508 + i=14509 + + + + DataSetWriterId + + i=68 + i=78 + i=15222 + + + + DataSetFieldContentMask + + i=68 + i=78 + i=15222 + + + + DataSetWriterProperties + + i=68 + i=78 + i=15222 + + + + Status + + i=15224 + i=14643 + i=78 + i=15222 + + + + State + + i=63 + i=78 + i=15223 + + + + ConfigurationVersion + + i=68 + i=78 + i=14509 + + + + DataSetMetaData + + i=68 + i=78 + i=14509 + + + + DataSetClassId + + i=68 + i=80 + i=14509 + + + + CyclicDataSet + + i=68 + i=80 + i=14509 + + + + ExtensionFields + + i=15482 + i=15485 + i=15489 + i=80 + i=14509 + + + + AddExtensionField + + i=15483 + i=15484 + i=78 + i=15481 + + + + InputArguments + + i=68 + i=78 + i=15482 + + + + + + i=297 + + + + FieldName + + i=20 + + -1 + + + + + + + i=297 + + + + FieldValue + + i=24 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15482 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + RemoveExtensionField + + i=15486 + i=78 + i=15481 + + + + InputArguments + + i=68 + i=78 + i=15485 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + ExtensionFieldsType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.2.2 + + i=15490 + i=15491 + i=15494 + i=58 + + + + <ExtensionFieldName> + + i=68 + i=11508 + i=15489 + + + + AddExtensionField + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.2.3 + + i=15492 + i=15493 + i=78 + i=15489 + + + + InputArguments + + i=68 + i=78 + i=15491 + + + + + + i=297 + + + + FieldName + + i=20 + + -1 + + + + + + + i=297 + + + + FieldValue + + i=24 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15491 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + RemoveExtensionField + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.2.4 + + i=15495 + i=78 + i=15489 + + + + InputArguments + + i=68 + i=78 + i=15494 + + + + + + i=297 + + + + FieldId + + i=17 + + -1 + + + + + + + + + DataSetToWriter + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.2.5 + + i=33 + + WriterToDataSet + + + PublishedDataItemsType + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.3.1 + + i=14548 + i=14555 + i=14558 + i=14509 + + + + PublishedData + + i=68 + i=78 + i=14534 + + + + AddVariables + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.3.2 + + i=14556 + i=14557 + i=80 + i=14534 + + + + InputArguments + + i=68 + i=78 + i=14555 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + FieldNameAliases + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + PromotedFields + + i=1 + + 1 + + 0 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=14555 + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + RemoveVariables + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.3.3 + + i=14559 + i=14560 + i=80 + i=14534 + + + + InputArguments + + i=68 + i=78 + i=14558 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + VariablesToRemove + + i=7 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=14558 + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + RemoveResults + + i=19 + + 1 + + 0 + + + + + + + + + PublishedEventsType + PubSub Model PublishedDataSet Events + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.4.1 + + i=14586 + i=14587 + i=14588 + i=15052 + i=14509 + + + + EventNotifier + + i=68 + i=78 + i=14572 + + + + SelectedFields + + i=68 + i=78 + i=14572 + + + + Filter + + i=68 + i=78 + i=14572 + + + + ModifyFieldSelection + PubSub Model PublishedDataSet Events + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.4.2 + + i=15053 + i=15517 + i=80 + i=14572 + + + + InputArguments + + i=68 + i=78 + i=15052 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + FieldNameAliases + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + PromotedFields + + i=1 + + 1 + + 0 + + + + + + + i=297 + + + + SelectedFields + + i=601 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15052 + + + + + + i=297 + + + + NewConfigurationVersion + + i=14593 + + -1 + + + + + + + + + DataSetFolderType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.1 + + i=14478 + i=14487 + i=14493 + i=14496 + i=16935 + i=16960 + i=14499 + i=16994 + i=16997 + i=61 + + + + <DataSetFolderName> + + i=14479 + i=14482 + i=16842 + i=16881 + i=14485 + i=16884 + i=16923 + i=14477 + i=11508 + i=14477 + + + + AddPublishedDataItems + + i=14480 + i=14481 + i=80 + i=14478 + + + + InputArguments + + i=68 + i=78 + i=14479 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + FieldNameAliases + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + FieldFlags + + i=15904 + + 1 + + 0 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=14479 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + AddPublishedEvents + + i=14483 + i=14484 + i=80 + i=14478 + + + + InputArguments + + i=68 + i=78 + i=14482 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + EventNotifier + + i=17 + + -1 + + + + + + + i=297 + + + + FieldNameAliases + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + FieldFlags + + i=15904 + + 1 + + 0 + + + + + + + i=297 + + + + SelectedFields + + i=601 + + 1 + + 0 + + + + + + + i=297 + + + + Filter + + i=586 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=14482 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + AddPublishedDataItemsTemplate + + i=16843 + i=16853 + i=80 + i=14478 + + + + InputArguments + + i=68 + i=78 + i=16842 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16842 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + AddPublishedEventsTemplate + + i=16882 + i=16883 + i=80 + i=14478 + + + + InputArguments + + i=68 + i=78 + i=16881 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + EventNotifier + + i=17 + + -1 + + + + + + + i=297 + + + + SelectedFields + + i=601 + + 1 + + 0 + + + + + + + i=297 + + + + Filter + + i=586 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16881 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + RemovePublishedDataSet + + i=14486 + i=80 + i=14478 + + + + InputArguments + + i=68 + i=78 + i=14485 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + AddDataSetFolder + + i=16894 + i=16922 + i=80 + i=14478 + + + + InputArguments + + i=68 + i=78 + i=16884 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16884 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + RemoveDataSetFolder + + i=16924 + i=80 + i=14478 + + + + InputArguments + + i=68 + i=78 + i=16923 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + <PublishedDataSetName> + + i=14489 + i=15221 + i=14509 + i=11508 + i=14477 + + + + ConfigurationVersion + + i=68 + i=78 + i=14487 + + + + DataSetMetaData + + i=68 + i=78 + i=14487 + + + + AddPublishedDataItems + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.2 + + i=14494 + i=14495 + i=80 + i=14477 + + + + InputArguments + + i=68 + i=78 + i=14493 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + FieldNameAliases + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + FieldFlags + + i=15904 + + 1 + + 0 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=14493 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + AddPublishedEvents + PubSub Model PublishedDataSet Events + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.3 + + i=14497 + i=14498 + i=80 + i=14477 + + + + InputArguments + + i=68 + i=78 + i=14496 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + EventNotifier + + i=17 + + -1 + + + + + + + i=297 + + + + FieldNameAliases + + i=12 + + 1 + + 0 + + + + + + + i=297 + + + + FieldFlags + + i=15904 + + 1 + + 0 + + + + + + + i=297 + + + + SelectedFields + + i=601 + + 1 + + 0 + + + + + + + i=297 + + + + Filter + + i=586 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=14496 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + AddPublishedDataItemsTemplate + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.4 + + i=16958 + i=16959 + i=80 + i=14477 + + + + InputArguments + + i=68 + i=78 + i=16935 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + VariablesToAdd + + i=14273 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16935 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + AddPublishedEventsTemplate + PubSub Model PublishedDataSet Events + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.5 + + i=16961 + i=16971 + i=80 + i=14477 + + + + InputArguments + + i=68 + i=78 + i=16960 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + i=297 + + + + DataSetMetaData + + i=14523 + + -1 + + + + + + + i=297 + + + + EventNotifier + + i=17 + + -1 + + + + + + + i=297 + + + + SelectedFields + + i=601 + + 1 + + 0 + + + + + + + i=297 + + + + Filter + + i=586 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16960 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + RemovePublishedDataSet + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.6 + + i=14500 + i=80 + i=14477 + + + + InputArguments + + i=68 + i=78 + i=14499 + + + + + + i=297 + + + + DataSetNodeId + + i=17 + + -1 + + + + + + + + + AddDataSetFolder + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.7 + + i=16995 + i=16996 + i=80 + i=14477 + + + + InputArguments + + i=68 + i=78 + i=16994 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=16994 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + RemoveDataSetFolder + PubSub Model PublishedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.4/#9.1.4.5.8 + + i=17007 + i=80 + i=14477 + + + + InputArguments + + i=68 + i=78 + i=16997 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + PubSubConnectionType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.2 + + i=14595 + i=17306 + i=17485 + i=14221 + i=17203 + i=17310 + i=17325 + i=14600 + i=19241 + i=17427 + i=17465 + i=14225 + i=58 + + + + PublisherId + + i=68 + i=78 + i=14209 + + + + TransportProfileUri + + i=17710 + i=16309 + i=78 + i=14209 + + + + Selections + + i=68 + i=78 + i=17306 + + + + ConnectionProperties + + i=68 + i=78 + i=14209 + + + + Address + + i=17202 + i=21145 + i=78 + i=14209 + + + + NetworkInterface + + i=17576 + i=16309 + i=78 + i=14221 + + + + Selections + + i=68 + i=78 + i=17202 + + + + TransportSettings + + i=17721 + i=80 + i=14209 + + + + <WriterGroupName> + + i=17311 + i=17204 + i=17486 + i=17314 + i=17214 + i=17318 + i=17319 + i=17321 + i=17322 + i=17558 + i=17725 + i=11508 + i=14209 + + + + SecurityMode + + i=68 + i=78 + i=17310 + + + + MaxNetworkMessageSize + + i=68 + i=78 + i=17310 + + + + GroupProperties + + i=68 + i=78 + i=17310 + + + + Status + + i=17315 + i=14643 + i=78 + i=17310 + + + + State + + i=63 + i=78 + i=17314 + + + + WriterGroupId + + i=68 + i=78 + i=17310 + + + + PublishingInterval + + i=68 + i=78 + i=17310 + + + + KeepAliveTime + + i=68 + i=78 + i=17310 + + + + Priority + + i=68 + i=78 + i=17310 + + + + LocaleIds + + i=68 + i=78 + i=17310 + + + + HeaderLayoutUri + + i=68 + i=78 + i=17310 + + + + <ReaderGroupName> + + i=17326 + i=17302 + i=17487 + i=17329 + i=17999 + i=11508 + i=14209 + + + + SecurityMode + + i=68 + i=78 + i=17325 + + + + MaxNetworkMessageSize + + i=68 + i=78 + i=17325 + + + + GroupProperties + + i=68 + i=78 + i=17325 + + + + Status + + i=17330 + i=14643 + i=78 + i=17325 + + + + State + + i=63 + i=78 + i=17329 + + + + Status + + i=14601 + i=14643 + i=78 + i=14209 + + + + State + + i=63 + i=78 + i=14600 + + + + Diagnostics + + i=19242 + i=19243 + i=19248 + i=19253 + i=19254 + i=19255 + i=19286 + i=19786 + i=80 + i=14209 + + + + DiagnosticsLevel + + i=63 + i=78 + i=19241 + + + + TotalInformation + + i=19244 + i=19245 + i=19246 + i=19725 + i=78 + i=19241 + + + + Active + + i=68 + i=78 + i=19243 + + + + Classification + + i=68 + i=78 + i=19243 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19243 + + + + TotalError + + i=19249 + i=19250 + i=19251 + i=19725 + i=78 + i=19241 + + + + Active + + i=68 + i=78 + i=19248 + + + + Classification + + i=68 + i=78 + i=19248 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19248 + + + + Reset + + i=78 + i=19241 + + + + SubError + + i=63 + i=78 + i=19241 + + + + Counters + + i=19256 + i=19261 + i=19266 + i=19271 + i=19276 + i=19281 + i=58 + i=78 + i=19241 + + + + StateError + + i=19257 + i=19258 + i=19259 + i=19725 + i=78 + i=19255 + + + + Active + + i=68 + i=78 + i=19256 + + + + Classification + + i=68 + i=78 + i=19256 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19256 + + + 0 + + + + StateOperationalByMethod + + i=19262 + i=19263 + i=19264 + i=19725 + i=78 + i=19255 + + + + Active + + i=68 + i=78 + i=19261 + + + + Classification + + i=68 + i=78 + i=19261 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19261 + + + 0 + + + + StateOperationalByParent + + i=19267 + i=19268 + i=19269 + i=19725 + i=78 + i=19255 + + + + Active + + i=68 + i=78 + i=19266 + + + + Classification + + i=68 + i=78 + i=19266 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19266 + + + 0 + + + + StateOperationalFromError + + i=19272 + i=19273 + i=19274 + i=19725 + i=78 + i=19255 + + + + Active + + i=68 + i=78 + i=19271 + + + + Classification + + i=68 + i=78 + i=19271 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19271 + + + 0 + + + + StatePausedByParent + + i=19277 + i=19278 + i=19279 + i=19725 + i=78 + i=19255 + + + + Active + + i=68 + i=78 + i=19276 + + + + Classification + + i=68 + i=78 + i=19276 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19276 + + + 0 + + + + StateDisabledByMethod + + i=19282 + i=19283 + i=19284 + i=19725 + i=78 + i=19255 + + + + Active + + i=68 + i=78 + i=19281 + + + + Classification + + i=68 + i=78 + i=19281 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19281 + + + 0 + + + + LiveValues + + i=19287 + i=58 + i=78 + i=19241 + + + + ResolvedAddress + + i=19288 + i=63 + i=78 + i=19286 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19287 + + + 0 + + + + AddWriterGroup + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.3 + + i=17428 + i=17456 + i=80 + i=14209 + + + + InputArguments + + i=68 + i=78 + i=17427 + + + + + + i=297 + + + + Configuration + + i=15480 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=17427 + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + AddReaderGroup + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.4 + + i=17507 + i=17508 + i=80 + i=14209 + + + + InputArguments + + i=68 + i=78 + i=17465 + + + + + + i=297 + + + + Configuration + + i=15520 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=17465 + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + RemoveGroup + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.5 + + i=14226 + i=80 + i=14209 + + + + InputArguments + + i=68 + i=78 + i=14225 + + + + + + i=297 + + + + GroupId + + i=17 + + -1 + + + + + + + + + ConnectionTransportType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.8 + + i=58 + + + + PubSubGroupType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.2 + + i=15926 + i=15927 + i=15928 + i=17724 + i=17488 + i=15265 + i=58 + + + + SecurityMode + + i=68 + i=78 + i=14232 + + + + SecurityGroupId + + i=68 + i=80 + i=14232 + + + + SecurityKeyServices + + i=68 + i=80 + i=14232 + + + + MaxNetworkMessageSize + + i=68 + i=78 + i=14232 + + + + GroupProperties + + i=68 + i=78 + i=14232 + + + + Status + + i=15266 + i=14643 + i=78 + i=14232 + + + + State + + i=63 + i=78 + i=15265 + + + + WriterGroupType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.3 + + i=17736 + i=17737 + i=17738 + i=17739 + i=17740 + i=17559 + i=17741 + i=17742 + i=17743 + i=17812 + i=17969 + i=17992 + i=14232 + + + + WriterGroupId + + i=68 + i=78 + i=17725 + + + + PublishingInterval + + i=68 + i=78 + i=17725 + + + + KeepAliveTime + + i=68 + i=78 + i=17725 + + + + Priority + + i=68 + i=78 + i=17725 + + + + LocaleIds + + i=68 + i=78 + i=17725 + + + + HeaderLayoutUri + + i=68 + i=78 + i=17725 + + + + TransportSettings + + i=17997 + i=80 + i=17725 + + + + MessageSettings + + i=17998 + i=80 + i=17725 + + + + <DataSetWriterName> + + i=17744 + i=17745 + i=17490 + i=17749 + i=15298 + i=11508 + i=17725 + + + + DataSetWriterId + + i=68 + i=78 + i=17743 + + + + DataSetFieldContentMask + + i=68 + i=78 + i=17743 + + + + DataSetWriterProperties + + i=68 + i=78 + i=17743 + + + + Status + + i=17750 + i=14643 + i=78 + i=17743 + + + + State + + i=63 + i=78 + i=17749 + + + + Diagnostics + + i=17813 + i=17814 + i=17819 + i=17824 + i=17825 + i=17826 + i=17858 + i=19834 + i=80 + i=17725 + + + + DiagnosticsLevel + + i=63 + i=78 + i=17812 + + + + TotalInformation + + i=17815 + i=17816 + i=17817 + i=19725 + i=78 + i=17812 + + + + Active + + i=68 + i=78 + i=17814 + + + + Classification + + i=68 + i=78 + i=17814 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17814 + + + + TotalError + + i=17820 + i=17821 + i=17822 + i=19725 + i=78 + i=17812 + + + + Active + + i=68 + i=78 + i=17819 + + + + Classification + + i=68 + i=78 + i=17819 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17819 + + + + Reset + + i=78 + i=17812 + + + + SubError + + i=63 + i=78 + i=17812 + + + + Counters + + i=17827 + i=17832 + i=17837 + i=17842 + i=17847 + i=17853 + i=17859 + i=17874 + i=17900 + i=58 + i=78 + i=17812 + + + + StateError + + i=17828 + i=17829 + i=17830 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17827 + + + + Classification + + i=68 + i=78 + i=17827 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17827 + + + 0 + + + + StateOperationalByMethod + + i=17833 + i=17834 + i=17835 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17832 + + + + Classification + + i=68 + i=78 + i=17832 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17832 + + + 0 + + + + StateOperationalByParent + + i=17838 + i=17839 + i=17840 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17837 + + + + Classification + + i=68 + i=78 + i=17837 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17837 + + + 0 + + + + StateOperationalFromError + + i=17843 + i=17844 + i=17845 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17842 + + + + Classification + + i=68 + i=78 + i=17842 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17842 + + + 0 + + + + StatePausedByParent + + i=17848 + i=17849 + i=17850 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17847 + + + + Classification + + i=68 + i=78 + i=17847 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17847 + + + 0 + + + + StateDisabledByMethod + + i=17854 + i=17855 + i=17856 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17853 + + + + Classification + + i=68 + i=78 + i=17853 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17853 + + + 0 + + + + SentNetworkMessages + + i=17864 + i=17871 + i=17872 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17859 + + + + Classification + + i=68 + i=78 + i=17859 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17859 + + + 0 + + + + FailedTransmissions + + i=17878 + i=17885 + i=17892 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17874 + + + + Classification + + i=68 + i=78 + i=17874 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17874 + + + 0 + + + + EncryptionErrors + + i=17901 + i=17902 + i=17903 + i=19725 + i=78 + i=17826 + + + + Active + + i=68 + i=78 + i=17900 + + + + Classification + + i=68 + i=78 + i=17900 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17900 + + + 1 + + + + LiveValues + + i=17913 + i=17927 + i=58 + i=78 + i=17812 + + + + ConfiguredDataSetWriters + + i=17920 + i=63 + i=78 + i=17858 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17913 + + + 0 + + + + OperationalDataSetWriters + + i=17934 + i=63 + i=78 + i=17858 + + + + DiagnosticsLevel + + i=68 + i=78 + i=17927 + + + 0 + + + + AddDataSetWriter + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.4 + + i=17976 + i=17987 + i=80 + i=17725 + + + + InputArguments + + i=68 + i=78 + i=17969 + + + + + + i=297 + + + + Configuration + + i=15597 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=17969 + + + + + + i=297 + + + + DataSetWriterNodeId + + i=17 + + -1 + + + + + + + + + RemoveDataSetWriter + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.5 + + i=17993 + i=80 + i=17725 + + + + InputArguments + + i=68 + i=78 + i=17992 + + + + + + i=297 + + + + DataSetWriterNodeId + + i=17 + + -1 + + + + + + + + + HasDataSetWriter + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.6 + + i=47 + + IsWriterInGroup + + + HasWriterGroup + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.9 + + i=47 + + IsWriterGroupOf + + + WriterGroupTransportType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.7 + + i=58 + + + + WriterGroupMessageType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.8 + + i=58 + + + + ReaderGroupType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.9 + + i=18076 + i=21015 + i=21080 + i=21081 + i=21082 + i=21085 + i=14232 + + + + <DataSetReaderName> + + i=18077 + i=18078 + i=18079 + i=18080 + i=18081 + i=18082 + i=17560 + i=17562 + i=17492 + i=18088 + i=21006 + i=15306 + i=11508 + i=17999 + + + + PublisherId + + i=68 + i=78 + i=18076 + + + + WriterGroupId + + i=68 + i=78 + i=18076 + + + + DataSetWriterId + + i=68 + i=78 + i=18076 + + + + DataSetMetaData + + i=68 + i=78 + i=18076 + + + + DataSetFieldContentMask + + i=68 + i=78 + i=18076 + + + + MessageReceiveTimeout + + i=68 + i=78 + i=18076 + + + + KeyFrameCount + + i=68 + i=78 + i=18076 + + + + HeaderLayoutUri + + i=68 + i=78 + i=18076 + + + + DataSetReaderProperties + + i=68 + i=78 + i=18076 + + + + Status + + i=18089 + i=14643 + i=78 + i=18076 + + + + State + + i=63 + i=78 + i=18088 + + + + SubscribedDataSet + + i=15108 + i=78 + i=18076 + + + + Diagnostics + + i=21016 + i=21017 + i=21022 + i=21027 + i=21028 + i=21029 + i=21060 + i=19903 + i=80 + i=17999 + + + + DiagnosticsLevel + + i=63 + i=78 + i=21015 + + + + TotalInformation + + i=21018 + i=21019 + i=21020 + i=19725 + i=78 + i=21015 + + + + Active + + i=68 + i=78 + i=21017 + + + + Classification + + i=68 + i=78 + i=21017 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21017 + + + + TotalError + + i=21023 + i=21024 + i=21025 + i=19725 + i=78 + i=21015 + + + + Active + + i=68 + i=78 + i=21022 + + + + Classification + + i=68 + i=78 + i=21022 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21022 + + + + Reset + + i=78 + i=21015 + + + + SubError + + i=63 + i=78 + i=21015 + + + + Counters + + i=21030 + i=21035 + i=21040 + i=21045 + i=21050 + i=21055 + i=21061 + i=58 + i=78 + i=21015 + + + + StateError + + i=21031 + i=21032 + i=21033 + i=19725 + i=78 + i=21029 + + + + Active + + i=68 + i=78 + i=21030 + + + + Classification + + i=68 + i=78 + i=21030 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21030 + + + 0 + + + + StateOperationalByMethod + + i=21036 + i=21037 + i=21038 + i=19725 + i=78 + i=21029 + + + + Active + + i=68 + i=78 + i=21035 + + + + Classification + + i=68 + i=78 + i=21035 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21035 + + + 0 + + + + StateOperationalByParent + + i=21041 + i=21042 + i=21043 + i=19725 + i=78 + i=21029 + + + + Active + + i=68 + i=78 + i=21040 + + + + Classification + + i=68 + i=78 + i=21040 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21040 + + + 0 + + + + StateOperationalFromError + + i=21046 + i=21047 + i=21048 + i=19725 + i=78 + i=21029 + + + + Active + + i=68 + i=78 + i=21045 + + + + Classification + + i=68 + i=78 + i=21045 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21045 + + + 0 + + + + StatePausedByParent + + i=21051 + i=21052 + i=21053 + i=19725 + i=78 + i=21029 + + + + Active + + i=68 + i=78 + i=21050 + + + + Classification + + i=68 + i=78 + i=21050 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21050 + + + 0 + + + + StateDisabledByMethod + + i=21056 + i=21057 + i=21058 + i=19725 + i=78 + i=21029 + + + + Active + + i=68 + i=78 + i=21055 + + + + Classification + + i=68 + i=78 + i=21055 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21055 + + + 0 + + + + ReceivedNetworkMessages + + i=21062 + i=21063 + i=21064 + i=19725 + i=78 + i=21029 + + + + Active + + i=68 + i=78 + i=21061 + + + + Classification + + i=68 + i=78 + i=21061 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21061 + + + 0 + + + + LiveValues + + i=21076 + i=21078 + i=58 + i=78 + i=21015 + + + + ConfiguredDataSetReaders + + i=21077 + i=63 + i=78 + i=21060 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21076 + + + 0 + + + + OperationalDataSetReaders + + i=21079 + i=63 + i=78 + i=21060 + + + + DiagnosticsLevel + + i=68 + i=78 + i=21078 + + + 0 + + + + TransportSettings + + i=21090 + i=80 + i=17999 + + + + MessageSettings + + i=21091 + i=80 + i=17999 + + + + AddDataSetReader + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.10 + + i=21083 + i=21084 + i=80 + i=17999 + + + + InputArguments + + i=68 + i=78 + i=21082 + + + + + + i=297 + + + + Configuration + + i=15623 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=21082 + + + + + + i=297 + + + + DataSetReaderNodeId + + i=17 + + -1 + + + + + + + + + RemoveDataSetReader + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.11 + + i=21086 + i=80 + i=17999 + + + + InputArguments + + i=68 + i=78 + i=21085 + + + + + + i=297 + + + + DataSetReaderNodeId + + i=17 + + -1 + + + + + + + + + HasDataSetReader + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.12 + + i=47 + + IsReaderInGroup + + + HasReaderGroup + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.10 + + i=47 + + IsReaderGroupOf + + + ReaderGroupTransportType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.13 + + i=58 + + + + ReaderGroupMessageType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.6/#9.1.6.14 + + i=58 + + + + DataSetWriterType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.7/#9.1.7.2 + + i=21092 + i=21093 + i=21094 + i=17493 + i=15303 + i=21095 + i=15299 + i=19550 + i=58 + + + + DataSetWriterId + + i=68 + i=78 + i=15298 + + + + DataSetFieldContentMask + + i=68 + i=78 + i=15298 + + + + KeyFrameCount + + i=68 + i=80 + i=15298 + + + + DataSetWriterProperties + + i=68 + i=78 + i=15298 + + + + TransportSettings + + i=15305 + i=80 + i=15298 + + + + MessageSettings + + i=21096 + i=80 + i=15298 + + + + Status + + i=15300 + i=14643 + i=78 + i=15298 + + + + State + + i=63 + i=78 + i=15299 + + + + Diagnostics + + i=19551 + i=19552 + i=19557 + i=19562 + i=19563 + i=19564 + i=19595 + i=19968 + i=80 + i=15298 + + + + DiagnosticsLevel + + i=63 + i=78 + i=19550 + + + + TotalInformation + + i=19553 + i=19554 + i=19555 + i=19725 + i=78 + i=19550 + + + + Active + + i=68 + i=78 + i=19552 + + + + Classification + + i=68 + i=78 + i=19552 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19552 + + + + TotalError + + i=19558 + i=19559 + i=19560 + i=19725 + i=78 + i=19550 + + + + Active + + i=68 + i=78 + i=19557 + + + + Classification + + i=68 + i=78 + i=19557 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19557 + + + + Reset + + i=78 + i=19550 + + + + SubError + + i=63 + i=78 + i=19550 + + + + Counters + + i=19565 + i=19570 + i=19575 + i=19580 + i=19585 + i=19590 + i=19596 + i=58 + i=78 + i=19550 + + + + StateError + + i=19566 + i=19567 + i=19568 + i=19725 + i=78 + i=19564 + + + + Active + + i=68 + i=78 + i=19565 + + + + Classification + + i=68 + i=78 + i=19565 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19565 + + + 0 + + + + StateOperationalByMethod + + i=19571 + i=19572 + i=19573 + i=19725 + i=78 + i=19564 + + + + Active + + i=68 + i=78 + i=19570 + + + + Classification + + i=68 + i=78 + i=19570 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19570 + + + 0 + + + + StateOperationalByParent + + i=19576 + i=19577 + i=19578 + i=19725 + i=78 + i=19564 + + + + Active + + i=68 + i=78 + i=19575 + + + + Classification + + i=68 + i=78 + i=19575 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19575 + + + 0 + + + + StateOperationalFromError + + i=19581 + i=19582 + i=19583 + i=19725 + i=78 + i=19564 + + + + Active + + i=68 + i=78 + i=19580 + + + + Classification + + i=68 + i=78 + i=19580 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19580 + + + 0 + + + + StatePausedByParent + + i=19586 + i=19587 + i=19588 + i=19725 + i=78 + i=19564 + + + + Active + + i=68 + i=78 + i=19585 + + + + Classification + + i=68 + i=78 + i=19585 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19585 + + + 0 + + + + StateDisabledByMethod + + i=19591 + i=19592 + i=19593 + i=19725 + i=78 + i=19564 + + + + Active + + i=68 + i=78 + i=19590 + + + + Classification + + i=68 + i=78 + i=19590 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19590 + + + 0 + + + + FailedDataSetMessages + + i=19597 + i=19598 + i=19599 + i=19725 + i=78 + i=19564 + + + + Active + + i=68 + i=78 + i=19596 + + + + Classification + + i=68 + i=78 + i=19596 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19596 + + + 0 + + + + LiveValues + + i=58 + i=78 + i=19550 + + + + DataSetWriterTransportType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.7/#9.1.7.3 + + i=58 + + + + DataSetWriterMessageType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.7/#9.1.7.4 + + i=58 + + + + DataSetReaderType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.8/#9.1.8.2 + + i=21097 + i=21098 + i=21099 + i=21100 + i=21101 + i=21102 + i=17563 + i=17564 + i=15932 + i=15933 + i=15934 + i=17494 + i=15311 + i=21103 + i=15307 + i=19609 + i=15316 + i=17386 + i=17389 + i=58 + + + + PublisherId + + i=68 + i=78 + i=15306 + + + + WriterGroupId + + i=68 + i=78 + i=15306 + + + + DataSetWriterId + + i=68 + i=78 + i=15306 + + + + DataSetMetaData + + i=68 + i=78 + i=15306 + + + + DataSetFieldContentMask + + i=68 + i=78 + i=15306 + + + + MessageReceiveTimeout + + i=68 + i=78 + i=15306 + + + + KeyFrameCount + + i=68 + i=78 + i=15306 + + + + HeaderLayoutUri + + i=68 + i=78 + i=15306 + + + + SecurityMode + + i=68 + i=80 + i=15306 + + + + SecurityGroupId + + i=68 + i=80 + i=15306 + + + + SecurityKeyServices + + i=68 + i=80 + i=15306 + + + + DataSetReaderProperties + + i=68 + i=78 + i=15306 + + + + TransportSettings + + i=15319 + i=80 + i=15306 + + + + MessageSettings + + i=21104 + i=80 + i=15306 + + + + Status + + i=15308 + i=14643 + i=78 + i=15306 + + + + State + + i=63 + i=78 + i=15307 + + + + Diagnostics + + i=19610 + i=19611 + i=19616 + i=19621 + i=19622 + i=19623 + i=19654 + i=20027 + i=80 + i=15306 + + + + DiagnosticsLevel + + i=63 + i=78 + i=19609 + + + + TotalInformation + + i=19612 + i=19613 + i=19614 + i=19725 + i=78 + i=19609 + + + + Active + + i=68 + i=78 + i=19611 + + + + Classification + + i=68 + i=78 + i=19611 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19611 + + + + TotalError + + i=19617 + i=19618 + i=19619 + i=19725 + i=78 + i=19609 + + + + Active + + i=68 + i=78 + i=19616 + + + + Classification + + i=68 + i=78 + i=19616 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19616 + + + + Reset + + i=78 + i=19609 + + + + SubError + + i=63 + i=78 + i=19609 + + + + Counters + + i=19624 + i=19629 + i=19634 + i=19639 + i=19644 + i=19649 + i=19655 + i=58 + i=78 + i=19609 + + + + StateError + + i=19625 + i=19626 + i=19627 + i=19725 + i=78 + i=19623 + + + + Active + + i=68 + i=78 + i=19624 + + + + Classification + + i=68 + i=78 + i=19624 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19624 + + + 0 + + + + StateOperationalByMethod + + i=19630 + i=19631 + i=19632 + i=19725 + i=78 + i=19623 + + + + Active + + i=68 + i=78 + i=19629 + + + + Classification + + i=68 + i=78 + i=19629 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19629 + + + 0 + + + + StateOperationalByParent + + i=19635 + i=19636 + i=19637 + i=19725 + i=78 + i=19623 + + + + Active + + i=68 + i=78 + i=19634 + + + + Classification + + i=68 + i=78 + i=19634 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19634 + + + 0 + + + + StateOperationalFromError + + i=19640 + i=19641 + i=19642 + i=19725 + i=78 + i=19623 + + + + Active + + i=68 + i=78 + i=19639 + + + + Classification + + i=68 + i=78 + i=19639 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19639 + + + 0 + + + + StatePausedByParent + + i=19645 + i=19646 + i=19647 + i=19725 + i=78 + i=19623 + + + + Active + + i=68 + i=78 + i=19644 + + + + Classification + + i=68 + i=78 + i=19644 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19644 + + + 0 + + + + StateDisabledByMethod + + i=19650 + i=19651 + i=19652 + i=19725 + i=78 + i=19623 + + + + Active + + i=68 + i=78 + i=19649 + + + + Classification + + i=68 + i=78 + i=19649 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19649 + + + 0 + + + + FailedDataSetMessages + + i=19656 + i=19657 + i=19658 + i=19725 + i=78 + i=19623 + + + + Active + + i=68 + i=78 + i=19655 + + + + Classification + + i=68 + i=78 + i=19655 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19655 + + + 0 + + + + LiveValues + + i=58 + i=78 + i=19609 + + + + SubscribedDataSet + + i=15108 + i=78 + i=15306 + + + + CreateTargetVariables + PubSub Model SubscribedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.8/#9.1.8.5 + + i=17387 + i=17388 + i=80 + i=15306 + + + + InputArguments + + i=68 + i=78 + i=17386 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetVariablesToAdd + + i=14744 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=17386 + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + CreateDataSetMirror + PubSub Model SubscribedDataSet Mirror + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.8/#9.1.8.6 + + i=17390 + i=17391 + i=80 + i=15306 + + + + InputArguments + + i=68 + i=78 + i=17389 + + + + + + i=297 + + + + ParentNodeName + + i=12 + + -1 + + + + + + + i=297 + + + + RolePermissions + + i=96 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=17389 + + + + + + i=297 + + + + ParentNodeId + + i=17 + + -1 + + + + + + + + + DataSetReaderTransportType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.8/#9.1.8.3 + + i=58 + + + + DataSetReaderMessageType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.8/#9.1.8.4 + + i=58 + + + + SubscribedDataSetType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.1 + + i=58 + + + + TargetVariablesType + PubSub Model SubscribedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.2.1 + + i=15114 + i=15115 + i=15118 + i=15108 + + + + TargetVariables + + i=68 + i=78 + i=15111 + + + + AddTargetVariables + PubSub Model SubscribedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.2.2 + + i=15116 + i=15117 + i=80 + i=15111 + + + + InputArguments + + i=68 + i=78 + i=15115 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetVariablesToAdd + + i=14744 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15115 + + + + + + i=297 + + + + AddResults + + i=19 + + 1 + + 0 + + + + + + + + + RemoveTargetVariables + PubSub Model SubscribedDataSet + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.2.3 + + i=15119 + i=15120 + i=80 + i=15111 + + + + InputArguments + + i=68 + i=78 + i=15118 + + + + + + i=297 + + + + ConfigurationVersion + + i=14593 + + -1 + + + + + + + i=297 + + + + TargetsToRemove + + i=7 + + 1 + + 0 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=15118 + + + + + + i=297 + + + + RemoveResults + + i=19 + + 1 + + 0 + + + + + + + + + SubscribedDataSetMirrorType + PubSub Model SubscribedDataSet Mirror + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.3 + + i=15108 + + + + SubscribedDataSetFolderType + PubSub Model SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.4.1 + + i=23796 + i=23807 + i=23811 + i=23814 + i=23816 + i=23819 + i=61 + + + + <SubscribedDataSetFolderName> + + i=23797 + i=23800 + i=23802 + i=23805 + i=23795 + i=11508 + i=23795 + + + + AddSubscribedDataSet + + i=23798 + i=23799 + i=80 + i=23796 + + + + InputArguments + + i=68 + i=78 + i=23797 + + + + + + i=297 + + + + SubscribedDataSet + + i=23600 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=23797 + + + + + + i=297 + + + + SubscribedDataSetNodeId + + i=17 + + -1 + + + + + + + + + RemoveSubscribedDataSet + + i=23801 + i=80 + i=23796 + + + + InputArguments + + i=68 + i=78 + i=23800 + + + + + + i=297 + + + + SubscribedDataSetNodeId + + i=17 + + -1 + + + + + + + + + AddDataSetFolder + + i=23803 + i=23804 + i=80 + i=23796 + + + + InputArguments + + i=68 + i=78 + i=23802 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=23802 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + RemoveDataSetFolder + + i=23806 + i=80 + i=23796 + + + + InputArguments + + i=68 + i=78 + i=23805 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + <StandaloneSubscribedDataSetName> + + i=23808 + i=23809 + i=23810 + i=23828 + i=11508 + i=23795 + + + + SubscribedDataSet + + i=15108 + i=78 + i=23807 + + + + DataSetMetaData + + i=68 + i=78 + i=23807 + + + + IsConnected + + i=68 + i=78 + i=23807 + + + + AddSubscribedDataSet + PubSub Model SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.4.2 + + i=23812 + i=23813 + i=80 + i=23795 + + + + InputArguments + + i=68 + i=78 + i=23811 + + + + + + i=297 + + + + SubscribedDataSet + + i=23600 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=23811 + + + + + + i=297 + + + + SubscribedDataSetNodeId + + i=17 + + -1 + + + + + + + + + RemoveSubscribedDataSet + PubSub Model SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.4.3 + + i=23815 + i=80 + i=23795 + + + + InputArguments + + i=68 + i=78 + i=23814 + + + + + + i=297 + + + + SubscribedDataSetNodeId + + i=17 + + -1 + + + + + + + + + AddDataSetFolder + PubSub Model SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.4.4 + + i=23817 + i=23818 + i=80 + i=23795 + + + + InputArguments + + i=68 + i=78 + i=23816 + + + + + + i=297 + + + + Name + + i=12 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=23816 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + RemoveDataSetFolder + PubSub Model SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.4.5 + + i=23820 + i=80 + i=23795 + + + + InputArguments + + i=68 + i=78 + i=23819 + + + + + + i=297 + + + + DataSetFolderNodeId + + i=17 + + -1 + + + + + + + + + StandaloneSubscribedDataSetType + PubSub Model SubscribedDataSet Standalone + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.9/#9.1.9.5 + + i=23829 + i=23830 + i=23831 + i=58 + + + + SubscribedDataSet + + i=15108 + i=78 + i=23828 + + + + DataSetMetaData + + i=68 + i=78 + i=23828 + + + + IsConnected + + i=68 + i=78 + i=23828 + + + + PubSubStatusType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.10/#9.1.10.1 + + i=14644 + i=14645 + i=14646 + i=58 + + + + State + + i=63 + i=78 + i=14643 + + + + Enable + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.10/#9.1.10.2 + + i=80 + i=14643 + + + + Disable + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.10/#9.1.10.3 + + i=80 + i=14643 + + + + PubSubDiagnosticsType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.2 + + i=19678 + i=19679 + i=19684 + i=19689 + i=19690 + i=19691 + i=19722 + i=58 + + + + DiagnosticsLevel + + i=63 + i=78 + i=19677 + + + + TotalInformation + + i=19680 + i=19681 + i=19682 + i=19725 + i=78 + i=19677 + + + + Active + + i=68 + i=78 + i=19679 + + + + Classification + + i=68 + i=78 + i=19679 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19679 + + + + TotalError + + i=19685 + i=19686 + i=19687 + i=19725 + i=78 + i=19677 + + + + Active + + i=68 + i=78 + i=19684 + + + + Classification + + i=68 + i=78 + i=19684 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19684 + + + + Reset + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.3 + + i=78 + i=19677 + + + + SubError + + i=63 + i=78 + i=19677 + + + + Counters + + i=19692 + i=19697 + i=19702 + i=19707 + i=19712 + i=19717 + i=58 + i=78 + i=19677 + + + + StateError + + i=19693 + i=19694 + i=19695 + i=19725 + i=78 + i=19691 + + + + Active + + i=68 + i=78 + i=19692 + + + + Classification + + i=68 + i=78 + i=19692 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19692 + + + 0 + + + + StateOperationalByMethod + + i=19698 + i=19699 + i=19700 + i=19725 + i=78 + i=19691 + + + + Active + + i=68 + i=78 + i=19697 + + + + Classification + + i=68 + i=78 + i=19697 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19697 + + + 0 + + + + StateOperationalByParent + + i=19703 + i=19704 + i=19705 + i=19725 + i=78 + i=19691 + + + + Active + + i=68 + i=78 + i=19702 + + + + Classification + + i=68 + i=78 + i=19702 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19702 + + + 0 + + + + StateOperationalFromError + + i=19708 + i=19709 + i=19710 + i=19725 + i=78 + i=19691 + + + + Active + + i=68 + i=78 + i=19707 + + + + Classification + + i=68 + i=78 + i=19707 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19707 + + + 0 + + + + StatePausedByParent + + i=19713 + i=19714 + i=19715 + i=19725 + i=78 + i=19691 + + + + Active + + i=68 + i=78 + i=19712 + + + + Classification + + i=68 + i=78 + i=19712 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19712 + + + 0 + + + + StateDisabledByMethod + + i=19718 + i=19719 + i=19720 + i=19725 + i=78 + i=19691 + + + + Active + + i=68 + i=78 + i=19717 + + + + Classification + + i=68 + i=78 + i=19717 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19717 + + + 0 + + + + LiveValues + + i=58 + i=78 + i=19677 + + + + DiagnosticsLevel + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.4 + + i=19724 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=19723 + + + + + Basic + + + Advanced + + + Info + + + Log + + + Debug + + + + + + PubSubDiagnosticsCounterType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.5 + + i=19726 + i=19727 + i=19728 + i=19729 + i=63 + + + + Active + + i=68 + i=78 + i=19725 + + + + Classification + + i=68 + i=78 + i=19725 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19725 + + + + TimeFirstChange + + i=68 + i=80 + i=19725 + + + + PubSubDiagnosticsCounterClassification + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.6 + + i=19731 + i=29 + + + + + + + + EnumStrings + + i=68 + i=19730 + + + + + Information + + + Error + + + + + + PubSubDiagnosticsRootType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.7 + + i=19777 + i=19677 + + + + LiveValues + + i=19778 + i=19780 + i=19782 + i=19784 + i=58 + i=78 + i=19732 + + + + ConfiguredDataSetWriters + + i=19779 + i=63 + i=78 + i=19777 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19778 + + + 0 + + + + ConfiguredDataSetReaders + + i=19781 + i=63 + i=78 + i=19777 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19780 + + + 0 + + + + OperationalDataSetWriters + + i=19783 + i=63 + i=78 + i=19777 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19782 + + + 0 + + + + OperationalDataSetReaders + + i=19785 + i=63 + i=78 + i=19777 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19784 + + + 0 + + + + PubSubDiagnosticsConnectionType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.8 + + i=19831 + i=19677 + + + + LiveValues + + i=19832 + i=58 + i=78 + i=19786 + + + + ResolvedAddress + + i=19833 + i=63 + i=78 + i=19831 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19832 + + + 0 + + + + PubSubDiagnosticsWriterGroupType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.9 + + i=19848 + i=19879 + i=19677 + + + + Counters + + i=19880 + i=19885 + i=19890 + i=58 + i=78 + i=19834 + + + + SentNetworkMessages + + i=19881 + i=19882 + i=19883 + i=19725 + i=78 + i=19848 + + + + Active + + i=68 + i=78 + i=19880 + + + + Classification + + i=68 + i=78 + i=19880 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19880 + + + 0 + + + + FailedTransmissions + + i=19886 + i=19887 + i=19888 + i=19725 + i=78 + i=19848 + + + + Active + + i=68 + i=78 + i=19885 + + + + Classification + + i=68 + i=78 + i=19885 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19885 + + + 0 + + + + EncryptionErrors + + i=19891 + i=19892 + i=19893 + i=19725 + i=78 + i=19848 + + + + Active + + i=68 + i=78 + i=19890 + + + + Classification + + i=68 + i=78 + i=19890 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19890 + + + 1 + + + + LiveValues + + i=19895 + i=19897 + i=19899 + i=19901 + i=58 + i=78 + i=19834 + + + + ConfiguredDataSetWriters + + i=19896 + i=63 + i=78 + i=19879 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19895 + + + 0 + + + + OperationalDataSetWriters + + i=19898 + i=63 + i=78 + i=19879 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19897 + + + 0 + + + + SecurityTokenID + + i=19900 + i=63 + i=80 + i=19879 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19899 + + + 2 + + + + TimeToNextTokenID + + i=19902 + i=63 + i=80 + i=19879 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19901 + + + 2 + + + + PubSubDiagnosticsReaderGroupType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.10 + + i=19917 + i=19948 + i=19677 + + + + Counters + + i=19949 + i=19954 + i=19959 + i=58 + i=78 + i=19903 + + + + ReceivedNetworkMessages + + i=19950 + i=19951 + i=19952 + i=19725 + i=78 + i=19917 + + + + Active + + i=68 + i=78 + i=19949 + + + + Classification + + i=68 + i=78 + i=19949 + + + 0 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19949 + + + 0 + + + + ReceivedInvalidNetworkMessages + + i=19955 + i=19956 + i=19957 + i=19725 + i=80 + i=19917 + + + + Active + + i=68 + i=78 + i=19954 + + + + Classification + + i=68 + i=78 + i=19954 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19954 + + + 1 + + + + DecryptionErrors + + i=19960 + i=19961 + i=19962 + i=19725 + i=80 + i=19917 + + + + Active + + i=68 + i=78 + i=19959 + + + + Classification + + i=68 + i=78 + i=19959 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19959 + + + 1 + + + + LiveValues + + i=19964 + i=19966 + i=58 + i=78 + i=19903 + + + + ConfiguredDataSetReaders + + i=19965 + i=63 + i=78 + i=19948 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19964 + + + 0 + + + + OperationalDataSetReaders + + i=19967 + i=63 + i=78 + i=19948 + + + + DiagnosticsLevel + + i=68 + i=78 + i=19966 + + + 0 + + + + PubSubDiagnosticsDataSetWriterType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.11 + + i=19982 + i=20013 + i=19677 + + + + Counters + + i=20014 + i=58 + i=78 + i=19968 + + + + FailedDataSetMessages + + i=20015 + i=20016 + i=20017 + i=19725 + i=78 + i=19982 + + + + Active + + i=68 + i=78 + i=20014 + + + + Classification + + i=68 + i=78 + i=20014 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20014 + + + 0 + + + + LiveValues + + i=20019 + i=20021 + i=20023 + i=20025 + i=58 + i=78 + i=19968 + + + + MessageSequenceNumber + + i=20020 + i=63 + i=80 + i=20013 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20019 + + + 2 + + + + StatusCode + + i=20022 + i=63 + i=80 + i=20013 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20021 + + + 2 + + + + MajorVersion + + i=20024 + i=63 + i=80 + i=20013 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20023 + + + 2 + + + + MinorVersion + + i=20026 + i=63 + i=80 + i=20013 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20025 + + + 2 + + + + PubSubDiagnosticsDataSetReaderType + PubSub Model Diagnostics + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.11/#9.1.11.12 + + i=20041 + i=20072 + i=19677 + + + + Counters + + i=20073 + i=20078 + i=58 + i=78 + i=20027 + + + + FailedDataSetMessages + + i=20074 + i=20075 + i=20076 + i=19725 + i=78 + i=20041 + + + + Active + + i=68 + i=78 + i=20073 + + + + Classification + + i=68 + i=78 + i=20073 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20073 + + + 0 + + + + DecryptionErrors + + i=20079 + i=20080 + i=20081 + i=19725 + i=80 + i=20041 + + + + Active + + i=68 + i=78 + i=20078 + + + + Classification + + i=68 + i=78 + i=20078 + + + 1 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20078 + + + 1 + + + + LiveValues + + i=20083 + i=20085 + i=20087 + i=20089 + i=20091 + i=20093 + i=58 + i=78 + i=20027 + + + + MessageSequenceNumber + + i=20084 + i=63 + i=80 + i=20072 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20083 + + + 2 + + + + StatusCode + + i=20086 + i=63 + i=80 + i=20072 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20085 + + + 2 + + + + MajorVersion + + i=20088 + i=63 + i=80 + i=20072 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20087 + + + 2 + + + + MinorVersion + + i=20090 + i=63 + i=80 + i=20072 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20089 + + + 2 + + + + SecurityTokenID + + i=20092 + i=63 + i=80 + i=20072 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20091 + + + 2 + + + + TimeToNextTokenID + + i=20094 + i=63 + i=80 + i=20072 + + + + DiagnosticsLevel + + i=68 + i=78 + i=20093 + + + 2 + + + + PubSubCapabilitiesType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.12 + + i=23833 + i=23834 + i=23835 + i=23836 + i=23837 + i=23838 + i=32651 + i=32652 + i=32653 + i=32654 + i=32655 + i=58 + + + + MaxPubSubConnections + + i=68 + i=78 + i=23832 + + + + MaxWriterGroups + + i=68 + i=78 + i=23832 + + + + MaxReaderGroups + + i=68 + i=78 + i=23832 + + + + MaxDataSetWriters + + i=68 + i=78 + i=23832 + + + + MaxDataSetReaders + + i=68 + i=78 + i=23832 + + + + MaxFieldsPerDataSet + + i=68 + i=78 + i=23832 + + + + MaxDataSetWritersPerGroup + + i=68 + i=80 + i=23832 + + + + MaxNetworkMessageSizeDatagram + + i=68 + i=80 + i=23832 + + + + MaxNetworkMessageSizeBroker + + i=68 + i=80 + i=23832 + + + + SupportSecurityKeyPull + + i=68 + i=80 + i=23832 + + + + SupportSecurityKeyPush + + i=68 + i=80 + i=23832 + + + + PubSubStatusEventType + PubSub Model Status Event + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.13/#9.1.13.1 + + i=15545 + i=15546 + i=15547 + i=2130 + + + + ConnectionId + + i=68 + i=78 + i=15535 + + + + GroupId + + i=68 + i=78 + i=15535 + + + + State + + i=68 + i=78 + i=15535 + + + + PubSubTransportLimitsExceedEventType + PubSub Model Diagnostics Events + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.13/#9.1.13.2 + + i=15561 + i=15562 + i=15535 + + + + Actual + + i=68 + i=78 + i=15548 + + + + Maximum + + i=68 + i=78 + i=15548 + + + + PubSubCommunicationFailureEventType + PubSub Model Diagnostics Events + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.13/#9.1.13.3 + + i=15576 + i=15535 + + + + Error + + i=68 + i=78 + i=15563 + + + + UadpWriterGroupMessageType + PubSub Model UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.2.1/#9.2.1.1 + + i=21106 + i=21107 + i=21108 + i=21109 + i=21110 + i=17998 + + + + GroupVersion + + i=68 + i=78 + i=21105 + + + + DataSetOrdering + + i=68 + i=78 + i=21105 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21105 + + + + SamplingOffset + + i=68 + i=80 + i=21105 + + + + PublishingOffset + + i=68 + i=78 + i=21105 + + + + UadpDataSetWriterMessageType + PubSub Model UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.2.1/#9.2.1.2 + + i=21112 + i=21113 + i=21114 + i=21115 + i=21096 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21111 + + + + ConfiguredSize + + i=68 + i=78 + i=21111 + + + + NetworkMessageNumber + + i=68 + i=78 + i=21111 + + + + DataSetOffset + + i=68 + i=78 + i=21111 + + + + UadpDataSetReaderMessageType + PubSub Model UADP + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.2.1/#9.2.1.3 + + i=21117 + i=21119 + i=17477 + i=21120 + i=21121 + i=21122 + i=21123 + i=21124 + i=21125 + i=21104 + + + + GroupVersion + + i=68 + i=78 + i=21116 + + + + NetworkMessageNumber + + i=68 + i=78 + i=21116 + + + + DataSetOffset + + i=68 + i=78 + i=21116 + + + + DataSetClassId + + i=68 + i=78 + i=21116 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21116 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21116 + + + + PublishingInterval + + i=68 + i=78 + i=21116 + + + + ProcessingOffset + + i=68 + i=78 + i=21116 + + + + ReceiveOffset + + i=68 + i=78 + i=21116 + + + + JsonWriterGroupMessageType + PubSub Model JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.2.2/#9.2.2.1 + + i=21127 + i=17998 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21126 + + + + JsonDataSetWriterMessageType + PubSub Model JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.2.2/#9.2.2.2 + + i=21129 + i=21096 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21128 + + + + JsonDataSetReaderMessageType + PubSub Model JSON + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.2.2/#9.2.2.3 + + i=21131 + i=21132 + i=21104 + + + + NetworkMessageContentMask + + i=68 + i=78 + i=21130 + + + + DataSetMessageContentMask + + i=68 + i=78 + i=21130 + + + + DatagramConnectionTransportType + PubSub Model Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.3.1/#9.3.1.1 + + i=15072 + i=23839 + i=23840 + i=25525 + i=25526 + i=17721 + + + + DiscoveryAddress + + i=15154 + i=21145 + i=78 + i=15064 + + + + NetworkInterface + + i=17579 + i=16309 + i=78 + i=15072 + + + + Selections + + i=68 + i=78 + i=15154 + + + + DiscoveryAnnounceRate + + i=68 + i=80 + i=15064 + + + + DiscoveryMaxMessageSize + + i=68 + i=80 + i=15064 + + + + QosCategory + + i=68 + i=80 + i=15064 + + + + DatagramQos + + i=68 + i=80 + i=15064 + + + + DatagramWriterGroupTransportType + PubSub Model Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.3.1/#9.3.1.2 + + i=21134 + i=21135 + i=23842 + i=25527 + i=23847 + i=23848 + i=23849 + i=17997 + + + + MessageRepeatCount + + i=68 + i=80 + i=21133 + + + + MessageRepeatDelay + + i=68 + i=80 + i=21133 + + + + Address + + i=23843 + i=21145 + i=80 + i=21133 + + + + NetworkInterface + + i=23844 + i=16309 + i=78 + i=23842 + + + + Selections + + i=68 + i=78 + i=23843 + + + + QosCategory + + i=68 + i=80 + i=21133 + + + + DatagramQos + + i=68 + i=80 + i=21133 + + + + DiscoveryAnnounceRate + + i=68 + i=80 + i=21133 + + + + Topic + + i=68 + i=80 + i=21133 + + + + DatagramDataSetReaderTransportType + PubSub Model Datagram + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.3.1/#9.3.1.4 + + i=24017 + i=25528 + i=24022 + i=24023 + i=15319 + + + + Address + + i=24018 + i=21145 + i=80 + i=24016 + + + + NetworkInterface + + i=24019 + i=16309 + i=78 + i=24017 + + + + Selections + + i=68 + i=78 + i=24018 + + + + QosCategory + + i=68 + i=80 + i=24016 + + + + DatagramQos + + i=68 + i=80 + i=24016 + + + + Topic + + i=68 + i=80 + i=24016 + + + + BrokerConnectionTransportType + PubSub Model Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.3.2/#9.3.2.1 + + i=15156 + i=15178 + i=17721 + + + + ResourceUri + + i=68 + i=78 + i=15155 + + + + AuthenticationProfileUri + + i=68 + i=78 + i=15155 + + + + BrokerWriterGroupTransportType + PubSub Model Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.3.2/#9.3.2.2 + + i=21137 + i=15246 + i=15247 + i=15249 + i=17997 + + + + QueueName + + i=68 + i=78 + i=21136 + + + + ResourceUri + + i=68 + i=78 + i=21136 + + + + AuthenticationProfileUri + + i=68 + i=78 + i=21136 + + + + RequestedDeliveryGuarantee + + i=68 + i=78 + i=21136 + + + + BrokerDataSetWriterTransportType + PubSub Model Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.3.2/#9.3.2.3 + + i=21139 + i=21140 + i=15250 + i=15251 + i=15330 + i=21141 + i=15305 + + + + QueueName + + i=68 + i=78 + i=21138 + + + + MetaDataQueueName + + i=68 + i=78 + i=21138 + + + + ResourceUri + + i=68 + i=78 + i=21138 + + + + AuthenticationProfileUri + + i=68 + i=78 + i=21138 + + + + RequestedDeliveryGuarantee + + i=68 + i=78 + i=21138 + + + + MetaDataUpdateTime + + i=68 + i=78 + i=21138 + + + + BrokerDataSetReaderTransportType + PubSub Model Broker + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.3.2/#9.3.2.4 + + i=21143 + i=15334 + i=15419 + i=15420 + i=21144 + i=15319 + + + + QueueName + + i=68 + i=78 + i=21142 + + + + ResourceUri + + i=68 + i=78 + i=21142 + + + + AuthenticationProfileUri + + i=68 + i=78 + i=21142 + + + + RequestedDeliveryGuarantee + + i=68 + i=78 + i=21142 + + + + MetaDataQueueName + + i=68 + i=78 + i=21142 + + + + NetworkAddressType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.6 + + i=21146 + i=58 + + + + NetworkInterface + + i=17582 + i=16309 + i=78 + i=21145 + + + + Selections + + i=68 + i=78 + i=21146 + + + + NetworkAddressUrlType + PubSub Model Base + https://reference.opcfoundation.org/v105/Core/docs/Part14/9.1.5/#9.1.5.7 + + i=21149 + i=21145 + + + + Url + + i=63 + i=78 + i=21147 + + + + AliasNameType + AliasName Base + https://reference.opcfoundation.org/v105/Core/docs/Part17/6.2 + + i=58 + + + + AliasNameCategoryType + AliasName Base + https://reference.opcfoundation.org/v105/Core/docs/Part17/6.3.1 + + i=23457 + i=23458 + i=23462 + i=61 + + + + <Alias> + + i=23455 + i=11508 + i=23456 + + + + <SubAliasNameCategories> + + i=23459 + i=23456 + i=11508 + i=23456 + + + + FindAlias + + i=23460 + i=23461 + i=78 + i=23458 + + + + InputArguments + + i=68 + i=78 + i=23459 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=23459 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + FindAlias + https://reference.opcfoundation.org/v105/Core/docs/Part17/6.3.2 + + i=23463 + i=23464 + i=78 + i=23456 + + + + InputArguments + + i=68 + i=78 + i=23462 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=23462 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + AliasNameDataType + AliasName Base + https://reference.opcfoundation.org/v105/Core/docs/Part17/7.2 + + i=22 + + + + + + + + AliasFor + AliasName Base + https://reference.opcfoundation.org/v105/Core/docs/Part17/8.2 + + i=32 + + HasAlias + + + Aliases + AliasName Hierarchy + https://reference.opcfoundation.org/v105/Core/docs/Part17/9.2 + + i=23476 + i=85 + i=23456 + + + + FindAlias + + i=23477 + i=23478 + i=23470 + + + + InputArguments + + i=68 + i=23476 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=23476 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + TagVariables + AliasName Category Tags + https://reference.opcfoundation.org/v105/Core/docs/Part17/9.3 + + i=23485 + i=23470 + i=23456 + + + + FindAlias + + i=23486 + i=23487 + i=23479 + + + + InputArguments + + i=68 + i=23485 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=23485 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + Topics + AliasName Category Topics + https://reference.opcfoundation.org/v105/Core/docs/Part17/9.4 + + i=23494 + i=23470 + i=23456 + + + + FindAlias + + i=23495 + i=23496 + i=23488 + + + + InputArguments + + i=68 + i=23494 + + + + + + i=297 + + + + AliasNameSearchPattern + + i=12 + + -1 + + + + + + + i=297 + + + + ReferenceTypeFilter + + i=17 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=23494 + + + + + + i=297 + + + + AliasNodeList + + i=23468 + + 1 + + 0 + + + + + + + + + UserManagementType + Security User Management Server + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.1 + + i=24265 + i=24266 + i=24267 + i=24268 + i=24269 + i=24271 + i=24273 + i=24275 + i=58 + + + + Users + + i=68 + i=78 + i=24264 + + + + PasswordLength + + i=68 + i=78 + i=24264 + + + + PasswordOptions + + i=68 + i=78 + i=24264 + + + + PasswordRestrictions + + i=68 + i=80 + i=24264 + + + + AddUser + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.5 + + i=24270 + i=78 + i=24264 + + + + InputArguments + + i=68 + i=78 + i=24269 + + + + + + i=297 + + + + UserName + + i=12 + + -1 + + + + + + + i=297 + + + + Password + + i=12 + + -1 + + + + + + + i=297 + + + + UserConfiguration + + i=24279 + + -1 + + + + + + + i=297 + + + + Description + + i=12 + + -1 + + + + + + + + + ModifyUser + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.6 + + i=24272 + i=78 + i=24264 + + + + InputArguments + + i=68 + i=78 + i=24271 + + + + + + i=297 + + + + UserName + + i=12 + + -1 + + + + + + + i=297 + + + + ModifyPassword + + i=1 + + -1 + + + + + + + i=297 + + + + Password + + i=12 + + -1 + + + + + + + i=297 + + + + ModifyUserConfiguration + + i=1 + + -1 + + + + + + + i=297 + + + + UserConfiguration + + i=24279 + + -1 + + + + + + + i=297 + + + + ModifyDescription + + i=1 + + -1 + + + + + + + i=297 + + + + Description + + i=12 + + -1 + + + + + + + + + RemoveUser + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.7 + + i=24274 + i=78 + i=24264 + + + + InputArguments + + i=68 + i=78 + i=24273 + + + + + + i=297 + + + + UserName + + i=12 + + -1 + + + + + + + + + ChangePassword + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.8 + + i=24276 + i=78 + i=24264 + + + + InputArguments + + i=68 + i=78 + i=24275 + + + + + + i=297 + + + + OldPassword + + i=12 + + -1 + + + + + + + i=297 + + + + NewPassword + + i=12 + + -1 + + + + + + + + + PasswordOptionsMask + Security User Management Server + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.2 + + i=24278 + i=7 + + + + Indicates if the server supports the feature to require a password change after the creation of the user. + + + Indicates if the server supports to disable a user. + + + Indicates if the server supports the configuration NoDelete for a user. + + + Indicates if the server supports the configuration NoChangeByUser for a user. + + + Indicates if the server supports to management of a description for the user. + + + Indicates if a upper case ASCII character is required in a password. + + + Indicates if a lower case ASCII character is required in a password. + + + Indicates if a digit ASCII character is required in a password. + + + Indicates if a special character is required in a password. + + + + + OptionSetValues + + i=68 + i=24277 + + + + + SupportInitialPasswordChange + + + SupportDisableUser + + + SupportDisableDeleteForUser + + + SupportNoChangeForUser + + + SupportDescriptionForUser + + + RequiresUpperCaseCharacters + + + RequiresLowerCaseCharacters + + + RequiresDigitCharacters + + + RequiresSpecialCharacters + + + + + + UserConfigurationMask + Security User Management Server + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.3 + + i=24280 + i=7 + + + + The user cannot be deleted. + + + The user is disabled. + + + The user cannot change the password. + + + The user must change the password to get the assigned roles. If the password is not changed, the user has only the Role Anonymous. + + + + + OptionSetValues + + i=68 + i=24279 + + + + + NoDelete + + + Disabled + + + NoChangeByUser + + + MustChangePassword + + + + + + UserManagementDataType + Security User Management Server + https://reference.opcfoundation.org/v105/Core/docs/Part18/5.2.4 + + i=22 + + + + + + + + + UserManagement + Security User Management Server + https://reference.opcfoundation.org/v105/Core/docs/Part18/1 + + i=24301 + i=24302 + i=24303 + i=24291 + i=24304 + i=24306 + i=24308 + i=24310 + i=12637 + i=24264 + + + + Users + + i=68 + i=24290 + + + + PasswordLength + + i=68 + i=24290 + + + + PasswordOptions + + i=68 + i=24290 + + + + PasswordRestrictions + + i=68 + i=24290 + + + + AddUser + + i=24305 + i=24290 + + + + InputArguments + + i=68 + i=24304 + + + + + + i=297 + + + + UserName + + i=12 + + -1 + + + + + + + i=297 + + + + Password + + i=12 + + -1 + + + + + + + i=297 + + + + UserConfiguration + + i=24279 + + -1 + + + + + + + i=297 + + + + Description + + i=12 + + -1 + + + + + + + + + ModifyUser + + i=24307 + i=24290 + + + + InputArguments + + i=68 + i=24306 + + + + + + i=297 + + + + UserName + + i=12 + + -1 + + + + + + + i=297 + + + + ModifyPassword + + i=1 + + -1 + + + + + + + i=297 + + + + Password + + i=12 + + -1 + + + + + + + i=297 + + + + ModifyUserConfiguration + + i=1 + + -1 + + + + + + + i=297 + + + + UserConfiguration + + i=24279 + + -1 + + + + + + + i=297 + + + + ModifyDescription + + i=1 + + -1 + + + + + + + i=297 + + + + Description + + i=12 + + -1 + + + + + + + + + RemoveUser + + i=24309 + i=24290 + + + + InputArguments + + i=68 + i=24308 + + + + + + i=297 + + + + UserName + + i=12 + + -1 + + + + + + + + + ChangePassword + + i=24311 + i=24290 + + + + InputArguments + + i=68 + i=24310 + + + + + + i=297 + + + + OldPassword + + i=12 + + -1 + + + + + + + i=297 + + + + NewPassword + + i=12 + + -1 + + + + + + + + + MultiStateDictionaryEntryDiscreteBaseType + Data Access MultiStateDictionaryEntryDBT + Data Access ValueAsDictionaryEntries Property + https://reference.opcfoundation.org/v105/Core/docs/Part19/7.1 + + i=19082 + i=19083 + i=11238 + + + + EnumDictionaryEntries + + i=68 + i=78 + i=19077 + + + + ValueAsDictionaryEntries + + i=68 + i=80 + i=19077 + + + + MultiStateDictionaryEntryDiscreteType + Data Access MultiStateDictionaryEntryDBT + https://reference.opcfoundation.org/v105/Core/docs/Part19/7.2 + + i=19090 + i=19077 + + + + ValueAsDictionaryEntries + + i=68 + i=78 + i=19084 + + + + EncodedTicket + Onboarding Ticket Reader + https://reference.opcfoundation.org/v105/Core/docs/Part21/8.2.1 + + i=12 + + + + ApplicationConfigurationType + Onboarding Server PushManagement + https://reference.opcfoundation.org/v105/Core/docs/Part21/9.3.6 + + i=26850 + i=26851 + i=26852 + i=26849 + i=12581 + + + + ApplicationUri + + i=68 + i=78 + i=25731 + + + + ProductUri + + i=68 + i=78 + i=25731 + + + + ApplicationType + + i=68 + i=78 + i=25731 + + + + Enabled + + i=68 + i=78 + i=25731 + + + + ProvisionableDeviceType + Onboarding Server PushManagement + https://reference.opcfoundation.org/v105/Core/docs/Part21/9.3.3 + + i=26872 + i=26873 + i=26875 + i=26878 + i=58 + + + + IsSingleton + + i=68 + i=78 + i=26871 + + + + RequestTickets + https://reference.opcfoundation.org/v105/Core/docs/Part21/9.3.4 + + i=26874 + i=78 + i=26871 + + + + OutputArguments + + i=68 + i=78 + i=26873 + + + + + + i=297 + + + + Tickets + + i=25726 + + 1 + + 0 + + + + + + + + + SetRegistrarEndpoints + https://reference.opcfoundation.org/v105/Core/docs/Part21/9.3.5 + + i=26876 + i=80 + i=26871 + + + + InputArguments + + i=68 + i=78 + i=26875 + + + + + + i=297 + + + + Registrars + + i=308 + + 1 + + 0 + + + + + + + + + <ApplicationName> + + i=26879 + i=27997 + i=27998 + i=27999 + i=28000 + i=28001 + i=28002 + i=28003 + i=28005 + i=28008 + i=28010 + i=28013 + i=27996 + i=25731 + i=11508 + i=26871 + + + + CertificateGroups + + i=26880 + i=13813 + i=78 + i=26878 + + + + DefaultApplicationGroup + + i=26881 + i=26917 + i=12555 + i=78 + i=26879 + + + + TrustList + + i=26882 + i=26883 + i=26884 + i=26885 + i=26889 + i=26892 + i=26894 + i=26897 + i=26899 + i=26902 + i=26904 + i=26907 + i=26910 + i=26913 + i=26915 + i=12522 + i=78 + i=26880 + + + + Size + + i=68 + i=78 + i=26881 + + + + Writable + + i=68 + i=78 + i=26881 + + + + UserWritable + + i=68 + i=78 + i=26881 + + + + OpenCount + + i=68 + i=78 + i=26881 + + + + Open + + i=26890 + i=26891 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26889 + + + + + + i=297 + + + + Mode + + i=3 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=26889 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Close + + i=26893 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26892 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + Read + + i=26895 + i=26896 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26894 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Length + + i=6 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=26894 + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + Write + + i=26898 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26897 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Data + + i=15 + + -1 + + + + + + + + + GetPosition + + i=26900 + i=26901 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26899 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=26899 + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + SetPosition + + i=26903 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26902 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + i=297 + + + + Position + + i=9 + + -1 + + + + + + + + + LastUpdateTime + + i=68 + i=78 + i=26881 + + + + OpenWithMasks + + i=26908 + i=26909 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26907 + + + + + + i=297 + + + + Masks + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=26907 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + CloseAndUpdate + + i=26911 + i=26912 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26910 + + + + + + i=297 + + + + FileHandle + + i=7 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=26910 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + AddCertificate + + i=26914 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26913 + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + RemoveCertificate + + i=26916 + i=78 + i=26881 + + + + InputArguments + + i=68 + i=78 + i=26915 + + + + + + i=297 + + + + Thumbprint + + i=12 + + -1 + + + + + + + i=297 + + + + IsTrustedCertificate + + i=1 + + -1 + + + + + + + + + CertificateTypes + + i=68 + i=78 + i=26880 + + + + ApplicationUri + + i=68 + i=78 + i=26878 + + + + ProductUri + + i=68 + i=78 + i=26878 + + + + ApplicationType + + i=68 + i=78 + i=26878 + + + + ServerCapabilities + + i=68 + i=78 + i=26878 + + + + SupportedPrivateKeyFormats + + i=68 + i=78 + i=26878 + + + + MaxTrustListSize + + i=68 + i=78 + i=26878 + + + + MulticastDnsEnabled + + i=68 + i=78 + i=26878 + + + + UpdateCertificate + + i=28006 + i=28007 + i=78 + i=26878 + + + + InputArguments + + i=68 + i=78 + i=28005 + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + Certificate + + i=15 + + -1 + + + + + + + i=297 + + + + IssuerCertificates + + i=15 + + 1 + + 0 + + + + + + + i=297 + + + + PrivateKeyFormat + + i=12 + + -1 + + + + + + + i=297 + + + + PrivateKey + + i=15 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=28005 + + + + + + i=297 + + + + ApplyChangesRequired + + i=1 + + -1 + + + + + + + + + ApplyChanges + + i=78 + i=26878 + + + + CreateSigningRequest + + i=28011 + i=28012 + i=78 + i=26878 + + + + InputArguments + + i=68 + i=78 + i=28010 + + + + + + i=297 + + + + CertificateGroupId + + i=17 + + -1 + + + + + + + i=297 + + + + CertificateTypeId + + i=17 + + -1 + + + + + + + i=297 + + + + SubjectName + + i=12 + + -1 + + + + + + + i=297 + + + + RegeneratePrivateKey + + i=1 + + -1 + + + + + + + i=297 + + + + Nonce + + i=15 + + -1 + + + + + + + + + OutputArguments + + i=68 + i=78 + i=28010 + + + + + + i=297 + + + + CertificateRequest + + i=15 + + -1 + + + + + + + + + GetRejectedList + + i=28014 + i=78 + i=26878 + + + + OutputArguments + + i=68 + i=78 + i=28013 + + + + + + i=297 + + + + Certificates + + i=15 + + 1 + + 0 + + + + + + + + + Enabled + + i=68 + i=78 + i=26878 + + + + ProvisionableDevice + Onboarding Server PushManagement + https://reference.opcfoundation.org/v105/Core/docs/Part21/9.3.2 + + i=29879 + i=29880 + i=24226 + i=26871 + + + + IsSingleton + + i=68 + i=29878 + + + + RequestTickets + + i=29881 + i=29878 + + + + OutputArguments + + i=68 + i=29880 + + + + + + i=297 + + + + Tickets + + i=25726 + + 1 + + 0 + + + + + + + + + IIetfBaseNetworkInterfaceType + BNM Ethernet Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.1 + + i=24149 + i=24150 + i=24151 + i=24152 + i=17602 + + + + AdminStatus + + i=63 + i=78 + i=24148 + + + + OperStatus + + i=63 + i=78 + i=24148 + + + + PhysAddress + + i=63 + i=80 + i=24148 + + + + Speed + + i=24157 + i=17497 + i=78 + i=24148 + + + + EngineeringUnits + + i=68 + i=78 + i=24152 + + + + + i=888 + + + + http://www.opcfoundation.org/UA/units/un/cefact + 4337968 + + en + bit/s + + + en + bit per second + + + + + + + + IIeeeBaseEthernetPortType + BNM Ethernet Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.2 + + i=24159 + i=24165 + i=24166 + i=17602 + + + + Speed + + i=24164 + i=17497 + i=78 + i=24158 + + + + EngineeringUnits + + i=68 + i=78 + i=24159 + + + + + i=888 + + + + http://www.opcfoundation.org/UA/units/un/cefact + 4534832 + + en + Mbit/s + + + en + megabit per second + + + + + + + + Duplex + + i=63 + i=78 + i=24158 + + + + MaxFrameLength + + i=63 + i=78 + i=24158 + + + + IIeeeAutoNegotiationStatusType + BNM AutoNeg + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.3 + + i=24234 + i=17602 + + + + NegotiationStatus + + i=63 + i=78 + i=24233 + + + + IBaseEthernetCapabilitiesType + BNM VLAN Capabilities + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.4 + + i=24168 + i=17602 + + + + VlanTagCapable + + i=63 + i=78 + i=24167 + + + + IVlanIdType + BNM IETF Interface Vlan Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.5 + + i=25219 + i=17602 + + + + VlanId + + i=63 + i=78 + i=25218 + + + + ISrClassType + BNM TSN Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.6 + + i=24170 + i=24171 + i=24172 + i=17602 + + + + Id + + i=63 + i=78 + i=24169 + + + + Priority + + i=63 + i=78 + i=24169 + + + + Vid + + i=63 + i=78 + i=24169 + + + + IIeeeBaseTsnStreamType + BNM TSN Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.7 + + i=24174 + i=24175 + i=24176 + i=24177 + i=24178 + i=17602 + + + + StreamId + + i=63 + i=78 + i=24173 + + + + StreamName + + i=63 + i=78 + i=24173 + + + + State + + i=63 + i=78 + i=24173 + + + + AccumulatedLatency + + i=63 + i=80 + i=24173 + + + + SrClassId + + i=63 + i=80 + i=24173 + + + + IIeeeBaseTsnTrafficSpecificationType + BNM TSN Config + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.8 + + i=24180 + i=24181 + i=24182 + i=17602 + + + + MaxIntervalFrames + + i=63 + i=78 + i=24179 + + + + MaxFrameSize + + i=63 + i=78 + i=24179 + + + + Interval + + i=63 + i=78 + i=24179 + + + + IIeeeBaseTsnStatusStreamType + BNM TSN Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.9 + + i=24184 + i=24185 + i=24186 + i=24187 + i=17602 + + + + TalkerStatus + + i=63 + i=80 + i=24183 + + + + ListenerStatus + + i=63 + i=80 + i=24183 + + + + FailureCode + + i=63 + i=78 + i=24183 + + + + FailureSystemIdentifier + + i=63 + i=78 + i=24183 + + + + IIeeeTsnInterfaceConfigurationType + BNM TSN Config + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.10 + + i=24189 + i=24190 + i=17602 + + + + MacAddress + + i=63 + i=78 + i=24188 + + + + InterfaceName + + i=63 + i=80 + i=24188 + + + + IIeeeTsnInterfaceConfigurationTalkerType + BNM TSN Config + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.11 + + i=24194 + i=24188 + + + + TimeAwareOffset + + i=63 + i=80 + i=24191 + + + + IIeeeTsnInterfaceConfigurationListenerType + BNM TSN Config + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.12 + + i=24198 + i=24188 + + + + ReceiveOffset + + i=63 + i=80 + i=24195 + + + + IIeeeTsnMacAddressType + BNM TSN Config + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.13 + + i=24200 + i=24201 + i=17602 + + + + DestinationAddress + + i=63 + i=78 + i=24199 + + + + SourceAddress + + i=63 + i=80 + i=24199 + + + + IIeeeTsnVlanTagType + BNM TSN Config + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.14 + + i=24203 + i=24204 + i=17602 + + + + VlanId + + i=63 + i=78 + i=24202 + + + + PriorityCodePoint + + i=63 + i=78 + i=24202 + + + + IPriorityMappingEntryType + BNM Priority Mapping + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.2.15 + + i=24206 + i=24207 + i=24208 + i=24209 + i=17602 + + + + MappingUri + + i=63 + i=78 + i=24205 + + + + PriorityLabel + + i=63 + i=78 + i=24205 + + + + PriorityValue_PCP + + i=63 + i=80 + i=24205 + + + + PriorityValue_DSCP + + i=63 + i=80 + i=24205 + + + + Duplex + BNM Ethernet Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.1 + + i=24235 + i=29 + + + + Full duplex. + + + Half duplex. + + + Link is currently disconnected or initializing. + + + + + EnumValues + + i=68 + i=24210 + + + + + + i=7616 + + + + 0 + + Full + + + Full duplex. + + + + + + + i=7616 + + + + 1 + + Half + + + Half duplex. + + + + + + + i=7616 + + + + 2 + + Unknown + + + Link is currently disconnected or initializing. + + + + + + + + + InterfaceAdminStatus + BNM Ethernet Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.2 + + i=24236 + i=29 + + + + Ready to pass packets. + + + Not ready to pass packets and not in some test mode. + + + In some test mode. + + + + + EnumValues + + i=68 + i=24212 + + + + + + i=7616 + + + + 0 + + Up + + + Ready to pass packets. + + + + + + + i=7616 + + + + 1 + + Down + + + Not ready to pass packets and not in some test mode. + + + + + + + i=7616 + + + + 2 + + Testing + + + In some test mode. + + + + + + + + + InterfaceOperStatus + BNM Ethernet Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.3 + + i=24237 + i=29 + + + + Ready to pass packets. + + + The interface does not pass any packets. + + + In some test mode. No operational packets can be passed. + + + Status cannot be determined for some reason. + + + Waiting for some external event. + + + Some component (typically hardware) is missing. + + + Down due to state of lower-layer interface(s). + + + + + EnumValues + + i=68 + i=24214 + + + + + + i=7616 + + + + 0 + + Up + + + Ready to pass packets. + + + + + + + i=7616 + + + + 1 + + Down + + + The interface does not pass any packets. + + + + + + + i=7616 + + + + 2 + + Testing + + + In some test mode. No operational packets can be passed. + + + + + + + i=7616 + + + + 3 + + Unknown + + + Status cannot be determined for some reason. + + + + + + + i=7616 + + + + 4 + + Dormant + + + Waiting for some external event. + + + + + + + i=7616 + + + + 5 + + NotPresent + + + Some component (typically hardware) is missing. + + + + + + + i=7616 + + + + 6 + + LowerLayerDown + + + Down due to state of lower-layer interface(s). + + + + + + + + + NegotiationStatus + BNM AutoNeg + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.4 + + i=24238 + i=29 + + + + The auto-negotiation protocol is running and negotiation is currently in-progress. + + + The auto-negotiation protocol has completed successfully. + + + The auto-negotiation protocol has failed. + + + The auto-negotiation status is not currently known, this could be because it is still negotiating or the protocol cannot run (e.g., if no medium is present). + + + No auto-negotiation is executed. The auto-negotiation function is either not supported on this interface or has not been enabled. + + + + + EnumValues + + i=68 + i=24216 + + + + + + i=7616 + + + + 0 + + InProgress + + + The auto-negotiation protocol is running and negotiation is currently in-progress. + + + + + + + i=7616 + + + + 1 + + Complete + + + The auto-negotiation protocol has completed successfully. + + + + + + + i=7616 + + + + 2 + + Failed + + + The auto-negotiation protocol has failed. + + + + + + + i=7616 + + + + 3 + + Unknown + + + The auto-negotiation status is not currently known, this could be because it is still negotiating or the protocol cannot run (e.g., if no medium is present). + + + + + + + i=7616 + + + + 4 + + NoNegotiation + + + No auto-negotiation is executed. The auto-negotiation function is either not supported on this interface or has not been enabled. + + + + + + + + + TsnFailureCode + BNM TSN Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.5 + + i=24239 + i=29 + + + + No failure + + + Insufficient bandwidth + + + Insufficient bridge resources + + + Insufficient bandwidth for Traffic Class + + + StreamID in use by another Talker + + + Stream destination address already in use + + + Stream pre-empted by higher rank + + + Reported latency has changed + + + Egress port is not AVBCapable + + + Use a different destination address + + + Out of MSRP resources + + + Out of MMRP resources + + + Cannot store destination address + + + Requested priority is not an SR Class priority + + + MaxFrameSize is too large for media + + + MaxFanInPorts limit has been reached + + + Changes in FirstValue for a registered StreamID + + + VLAN is blocked on this egress port (Registration Forbidden) + + + VLAN tagging is disabled on this egress port (untagged set) + + + SR class priority mismatch + + + Enhanced feature cannot be propagated to original Port + + + MaxLatency exceeded + + + Nearest Bridge cannot provide network identification for stream transformation + + + Stream transformation not supported + + + Stream identification type not supported for stream transformation + + + Enhanced feature cannot be supported without a CNC + + + + + EnumValues + + i=68 + i=24218 + + + + + + i=7616 + + + + 0 + + NoFailure + + + No failure + + + + + + + i=7616 + + + + 1 + + InsufficientBandwidth + + + Insufficient bandwidth + + + + + + + i=7616 + + + + 2 + + InsufficientResources + + + Insufficient bridge resources + + + + + + + i=7616 + + + + 3 + + InsufficientTrafficClassBandwidth + + + Insufficient bandwidth for Traffic Class + + + + + + + i=7616 + + + + 4 + + StreamIdInUse + + + StreamID in use by another Talker + + + + + + + i=7616 + + + + 5 + + StreamDestinationAddressInUse + + + Stream destination address already in use + + + + + + + i=7616 + + + + 6 + + StreamPreemptedByHigherRank + + + Stream pre-empted by higher rank + + + + + + + i=7616 + + + + 7 + + LatencyHasChanged + + + Reported latency has changed + + + + + + + i=7616 + + + + 8 + + EgressPortNotAvbCapable + + + Egress port is not AVBCapable + + + + + + + i=7616 + + + + 9 + + UseDifferentDestinationAddress + + + Use a different destination address + + + + + + + i=7616 + + + + 10 + + OutOfMsrpResources + + + Out of MSRP resources + + + + + + + i=7616 + + + + 11 + + OutOfMmrpResources + + + Out of MMRP resources + + + + + + + i=7616 + + + + 12 + + CannotStoreDestinationAddress + + + Cannot store destination address + + + + + + + i=7616 + + + + 13 + + PriorityIsNotAnSrcClass + + + Requested priority is not an SR Class priority + + + + + + + i=7616 + + + + 14 + + MaxFrameSizeTooLarge + + + MaxFrameSize is too large for media + + + + + + + i=7616 + + + + 15 + + MaxFanInPortsLimitReached + + + MaxFanInPorts limit has been reached + + + + + + + i=7616 + + + + 16 + + FirstValueChangedForStreamId + + + Changes in FirstValue for a registered StreamID + + + + + + + i=7616 + + + + 17 + + VlanBlockedOnEgress + + + VLAN is blocked on this egress port (Registration Forbidden) + + + + + + + i=7616 + + + + 18 + + VlanTaggingDisabledOnEgress + + + VLAN tagging is disabled on this egress port (untagged set) + + + + + + + i=7616 + + + + 19 + + SrClassPriorityMismatch + + + SR class priority mismatch + + + + + + + i=7616 + + + + 20 + + FeatureNotPropagated + + + Enhanced feature cannot be propagated to original Port + + + + + + + i=7616 + + + + 21 + + MaxLatencyExceeded + + + MaxLatency exceeded + + + + + + + i=7616 + + + + 22 + + BridgeDoesNotProvideNetworkId + + + Nearest Bridge cannot provide network identification for stream transformation + + + + + + + i=7616 + + + + 23 + + StreamTransformNotSupported + + + Stream transformation not supported + + + + + + + i=7616 + + + + 24 + + StreamIdTypeNotSupported + + + Stream identification type not supported for stream transformation + + + + + + + i=7616 + + + + 25 + + FeatureNotSupported + + + Enhanced feature cannot be supported without a CNC + + + + + + + + + TsnStreamState + BNM TSN Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.6 + + i=24240 + i=29 + + + + The related TSN Stream is currently disabled. + + + The related TSN Stream is in the process of receiving configuration parameters from the TSN Control Layer. + + + The related TSN Stream has successfully received and applied the configuration from the TSN Control Layer. The related TSN Stream is not fully operational as long as local preconditions (e.g. synchronization state) are not valid. + + + The related TSN Stream object is configured and all other required preconditions (e.g. synchronization state) for sending / receiving data are valid. + + + The related TSN Stream object is in an error state. + + + + + EnumValues + + i=68 + i=24220 + + + + + + i=7616 + + + + 0 + + Disabled + + + The related TSN Stream is currently disabled. + + + + + + + i=7616 + + + + 1 + + Configuring + + + The related TSN Stream is in the process of receiving configuration parameters from the TSN Control Layer. + + + + + + + i=7616 + + + + 2 + + Ready + + + The related TSN Stream has successfully received and applied the configuration from the TSN Control Layer. The related TSN Stream is not fully operational as long as local preconditions (e.g. synchronization state) are not valid. + + + + + + + i=7616 + + + + 3 + + Operational + + + The related TSN Stream object is configured and all other required preconditions (e.g. synchronization state) for sending / receiving data are valid. + + + + + + + i=7616 + + + + 4 + + Error + + + The related TSN Stream object is in an error state. + + + + + + + + + TsnTalkerStatus + BNM TSN Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.7 + + i=24241 + i=29 + + + + No Talker detected. + + + Talker ready (configured). + + + Talker failed. + + + + + EnumValues + + i=68 + i=24222 + + + + + + i=7616 + + + + 0 + + None + + + No Talker detected. + + + + + + + i=7616 + + + + 1 + + Ready + + + Talker ready (configured). + + + + + + + i=7616 + + + + 2 + + Failed + + + Talker failed. + + + + + + + + + TsnListenerStatus + BNM TSN Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.1/#5.3.1.8 + + i=24242 + i=29 + + + + No Listener detected. + + + Listener ready (configured). + + + One or more Listeners ready, and one or more Listeners failed. + + + Listener failed. + + + + + EnumValues + + i=68 + i=24224 + + + + + + i=7616 + + + + 0 + + None + + + No Listener detected. + + + + + + + i=7616 + + + + 1 + + Ready + + + Listener ready (configured). + + + + + + + i=7616 + + + + 2 + + PartialFailed + + + One or more Listeners ready, and one or more Listeners failed. + + + + + + + i=7616 + + + + 3 + + Failed + + + Listener failed. + + + + + + + + + PriorityMappingEntryType + BNM Priority Mapping 2 + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.3.2/#5.3.2.1 + + i=22 + + + + + + + + + + Resources + BNM Entry Points + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.4.1 + + i=2253 + i=61 + + + + Communication + BNM Entry Points + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.4.2 + + i=24226 + i=61 + + + + MappingTables + BNM Mapping Entry Points + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.4.3 + + i=24227 + i=61 + + + + NetworkInterfaces + BNM Entry Points + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.4.4 + + i=24227 + i=61 + + + + Streams + BNM TSN Entry Points + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.4.5 + + i=24227 + i=61 + + + + TalkerStreams + BNM TSN Entry Points + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.4.6 + + i=24230 + i=61 + + + + ListenerStreams + BNM TSN Entry Points + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.4.7 + + i=24230 + i=61 + + + + IetfBaseNetworkInterfaceType + BNM IETF Interface Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.5.1/#5.5.1.2 + + i=25222 + i=25223 + i=25224 + i=25225 + i=25226 + i=24148 + i=58 + + + + AdminStatus + + i=63 + i=78 + i=25221 + + + + OperStatus + + i=63 + i=78 + i=25221 + + + + PhysAddress + + i=63 + i=80 + i=25221 + + + + Speed + + i=25252 + i=17497 + i=78 + i=25221 + + + + EngineeringUnits + + i=68 + i=78 + i=25225 + + + + + i=888 + + + + http://www.opcfoundation.org/UA/units/un/cefact + 4337968 + + en + bit/s + + + en + bit per second + + + + + + + + <InterfaceName> + + i=24148 + i=58 + i=11508 + i=25221 + + + + PriorityMappingTableType + BNM Priority Mapping 2 + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.5.2/#5.5.2.2 + + i=25228 + i=25229 + i=25231 + i=58 + + + + PriorityMapppingEntries + + i=68 + i=78 + i=25227 + + + + AddPriorityMappingEntry + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.5.2/#5.5.2.3 + + i=25230 + i=80 + i=25227 + + + + InputArguments + + i=68 + i=78 + i=25229 + + + + + + i=297 + + + + MappingUri + + i=12 + + -1 + + + + + + + i=297 + + + + PriorityLabel + + i=12 + + -1 + + + + + + + i=297 + + + + PriorityValue_PCP + + i=3 + + -1 + + + + + + + i=297 + + + + PriorityValue_DSCP + + i=7 + + -1 + + + + + + + + + DeletePriorityMappingEntry + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.5.2/#5.5.2.4 + + i=25232 + i=80 + i=25227 + + + + InputArguments + + i=68 + i=78 + i=25231 + + + + + + i=297 + + + + MappingUri + + i=12 + + -1 + + + + + + + i=297 + + + + PriorityLabel + + i=12 + + -1 + + + + + + + + + UsesPriorityMappingTable + BNM Priority Mapping 2 + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.6.1 + + i=32 + + UsedByNetworkInterface + + + HasLowerLayerInterface + BNM IETF Interface Base Info + https://reference.opcfoundation.org/v105/Core/docs/Part22/5.6.2 + + i=33 + + HasHigherLayerInterface + + + IsExecutableOn + Base Info IsExecutableOn + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.2.2 + + i=32 + + CanExecute + + + Controls + Base Info Controls + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.4.2 + + i=33 + + IsControlledBy + + + Utilizes + Base Info Utilizes + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.5.2 + + i=32 + + IsUtilizedBy + + + IsExecutingOn + Base Info IsExecutingOn + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.3.2 + + i=25255 + + Executes + + + Requires + Base Info Requires + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.6.2 + + i=33 + + IsRequiredBy + + + IsPhysicallyConnectedTo + Base Info IsPhysicallyConnectedTo + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.7.2 + + i=32 + + + + RepresentsSameEntityAs + Base Info RepresentsSameEntityAs + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.8.2 + + i=32 + + + + RepresentsSameHardwareAs + Base Info RepresentsSameHardwareAs + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.9.2 + + i=25258 + + + + RepresentsSameFunctionalityAs + Base Info RepresentsSameFunctionalityAs + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.10.2 + + i=25258 + + + + IsHostedBy + Base Info IsHostedBy + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.11.2 + + i=25255 + + Hosts + + + HasPhysicalComponent + Base Info HasPhysicalComponent + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.12.2 + + i=47 + + PhysicalComponentOf + + + HasContainedComponent + Base Info HasContainedComponent + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.13.2 + + i=25262 + + ContainedComponentOf + + + HasAttachedComponent + Base Info HasAttachedComponent + https://reference.opcfoundation.org/v105/Core/docs/Part23/4.14.2 + + i=25262 + + AttachedComponentOf + + + HasReferenceDescription + Base Info ReferenceDescription + https://reference.opcfoundation.org/v105/Core/docs/Part23/5.4.1 + + i=34 + + ReferenceDescriptionOf + + + ReferenceDescriptionVariableType + Base Info ReferenceDescription + https://reference.opcfoundation.org/v105/Core/docs/Part23/5.3.1 + + i=32658 + i=63 + + + + ReferenceRefinement + + i=68 + i=80 + i=32657 + + + + ReferenceDescriptionDataType + Base Info ReferenceDescription + https://reference.opcfoundation.org/v105/Core/docs/Part23/5.5.1 + + i=22 + + + + + + + + + + ReferenceListEntryDataType + Base Info ReferenceDescription + https://reference.opcfoundation.org/v105/Core/docs/Part23/5.5.2 + + i=22 + + + + + + + + + IdType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.5/#12.2.5.1 + + i=7591 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=256 + + + + + Numeric + + + String + + + Guid + + + Opaque + + + + + + NodeClass + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.5/#12.2.5.2 + + i=11878 + i=29 + + + + No value is specified. + + + The Node is an Object. + + + The Node is a Variable. + + + The Node is a Method. + + + The Node is an ObjectType. + + + The Node is a VariableType. + + + The Node is a ReferenceType. + + + The Node is a DataType. + + + The Node is a View. + + + + + EnumValues + + i=68 + i=257 + + + + + + i=7616 + + + + 0 + + Unspecified + + + No value is specified. + + + + + + + i=7616 + + + + 1 + + Object + + + The Node is an Object. + + + + + + + i=7616 + + + + 2 + + Variable + + + The Node is a Variable. + + + + + + + i=7616 + + + + 4 + + Method + + + The Node is a Method. + + + + + + + i=7616 + + + + 8 + + ObjectType + + + The Node is an ObjectType. + + + + + + + i=7616 + + + + 16 + + VariableType + + + The Node is a VariableType. + + + + + + + i=7616 + + + + 32 + + ReferenceType + + + The Node is a ReferenceType. + + + + + + + i=7616 + + + + 64 + + DataType + + + The Node is a DataType. + + + + + + + i=7616 + + + + 128 + + View + + + The Node is a View. + + + + + + + + + PermissionType + https://reference.opcfoundation.org/v105/Core/docs/Part3/8.55 + + i=15030 + i=7 + + + + + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=94 + + + + + Browse + + + ReadRolePermissions + + + WriteAttribute + + + WriteRolePermissions + + + WriteHistorizing + + + Read + + + Write + + + ReadHistory + + + InsertHistory + + + ModifyHistory + + + DeleteHistory + + + ReceiveEvents + + + Call + + + AddReference + + + RemoveReference + + + DeleteNode + + + AddNode + + + + + + AccessLevelType + https://reference.opcfoundation.org/v105/Core/docs/Part3/8.57 + + i=15032 + i=3 + + + + + + + + + + + + + OptionSetValues + + i=68 + i=15031 + + + + + CurrentRead + + + CurrentWrite + + + HistoryRead + + + HistoryWrite + + + SemanticChange + + + StatusWrite + + + TimestampWrite + + + + + + AccessLevelExType + https://reference.opcfoundation.org/v105/Core/docs/Part3/8.58 + + i=15407 + i=7 + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=15406 + + + + + CurrentRead + + + CurrentWrite + + + HistoryRead + + + HistoryWrite + + + SemanticChange + + + StatusWrite + + + TimestampWrite + + + Reserved + + + NonatomicRead + + + NonatomicWrite + + + WriteFullArrayOnly + + + NoSubDataTypes + + + NonVolatile + + + Constant + + + + + + EventNotifierType + https://reference.opcfoundation.org/v105/Core/docs/Part3/8.59 + + i=15034 + i=3 + + + + + + + + + OptionSetValues + + i=68 + i=15033 + + + + + SubscribeToEvents + + + Reserved + + + HistoryRead + + + HistoryWrite + + + + + + AccessRestrictionType + Security Role Server Base 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.13 + + i=15035 + i=5 + + + + + + + + + + OptionSetValues + + i=68 + i=95 + + + + + SigningRequired + + + EncryptionRequired + + + SessionRequired + + + ApplyRestrictionsToBrowse + + + + + + RolePermissionType + Security Role Server Base 2 + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.9 + + i=22 + + + + + + + + DataTypeDefinition + Address Space DataTypeDefinition Attribute + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.3 + + i=22 + + + + + StructureType + Address Space DataTypeDefinition Attribute + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.5/#12.2.5.3 + + i=14528 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=98 + + + + + Structure + + + StructureWithOptionalFields + + + Union + + + StructureWithSubtypedValues + + + UnionWithSubtypedValues + + + + + + StructureField + Address Space DataTypeDefinition Attribute + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.10 + + i=22 + + + + + + + + + + + + + StructureDefinition + Address Space DataTypeDefinition Attribute + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.5 + + i=97 + + + + + + + + + + EnumDefinition + Address Space DataTypeDefinition Attribute + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.4 + + i=97 + + + + + + + Argument + Base Info Method Argument DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.1 + + i=22 + + + + + + + + + + + EnumValueType + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.6 + + i=22 + + + + + + + + + EnumField + Address Space DataTypeDefinition Attribute + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.7 + + i=7594 + + + + + + + OptionSet + Base Info OptionSet DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.8 + + i=22 + + + + + + + + NormalizedString + Base Info NormalizedString DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.11/#12.2.11.2 + + i=12 + + + + DecimalString + Base Info DecimalString DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.11/#12.2.11.3 + + i=12 + + + + DurationString + Base Info Date DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.11/#12.2.11.4 + + i=12 + + + + TimeString + Base Info Date DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.11/#12.2.11.5 + + i=12 + + + + DateString + Base Info Date DataTypes + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.11/#12.2.11.6 + + i=12 + + + + Duration + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.9/#12.2.9.3 + + i=11 + + + + UtcTime + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.4/#12.2.4.1 + + i=13 + + + + LocaleId + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.11/#12.2.11.1 + + i=12 + + + + TimeZoneDataType + Base Info LocalTime + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.2.12/#12.2.12.11 + + i=22 + + + + + + + + Index + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.18 + + i=7 + + + + IntegerId + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.19 + + i=7 + + + + ApplicationType + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.4 + + i=7597 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=307 + + + + + Server + + + Client + + + ClientAndServer + + + DiscoveryServer + + + + + + ApplicationDescription + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.3 + + i=22 + + + + + + + + + + + + + VersionTime + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.16 + + i=7 + + + + ServerOnNetwork + https://reference.opcfoundation.org/v105/Core/docs/Part4/5.4.3/#5.4.3.2 + + i=22 + + + + + + + + + + ApplicationInstanceCertificate + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.3 + + i=15 + + + + MessageSecurityMode + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.10 + + i=7595 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=302 + + + + + Invalid + + + None + + + Sign + + + SignAndEncrypt + + + + + + UserTokenType + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.43 + + i=7596 + i=29 + + + + + + + + + + EnumStrings + + i=68 + i=303 + + + + + Anonymous + + + UserName + + + Certificate + + + IssuedToken + + + + + + UserTokenPolicy + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.42 + + i=22 + + + + + + + + + + + EndpointDescription + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.14 + + i=22 + + + + + + + + + + + + + + RegisteredServer + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.32 + + i=22 + + + + + + + + + + + + + + DiscoveryConfiguration + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.13.1 + + i=22 + + + + + MdnsDiscoveryConfiguration + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.13.2 + + i=12890 + + + + + + + + SecurityTokenRequestType + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.12 + + i=7598 + i=29 + + + + + + + + EnumStrings + + i=68 + i=315 + + + + + Issue + + + Renew + + + + + + SignedSoftwareCertificate + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.13 + + i=22 + + + + + + + + SessionAuthenticationToken + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.36 + + i=17 + + + + UserIdentityToken + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.15 + + i=22 + + + + + + + AnonymousIdentityToken + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.15/#12.3.15.1 + + i=316 + + + + + UserNameIdentityToken + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.15/#12.3.15.3 + + i=316 + + + + + + + + + X509IdentityToken + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.15/#12.3.15.4 + + i=316 + + + + + + + IssuedIdentityToken + Auditing Connections + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.15/#12.3.15.2 + + i=316 + + + + + + + + NodeAttributesMask + + i=11881 + i=29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EnumValues + + i=68 + i=348 + + + + + + i=7616 + + + + 0 + + None + + + + + + + i=7616 + + + + 1 + + AccessLevel + + + + + + + i=7616 + + + + 2 + + ArrayDimensions + + + + + + + i=7616 + + + + 4 + + BrowseName + + + + + + + i=7616 + + + + 8 + + ContainsNoLoops + + + + + + + i=7616 + + + + 16 + + DataType + + + + + + + i=7616 + + + + 32 + + Description + + + + + + + i=7616 + + + + 64 + + DisplayName + + + + + + + i=7616 + + + + 128 + + EventNotifier + + + + + + + i=7616 + + + + 256 + + Executable + + + + + + + i=7616 + + + + 512 + + Historizing + + + + + + + i=7616 + + + + 1024 + + InverseName + + + + + + + i=7616 + + + + 2048 + + IsAbstract + + + + + + + i=7616 + + + + 4096 + + MinimumSamplingInterval + + + + + + + i=7616 + + + + 8192 + + NodeClass + + + + + + + i=7616 + + + + 16384 + + NodeId + + + + + + + i=7616 + + + + 32768 + + Symmetric + + + + + + + i=7616 + + + + 65536 + + UserAccessLevel + + + + + + + i=7616 + + + + 131072 + + UserExecutable + + + + + + + i=7616 + + + + 262144 + + UserWriteMask + + + + + + + i=7616 + + + + 524288 + + ValueRank + + + + + + + i=7616 + + + + 1048576 + + WriteMask + + + + + + + i=7616 + + + + 2097152 + + Value + + + + + + + i=7616 + + + + 4194304 + + DataTypeDefinition + + + + + + + i=7616 + + + + 8388608 + + RolePermissions + + + + + + + i=7616 + + + + 16777216 + + AccessRestrictions + + + + + + + i=7616 + + + + 33554431 + + All + + + + + + + i=7616 + + + + 26501220 + + BaseNode + + + + + + + i=7616 + + + + 26501348 + + Object + + + + + + + i=7616 + + + + 26503268 + + ObjectType + + + + + + + i=7616 + + + + 26571383 + + Variable + + + + + + + i=7616 + + + + 28600438 + + VariableType + + + + + + + i=7616 + + + + 26632548 + + Method + + + + + + + i=7616 + + + + 26537060 + + ReferenceType + + + + + + + i=7616 + + + + 26501356 + + View + + + + + + + + + AddNodesItem + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.1 + + i=22 + + + + + + + + + + + + + AddReferencesItem + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.2 + + i=22 + + + + + + + + + + + + DeleteNodesItem + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.6 + + i=22 + + + + + + + + DeleteReferencesItem + Auditing NodeManagement + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.7 + + i=22 + + + + + + + + + + + AttributeWriteMask + https://reference.opcfoundation.org/v105/Core/docs/Part3/8.60 + + i=15036 + i=7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OptionSetValues + + i=68 + i=347 + + + + + AccessLevel + + + ArrayDimensions + + + BrowseName + + + ContainsNoLoops + + + DataType + + + Description + + + DisplayName + + + EventNotifier + + + Executable + + + Historizing + + + InverseName + + + IsAbstract + + + MinimumSamplingInterval + + + NodeClass + + + NodeId + + + Symmetric + + + UserAccessLevel + + + UserExecutable + + + UserWriteMask + + + ValueRank + + + WriteMask + + + ValueForVariableType + + + DataTypeDefinition + + + RolePermissions + + + AccessRestrictions + + + AccessLevelEx + + + + + + ContinuationPoint + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.9 + + i=15 + + + + RelativePathElement + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.31 + + i=22 + + + + + + + + + + RelativePath + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.31 + + i=22 + + + + + + + Counter + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.8 + + i=7 + + + + NumericRange + Base Info Base Types + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.11 + + i=12 + + + + EndpointConfiguration + + i=22 + + + + + + + + + + + + + + + FilterOperator + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.7.3 + + i=7605 + i=29 + + + + + + + + + + + + + + + + + + + + + + + + EnumStrings + + i=68 + i=576 + + + + + Equals + + + IsNull + + + GreaterThan + + + LessThan + + + GreaterThanOrEqual + + + LessThanOrEqual + + + Like + + + Not + + + Between + + + InList + + + And + + + Or + + + Cast + + + InView + + + OfType + + + RelatedTo + + + BitwiseAnd + + + BitwiseOr + + + + + + ContentFilterElement + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.7.1 + + i=22 + + + + + + + + ContentFilter + Base Info ContentFilter + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.3.4 + + i=22 + + + + + + + FilterOperand + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.7.4 + + i=22 + + + + + ElementOperand + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.7.4/#7.7.4.2 + + i=589 + + + + + + + LiteralOperand + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.7.4/#7.7.4.3 + + i=589 + + + + + + + AttributeOperand + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.7.4/#7.7.4.4 + + i=589 + + + + + + + + + + + SimpleAttributeOperand + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.7.4/#7.7.4.5 + + i=589 + + + + + + + + + + HistoryEvent + https://reference.opcfoundation.org/v104/Core/docs/Part11/6.5.4 + + i=22 + + + + + + + HistoryUpdateType + https://reference.opcfoundation.org/v105/Core/docs/Part11/6.6 + + i=11884 + i=29 + + + + + + + + + + EnumValues + + i=68 + i=11234 + + + + + + i=7616 + + + + 1 + + Insert + + + + + + + i=7616 + + + + 2 + + Replace + + + + + + + i=7616 + + + + 3 + + Update + + + + + + + i=7616 + + + + 4 + + Delete + + + + + + + + + PerformUpdateType + https://reference.opcfoundation.org/v105/Core/docs/Part11/6.7 + + i=11885 + i=29 + + + + + + + + + + EnumValues + + i=68 + i=11293 + + + + + + i=7616 + + + + 1 + + Insert + + + + + + + i=7616 + + + + 2 + + Replace + + + + + + + i=7616 + + + + 3 + + Update + + + + + + + i=7616 + + + + 4 + + Remove + + + + + + + + + MonitoringFilter + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.22.1 + + i=22 + + + + + EventFilter + https://reference.opcfoundation.org/v105/Core/docs/Part4/7.22.3 + + i=719 + + + + + + + + AggregateConfiguration + https://reference.opcfoundation.org/v105/Core/docs/Part11/6.4.4/#6.4.4.1 + + i=22 + + + + + + + + + + + HistoryEventFieldList + + i=22 + + + + + + + BuildInfo + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.4 + + i=22 + + + + + + + + + + + + RedundancySupport + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.5 + + i=7611 + i=29 + + + + + + + + + + + + EnumStrings + + i=68 + i=851 + + + + + None + + + Cold + + + Warm + + + Hot + + + Transparent + + + HotAndMirrored + + + + + + ServerState + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.6 + + i=7612 + i=29 + + + + + + + + + + + + + + EnumStrings + + i=68 + i=852 + + + + + Running + + + Failed + + + NoConfiguration + + + Suspended + + + Shutdown + + + Test + + + CommunicationFault + + + Unknown + + + + + + RedundantServerDataType + Redundancy Server Transparent + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.7 + + i=22 + + + + + + + + + EndpointUrlListDataType + Redundancy Server + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.20 + + i=22 + + + + + + + NetworkGroupDataType + Redundancy Server + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.19 + + i=22 + + + + + + + + SamplingIntervalDiagnosticsDataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.8 + + i=22 + + + + + + + + + + ServerDiagnosticsSummaryDataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.9 + + i=22 + + + + + + + + + + + + + + + + + + ServerStatusDataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.10 + + i=22 + + + + + + + + + + + + SessionDiagnosticsDataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.11 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SessionSecurityDiagnosticsDataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.12 + + i=22 + + + + + + + + + + + + + + + ServiceCounterDataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.13 + + i=22 + + + + + + + + StatusResult + Base Info StatusResult DataType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.14 + + i=22 + + + + + + + + SubscriptionDiagnosticsDataType + Base Info ServerType + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.15 + + i=22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ModelChangeStructureDataType + Base Info Model Change General + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.16 + + i=22 + + + + + + + + + SemanticChangeStructureDataType + Base Info SemanticChange + https://reference.opcfoundation.org/v105/Core/docs/Part5/12.17 + + i=22 + + + + + + + + Range + Base Info Range DataType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.6.2 + + i=22 + + + + + + + + EUInformation + Base Info EUInformation + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.6.3/#5.6.3.2 + + i=22 + + + + + + + + + + AxisScaleEnumeration + Data Access ArrayItem2Type + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.6.7 + + i=12078 + i=29 + + + + + + + + + EnumStrings + + i=68 + i=12077 + + + + + Linear + + + Log + + + Ln + + + + + + ComplexNumberType + Data Access Complex Number + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.6.4 + + i=22 + + + + + + + + DoubleComplexNumberType + Data Access DoubleComplex Number + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.6.5 + + i=22 + + + + + + + + AxisInformation + Data Access AxisInformationType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.6.6 + + i=22 + + + + + + + + + + + XVType + Data Access XYArrayItemType + https://reference.opcfoundation.org/v105/Core/docs/Part8/5.6.8 + + i=22 + + + + + + + + ProgramDiagnosticDataType + + i=22 + + + + + + + + + + + + + + + + ProgramDiagnostic2DataType + Program Basic + https://reference.opcfoundation.org/v105/Core/docs/Part10/5.2.8 + + i=22 + + + + + + + + + + + + + + + + + + Annotation + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.5 + + i=22 + + + + + + + + + ExceptionDeviationFormat + https://reference.opcfoundation.org/v105/Core/docs/Part11/5.2.2 + + i=7614 + i=29 + + + + + + + + + + + EnumStrings + + i=68 + i=890 + + + + + AbsoluteValue + + + PercentOfValue + + + PercentOfRange + + + PercentOfEURange + + + Unknown + + + + + + Default Binary + + i=12756 + i=12770 + i=76 + + + + Default Binary + + i=14533 + i=14873 + i=76 + + + + Default Binary + + i=16313 + i=17538 + i=76 + + + + Default Binary + + i=17548 + i=17550 + i=76 + + + + Default Binary + + i=15528 + i=15734 + i=76 + + + + Default Binary + + i=18806 + i=18824 + i=76 + + + + Default Binary + + i=18807 + i=18827 + i=76 + + + + Default Binary + + i=18808 + i=18830 + i=76 + + + + Default Binary + + i=18809 + i=18833 + i=76 + + + + Default Binary + + i=18810 + i=18836 + i=76 + + + + Default Binary + + i=18811 + i=18839 + i=76 + + + + Default Binary + + i=18812 + i=18842 + i=76 + + + + Default Binary + + i=18813 + i=18845 + i=76 + + + + Default Binary + + i=18814 + i=18848 + i=76 + + + + Default Binary + + i=15634 + i=15738 + i=76 + + + + Default Binary + + i=23498 + i=23514 + i=76 + + + + Default Binary + + i=12554 + i=12681 + i=76 + + + + Default Binary + + i=32285 + i=32383 + i=76 + + + + Default Binary + + i=15534 + i=15741 + i=76 + + + + Default Binary + + i=14525 + i=14855 + i=76 + + + + Default Binary + + i=15487 + i=15599 + i=76 + + + + Default Binary + + i=15488 + i=15602 + i=76 + + + + Default Binary + + i=15005 + i=15501 + i=76 + + + + Default Binary + + i=15006 + i=15521 + i=76 + + + + Default Binary + + i=24105 + i=24111 + i=76 + + + + Default Binary + + i=24106 + i=24114 + i=76 + + + + Default Binary + + i=24107 + i=24117 + i=76 + + + + Default Binary + + i=14523 + i=14849 + i=76 + + + + Default Binary + + i=14524 + i=14852 + i=76 + + + + Default Binary + + i=14593 + i=14876 + i=76 + + + + Default Binary + + i=15578 + i=15766 + i=76 + + + + Default Binary + + i=15580 + i=15769 + i=76 + + + + Default Binary + + i=14273 + i=14324 + i=76 + + + + Default Binary + + i=15581 + i=15772 + i=76 + + + + Default Binary + + i=15582 + i=15775 + i=76 + + + + Default Binary + + i=25269 + i=25533 + i=76 + + + + Default Binary + + i=15597 + i=15778 + i=76 + + + + Default Binary + + i=15598 + i=15781 + i=76 + + + + Default Binary + + i=15605 + i=15784 + i=76 + + + + Default Binary + + i=15609 + i=15787 + i=76 + + + + Default Binary + + i=15480 + i=21156 + i=76 + + + + Default Binary + + i=15611 + i=15793 + i=76 + + + + Default Binary + + i=15616 + i=15854 + i=76 + + + + Default Binary + + i=15617 + i=15857 + i=76 + + + + Default Binary + + i=15618 + i=15860 + i=76 + + + + Default Binary + + i=15502 + i=21159 + i=76 + + + + Default Binary + + i=15510 + i=21162 + i=76 + + + + Default Binary + + i=15520 + i=21165 + i=76 + + + + Default Binary + + i=15621 + i=15866 + i=76 + + + + Default Binary + + i=15622 + i=15869 + i=76 + + + + Default Binary + + i=15623 + i=15872 + i=76 + + + + Default Binary + + i=15628 + i=15877 + i=76 + + + + Default Binary + + i=15629 + i=15880 + i=76 + + + + Default Binary + + i=15630 + i=15883 + i=76 + + + + Default Binary + + i=15631 + i=15886 + i=76 + + + + Default Binary + + i=14744 + i=21002 + i=76 + + + + Default Binary + + i=15635 + i=15889 + i=76 + + + + Default Binary + + i=15530 + i=21168 + i=76 + + + + Default Binary + + i=23599 + i=23870 + i=76 + + + + Default Binary + + i=23600 + i=23873 + i=76 + + + + Default Binary + + i=23601 + i=23876 + i=76 + + + + Default Binary + + i=25270 + i=25536 + i=76 + + + + Default Binary + + i=23602 + i=23879 + i=76 + + + + Default Binary + + i=15645 + i=15895 + i=76 + + + + Default Binary + + i=15652 + i=15898 + i=76 + + + + Default Binary + + i=15653 + i=15919 + i=76 + + + + Default Binary + + i=15657 + i=15922 + i=76 + + + + Default Binary + + i=15664 + i=15925 + i=76 + + + + Default Binary + + i=15665 + i=15931 + i=76 + + + + Default Binary + + i=23603 + i=23882 + i=76 + + + + Default Binary + + i=23604 + i=23885 + i=76 + + + + Default Binary + + i=23605 + i=23888 + i=76 + + + + Default Binary + + i=23608 + i=23897 + i=76 + + + + Default Binary + + i=23609 + i=23900 + i=76 + + + + Default Binary + + i=17467 + i=17469 + i=76 + + + + Default Binary + + i=23612 + i=23909 + i=76 + + + + Default Binary + + i=15532 + i=21171 + i=76 + + + + Default Binary + + i=23613 + i=23912 + i=76 + + + + Default Binary + + i=23614 + i=23915 + i=76 + + + + Default Binary + + i=15007 + i=15524 + i=76 + + + + Default Binary + + i=15667 + i=15940 + i=76 + + + + Default Binary + + i=15669 + i=15943 + i=76 + + + + Default Binary + + i=15670 + i=15946 + i=76 + + + + Default Binary + + i=25519 + i=25539 + i=76 + + + + Default Binary + + i=25520 + i=25542 + i=76 + + + + Default Binary + + i=23468 + i=23502 + i=76 + + + + Default Binary + + i=24281 + i=24293 + i=76 + + + + Default Binary + + i=25220 + i=25240 + i=76 + + + + Default Binary + + i=32659 + i=32663 + i=76 + + + + Default Binary + + i=32660 + i=32666 + i=76 + + + + Default Binary + + i=96 + i=16131 + i=76 + + + + Default Binary + + i=97 + i=18178 + i=76 + + + + Default Binary + + i=101 + i=18181 + i=76 + + + + Default Binary + + i=99 + i=18184 + i=76 + + + + Default Binary + + i=100 + i=18187 + i=76 + + + + Default Binary + + i=296 + i=7650 + i=76 + + + + Default Binary + + i=7594 + i=7656 + i=76 + + + + Default Binary + + i=102 + i=14870 + i=76 + + + + Default Binary + + i=12755 + i=12767 + i=76 + + + + Default Binary + + i=8912 + i=8914 + i=76 + + + + Default Binary + + i=308 + i=7665 + i=76 + + + + Default Binary + + i=12189 + i=12213 + i=76 + + + + Default Binary + + i=304 + i=7662 + i=76 + + + + Default Binary + + i=312 + i=7668 + i=76 + + + + Default Binary + + i=432 + i=7782 + i=76 + + + + Default Binary + + i=12890 + i=12902 + i=76 + + + + Default Binary + + i=12891 + i=12905 + i=76 + + + + Default Binary + + i=344 + i=7698 + i=76 + + + + Default Binary + + i=316 + i=7671 + i=76 + + + + Default Binary + + i=319 + i=7674 + i=76 + + + + Default Binary + + i=322 + i=7677 + i=76 + + + + Default Binary + + i=325 + i=7680 + i=76 + + + + Default Binary + + i=938 + i=7683 + i=76 + + + + Default Binary + + i=376 + i=7728 + i=76 + + + + Default Binary + + i=379 + i=7731 + i=76 + + + + Default Binary + + i=382 + i=7734 + i=76 + + + + Default Binary + + i=385 + i=7737 + i=76 + + + + Default Binary + + i=537 + i=12718 + i=76 + + + + Default Binary + + i=540 + i=12721 + i=76 + + + + Default Binary + + i=331 + i=7686 + i=76 + + + + Default Binary + + i=583 + i=7929 + i=76 + + + + Default Binary + + i=586 + i=7932 + i=76 + + + + Default Binary + + i=589 + i=7935 + i=76 + + + + Default Binary + + i=592 + i=7938 + i=76 + + + + Default Binary + + i=595 + i=7941 + i=76 + + + + Default Binary + + i=598 + i=7944 + i=76 + + + + Default Binary + + i=601 + i=7947 + i=76 + + + + Default Binary + + i=659 + i=8004 + i=76 + + + + Default Binary + + i=719 + i=8067 + i=76 + + + + Default Binary + + i=725 + i=8073 + i=76 + + + + Default Binary + + i=948 + i=8076 + i=76 + + + + Default Binary + + i=920 + i=8172 + i=76 + + + + Default Binary + + i=338 + i=7692 + i=76 + + + + Default Binary + + i=853 + i=8208 + i=76 + + + + Default Binary + + i=11943 + i=11959 + i=76 + + + + Default Binary + + i=11944 + i=11962 + i=76 + + + + Default Binary + + i=856 + i=8211 + i=76 + + + + Default Binary + + i=859 + i=8214 + i=76 + + + + Default Binary + + i=862 + i=8217 + i=76 + + + + Default Binary + + i=865 + i=8220 + i=76 + + + + Default Binary + + i=868 + i=8223 + i=76 + + + + Default Binary + + i=871 + i=8226 + i=76 + + + + Default Binary + + i=299 + i=7659 + i=76 + + + + Default Binary + + i=874 + i=8229 + i=76 + + + + Default Binary + + i=877 + i=8232 + i=76 + + + + Default Binary + + i=897 + i=8235 + i=76 + + + + Default Binary + + i=884 + i=8238 + i=76 + + + + Default Binary + + i=887 + i=8241 + i=76 + + + + Default Binary + + i=12171 + i=12183 + i=76 + + + + Default Binary + + i=12172 + i=12186 + i=76 + + + + Default Binary + + i=12079 + i=12091 + i=76 + + + + Default Binary + + i=12080 + i=12094 + i=76 + + + + Default Binary + + i=894 + i=8247 + i=76 + + + + Default Binary + + i=24033 + i=24035 + i=76 + + + + Default Binary + + i=891 + i=8244 + i=76 + + + + Opc.Ua + + i=7619 + i=15037 + i=12770 + i=14873 + i=17538 + i=17550 + i=15734 + i=18824 + i=18827 + i=18830 + i=18833 + i=18836 + i=18839 + i=18842 + i=18845 + i=18848 + i=15738 + i=23514 + i=12681 + i=32383 + i=15741 + i=14855 + i=15599 + i=15602 + i=15501 + i=15521 + i=24111 + i=24114 + i=24117 + i=14849 + i=14852 + i=14876 + i=15766 + i=15769 + i=14324 + i=15772 + i=15775 + i=25533 + i=15778 + i=15781 + i=15784 + i=15787 + i=21156 + i=15793 + i=15854 + i=15857 + i=15860 + i=21159 + i=21162 + i=21165 + i=15866 + i=15869 + i=15872 + i=15877 + i=15880 + i=15883 + i=15886 + i=21002 + i=15889 + i=21168 + i=23870 + i=23873 + i=23876 + i=25536 + i=23879 + i=15895 + i=15898 + i=15919 + i=15922 + i=15925 + i=15931 + i=23882 + i=23885 + i=23888 + i=23897 + i=23900 + i=17469 + i=23909 + i=21171 + i=23912 + i=23915 + i=15524 + i=15940 + i=15943 + i=15946 + i=25539 + i=25542 + i=23502 + i=24293 + i=25240 + i=32663 + i=32666 + i=16131 + i=18178 + i=18181 + i=18184 + i=18187 + i=7650 + i=7656 + i=14870 + i=12767 + i=8914 + i=7665 + i=12213 + i=7662 + i=7668 + i=7782 + i=12902 + i=12905 + i=7698 + i=7671 + i=7674 + i=7677 + i=7680 + i=7683 + i=7728 + i=7731 + i=7734 + i=7737 + i=12718 + i=12721 + i=7686 + i=7929 + i=7932 + i=7935 + i=7938 + i=7941 + i=7944 + i=7947 + i=8004 + i=8067 + i=8073 + i=8076 + i=8172 + i=7692 + i=8208 + i=11959 + i=11962 + i=8211 + i=8214 + i=8217 + i=8220 + i=8223 + i=8226 + i=7659 + i=8229 + i=8232 + i=8235 + i=8238 + i=8241 + i=12183 + i=12186 + i=12091 + i=12094 + i=8247 + i=24035 + i=8244 + i=93 + i=72 + + + PG9wYzpUeXBlRGljdGlvbmFyeQ0KICB4bWxuczpvcGM9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9y +Zy9CaW5hcnlTY2hlbWEvIg0KICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1M +U2NoZW1hLWluc3RhbmNlIg0KICB4bWxuczp1YT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VB +LyINCiAgeG1sbnM6dG5zPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvIg0KICBEZWZhdWx0 +Qnl0ZU9yZGVyPSJMaXR0bGVFbmRpYW4iDQogIFRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wY2Zv +dW5kYXRpb24ub3JnL1VBLyINCj4NCg0KICA8b3BjOkltcG9ydCBOYW1lc3BhY2U9Imh0dHA6Ly9v +cGNmb3VuZGF0aW9uLm9yZy9CaW5hcnlTY2hlbWEvIiAvPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iWG1sRWxlbWVudCI+DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkFuIFhNTCBlbGVt +ZW50IGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcuPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ikxlbmd0aCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0ib3BjOkNoYXIiIExlbmd0aEZpZWxkPSJMZW5n +dGgiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUg +TmFtZT0iTm9kZUlkVHlwZSIgTGVuZ3RoSW5CaXRzPSI2Ij4NCiAgICA8b3BjOkRvY3VtZW50YXRp +b24+VGhlIHBvc3NpYmxlIGVuY29kaW5ncyBmb3IgYSBOb2RlSWQgdmFsdWUuPC9vcGM6RG9jdW1l +bnRhdGlvbj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJUd29CeXRlIiBWYWx1ZT0i +MCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGb3VyQnl0ZSIgVmFsdWU9IjEi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTnVtZXJpYyIgVmFsdWU9IjIiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RyaW5nIiBWYWx1ZT0iMyIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJHdWlkIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCeXRlU3RyaW5nIiBWYWx1ZT0iNSIgLz4NCiAgPC9vcGM6 +RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUd29CeXRlTm9k +ZUlkIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklkZW50aWZpZXIiIFR5cGVOYW1lPSJvcGM6Qnl0 +ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJGb3VyQnl0ZU5vZGVJZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VJbmRl +eCIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSWRlbnRpZmll +ciIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTnVtZXJpY05vZGVJZCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOYW1lc3BhY2VJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJJZGVudGlmaWVyIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTdHJpbmdO +b2RlSWQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlSW5kZXgiIFR5cGVOYW1lPSJv +cGM6VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSWRlbnRpZmllciIgVHlwZU5hbWU9 +Im9wYzpDaGFyQXJyYXkiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iR3VpZE5vZGVJZCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1l +c3BhY2VJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJJZGVudGlmaWVyIiBUeXBlTmFtZT0ib3BjOkd1aWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnl0ZVN0cmluZ05vZGVJZCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MTYi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJZGVudGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5dGVT +dHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iTm9kZUlkIj4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QW4gaWRlbnRpZmllciBm +b3IgYSBub2RlIGluIGEgVUEgc2VydmVyIGFkZHJlc3Mgc3BhY2UuPC9vcGM6RG9jdW1lbnRhdGlv +bj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWRU +eXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJp +dCIgTGVuZ3RoPSIyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHdvQnl0ZSIgVHlwZU5hbWU9 +InVhOlR3b0J5dGVOb2RlSWQiIFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0i +MCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZvdXJCeXRlIiBUeXBlTmFtZT0idWE6Rm91ckJ5 +dGVOb2RlSWQiIFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0iMSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik51bWVyaWMiIFR5cGVOYW1lPSJ1YTpOdW1lcmljTm9kZUlkIiBT +d2l0Y2hGaWVsZD0iTm9kZUlkVHlwZSIgU3dpdGNoVmFsdWU9IjIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTdHJpbmciIFR5cGVOYW1lPSJ1YTpTdHJpbmdOb2RlSWQiIFN3aXRjaEZpZWxkPSJO +b2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikd1aWQi +IFR5cGVOYW1lPSJ1YTpHdWlkTm9kZUlkIiBTd2l0Y2hGaWVsZD0iTm9kZUlkVHlwZSIgU3dpdGNo +VmFsdWU9IjQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCeXRlU3RyaW5nIiBUeXBlTmFtZT0i +dWE6Qnl0ZVN0cmluZ05vZGVJZCIgU3dpdGNoRmllbGQ9Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVl +PSI1IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkV4cGFuZGVkTm9kZUlkIj4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QW4gaWRlbnRp +ZmllciBmb3IgYSBub2RlIGluIGEgVUEgc2VydmVyIGFkZHJlc3Mgc3BhY2UgcXVhbGlmaWVkIHdp +dGggYSBjb21wbGV0ZSBuYW1lc3BhY2Ugc3RyaW5nLjwvb3BjOkRvY3VtZW50YXRpb24+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb2RlSWRUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkVHlwZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlckluZGV4U3BlY2lmaWVkIiBUeXBlTmFtZT0ib3Bj +OkJpdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZVVSSVNwZWNpZmllZCIgVHlw +ZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUd29CeXRlIiBUeXBlTmFt +ZT0idWE6VHdvQnl0ZU5vZGVJZCIgU3dpdGNoRmllbGQ9Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVl +PSIwIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRm91ckJ5dGUiIFR5cGVOYW1lPSJ1YTpGb3Vy +Qnl0ZU5vZGVJZCIgU3dpdGNoRmllbGQ9Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVlPSIxIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTnVtZXJpYyIgVHlwZU5hbWU9InVhOk51bWVyaWNOb2RlSWQi +IFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0Y2hWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlN0cmluZyIgVHlwZU5hbWU9InVhOlN0cmluZ05vZGVJZCIgU3dpdGNoRmllbGQ9 +Ik5vZGVJZFR5cGUiIFN3aXRjaFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3Vp +ZCIgVHlwZU5hbWU9InVhOkd1aWROb2RlSWQiIFN3aXRjaEZpZWxkPSJOb2RlSWRUeXBlIiBTd2l0 +Y2hWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJ5dGVTdHJpbmciIFR5cGVOYW1l +PSJ1YTpCeXRlU3RyaW5nTm9kZUlkIiBTd2l0Y2hGaWVsZD0iTm9kZUlkVHlwZSIgU3dpdGNoVmFs +dWU9IjUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3BhY2VVUkkiIFR5cGVOYW1lPSJv +cGM6Q2hhckFycmF5IiBTd2l0Y2hGaWVsZD0iTmFtZXNwYWNlVVJJU3BlY2lmaWVkIi8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJJbmRleCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFN3aXRj +aEZpZWxkPSJTZXJ2ZXJJbmRleFNwZWNpZmllZCIvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iU3RhdHVzQ29kZSIgTGVuZ3RoSW5CaXRzPSIzMiIg +Qnl0ZU9yZGVyU2lnbmlmaWNhbnQ9InRydWUiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIDMy +LWJpdCBzdGF0dXMgY29kZSB2YWx1ZS48L29wYzpEb2N1bWVudGF0aW9uPg0KICA8L29wYzpPcGFx +dWVUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGlhZ25vc3RpY0luZm8iPg0K +ICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIHJlY3Vyc2l2ZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBk +aWFnbm9zdGljIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIHN0YXR1cyBjb2RlLjwvb3Bj +OkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTeW1ib2xpY0lkU3BlY2lmaWVk +IiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZVVS +SVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJM +b2NhbGl6ZWRUZXh0U3BlY2lmaWVkIiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IkxvY2FsZVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJBZGRpdGlvbmFsSW5mb1NwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbm5lclN0YXR1c0NvZGVTcGVjaWZpZWQiIFR5cGVO +YW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5uZXJEaWFnbm9zdGljSW5m +b1NwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXNlcnZlZDEiIFR5cGVOYW1lPSJvcGM6Qml0IiBMZW5ndGg9IjEiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTeW1ib2xpY0lkIiBUeXBlTmFtZT0ib3BjOkludDMyIiBTd2l0Y2hGaWVsZD0iU3lt +Ym9saWNJZFNwZWNpZmllZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZVVSSSIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgU3dpdGNoRmllbGQ9Ik5hbWVzcGFjZVVSSVNwZWNpZmllZCIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgU3dp +dGNoRmllbGQ9IkxvY2FsZVNwZWNpZmllZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2Fs +aXplZFRleHQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIFN3aXRjaEZpZWxkPSJMb2NhbGl6ZWRUZXh0 +U3BlY2lmaWVkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWRkaXRpb25hbEluZm8iIFR5cGVO +YW1lPSJvcGM6Q2hhckFycmF5IiBTd2l0Y2hGaWVsZD0iQWRkaXRpb25hbEluZm9TcGVjaWZpZWQi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbm5lclN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpT +dGF0dXNDb2RlIiBTd2l0Y2hGaWVsZD0iSW5uZXJTdGF0dXNDb2RlU3BlY2lmaWVkIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iSW5uZXJEaWFnbm9zdGljSW5mbyIgVHlwZU5hbWU9InVhOkRpYWdu +b3N0aWNJbmZvIiBTd2l0Y2hGaWVsZD0iSW5uZXJEaWFnbm9zdGljSW5mb1NwZWNpZmllZCIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJR +dWFsaWZpZWROYW1lIj4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QSBzdHJpbmcgcXVhbGlmaWVk +IHdpdGggYSBuYW1lc3BhY2UgaW5kZXguPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5hbWVzcGFjZUluZGV4IiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6Q2hhckFycmF5IiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkxvY2FsaXpl +ZFRleHQiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIHN0cmluZyBxdWFsaWZpZWQgd2l0aCBh +IG5hbWVzcGFjZSBpbmRleC48L29wYzpEb2N1bWVudGF0aW9uPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTG9jYWxlU3BlY2lmaWVkIiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlRleHRTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJpdCIgTGVuZ3RoPSI2IiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlIiBUeXBlTmFtZT0ib3BjOkNoYXJBcnJheSIgU3dpdGNo +RmllbGQ9IkxvY2FsZVNwZWNpZmllZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRleHQiIFR5 +cGVOYW1lPSJvcGM6Q2hhckFycmF5IiBTd2l0Y2hGaWVsZD0iVGV4dFNwZWNpZmllZCIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRh +VmFsdWUiPg0KICAgIDxvcGM6RG9jdW1lbnRhdGlvbj5BIHZhbHVlIHdpdGggYW4gYXNzb2NpYXRl +ZCB0aW1lc3RhbXAsIGFuZCBxdWFsaXR5Ljwvb3BjOkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJWYWx1ZVNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlU3BlY2lmaWVkIiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNvdXJjZVRpbWVzdGFtcFNwZWNpZmllZCIgVHlwZU5hbWU9 +Im9wYzpCaXQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJUaW1lc3RhbXBTcGVjaWZp +ZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU291cmNlUGlj +b3NlY29uZHNTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2VydmVyUGljb3NlY29uZHNTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJpdCIgTGVuZ3Ro +PSIyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJ1YTpWYXJpYW50 +IiBTd2l0Y2hGaWVsZD0iVmFsdWVTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +dGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgU3dpdGNoRmllbGQ9IlN0YXR1c0Nv +ZGVTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTb3VyY2VUaW1lc3RhbXAiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIFN3aXRjaEZpZWxkPSJTb3VyY2VUaW1lc3RhbXBTcGVjaWZp +ZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTb3VyY2VQaWNvc2Vjb25kcyIgVHlwZU5hbWU9 +Im9wYzpVSW50MTYiIFN3aXRjaEZpZWxkPSJTb3VyY2VQaWNvc2Vjb25kc1NwZWNpZmllZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclRpbWVzdGFtcCIgVHlwZU5hbWU9Im9wYzpEYXRl +VGltZSIgU3dpdGNoRmllbGQ9IlNlcnZlclRpbWVzdGFtcFNwZWNpZmllZCIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNlcnZlclBpY29zZWNvbmRzIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgU3dp +dGNoRmllbGQ9IlNlcnZlclBpY29zZWNvbmRzU3BlY2lmaWVkIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpEb2N1bWVudGF0aW9uPkEgc2VyaWFsaXplZCBvYmplY3QgcHJlZml4ZWQgd2l0 +aCBpdHMgZGF0YSB0eXBlIGlkZW50aWZpZXIuPC9vcGM6RG9jdW1lbnRhdGlvbj4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlR5cGVJZFNwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJCaW5hcnlCb2R5IiBUeXBlTmFtZT0ib3BjOkJpdCIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlhtbEJvZHkiIFR5cGVOYW1lPSJvcGM6Qml0IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVzZXJ2ZWQxIiBUeXBlTmFtZT0ib3BjOkJpdCIgTGVuZ3RoPSI1IiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVHlwZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQi +IFN3aXRjaEZpZWxkPSJUeXBlSWRTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJC +b2R5TGVuZ3RoIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Qm9keSIgVHlwZU5hbWU9Im9wYzpCeXRlIiBMZW5ndGhGaWVsZD0iQm9keUxlbmd0aCIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWYXJp +YW50Ij4NCiAgICA8b3BjOkRvY3VtZW50YXRpb24+QSB1bmlvbiBvZiBzZXZlcmFsIHR5cGVzLjwv +b3BjOkRvY3VtZW50YXRpb24+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYXJpYW50VHlwZSIgVHlw +ZU5hbWU9Im9wYzpCaXQiIExlbmd0aD0iNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5 +RGltZW5zaW9uc1NwZWNpZmllZCIgVHlwZU5hbWU9Im9wYzpCaXQiIExlbmd0aD0iMSIvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQXJyYXlMZW5ndGhTcGVjaWZpZWQiIFR5cGVOYW1lPSJvcGM6Qml0 +IiBMZW5ndGg9IjEiLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFycmF5TGVuZ3RoIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiBTd2l0Y2hGaWVsZD0iQXJyYXlMZW5ndGhTcGVjaWZpZWQiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJCb29sZWFuIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIExlbmd0aEZp +ZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0i +MSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNCeXRlIiBUeXBlTmFtZT0ib3BjOlNCeXRlIiBM +ZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dpdGNo +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCeXRlIiBUeXBlTmFtZT0ib3BjOkJ5 +dGUiIExlbmd0aEZpZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBT +d2l0Y2hWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkludDE2IiBUeXBlTmFtZT0i +b3BjOkludDE2IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50 +VHlwZSIgU3dpdGNoVmFsdWU9IjQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVSW50MTYiIFR5 +cGVOYW1lPSJvcGM6VUludDE2IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxk +PSJWYXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJ +bnQzMiIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0 +Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSI2IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVUludDMyIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9IkFycmF5TGVu +Z3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSI3IiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSW50NjQiIFR5cGVOYW1lPSJvcGM6SW50NjQiIExlbmd0aEZpZWxkPSJB +cnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0iOCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlVJbnQ2NCIgVHlwZU5hbWU9Im9wYzpVSW50NjQiIExlbmd0 +aEZpZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1 +ZT0iOSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZsb2F0IiBUeXBlTmFtZT0ib3BjOkZsb2F0 +IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dp +dGNoVmFsdWU9IjEwIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRG91YmxlIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFu +dFR5cGUiIFN3aXRjaFZhbHVlPSIxMSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0cmluZyIg +VHlwZU5hbWU9Im9wYzpDaGFyQXJyYXkiIExlbmd0aEZpZWxkPSJBcnJheUxlbmd0aCIgU3dpdGNo +RmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0iMTIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEYXRlVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgTGVuZ3RoRmllbGQ9IkFycmF5 +TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIxMyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikd1aWQiIFR5cGVOYW1lPSJvcGM6R3VpZCIgTGVuZ3RoRmllbGQ9 +IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIxNCIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkJ5dGVTdHJpbmciIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0 +cmluZyIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUi +IFN3aXRjaFZhbHVlPSIxNSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlhtbEVsZW1lbnQiIFR5 +cGVOYW1lPSJ1YTpYbWxFbGVtZW50IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZp +ZWxkPSJWYXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgi +IFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjE3IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRXhwYW5kZWROb2RlSWQiIFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIg +TGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRj +aFZhbHVlPSIxOCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1l +PSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJW +YXJpYW50VHlwZSIgU3dpdGNoVmFsdWU9IjE5IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVh +bGlmaWVkTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIExlbmd0aEZpZWxkPSJBcnJh +eUxlbmd0aCIgU3dpdGNoRmllbGQ9IlZhcmlhbnRUeXBlIiBTd2l0Y2hWYWx1ZT0iMjAiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGl6ZWRUZXh0IiBUeXBlTmFtZT0idWE6TG9jYWxpemVk +VGV4dCIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUi +IFN3aXRjaFZhbHVlPSIyMSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4dGVuc2lvbk9iamVj +dCIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3Ro +IiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIyMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkRhdGFWYWx1ZSIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3RoRmll +bGQ9IkFycmF5TGVuZ3RoIiBTd2l0Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIy +MyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhcmlhbnQiIFR5cGVOYW1lPSJ1YTpWYXJpYW50 +IiBMZW5ndGhGaWVsZD0iQXJyYXlMZW5ndGgiIFN3aXRjaEZpZWxkPSJWYXJpYW50VHlwZSIgU3dp +dGNoVmFsdWU9IjI0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm8iIFR5 +cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9IkFycmF5TGVuZ3RoIiBTd2l0 +Y2hGaWVsZD0iVmFyaWFudFR5cGUiIFN3aXRjaFZhbHVlPSIyNSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIFN3aXRjaEZp +ZWxkPSJBcnJheURpbWVuc2lvbnNTcGVjaWZpZWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJB +cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIExlbmd0aEZpZWxkPSJOb09mQXJy +YXlEaW1lbnNpb25zIiBTd2l0Y2hGaWVsZD0iQXJyYXlEaW1lbnNpb25zU3BlY2lmaWVkIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik5h +bWluZ1J1bGVUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJNYW5kYXRvcnkiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9Ik9wdGlvbmFsIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJDb25zdHJhaW50IiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQog +ICAgDQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJFbnVtZXJhdGlvbiIgTGVuZ3RoSW5C +aXRzPSIzMiI+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBO +YW1lPSJJbWFnZUJNUCI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl +IE5hbWU9IkltYWdlR0lGIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5 +cGUgTmFtZT0iSW1hZ2VKUEciPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVl +VHlwZSBOYW1lPSJJbWFnZVBORyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFx +dWVUeXBlIE5hbWU9IkF1ZGlvRGF0YVR5cGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVW5pb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0i +VXJpU3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFt +ZT0iQml0RmllbGRNYXNrRGF0YVR5cGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6 +T3BhcXVlVHlwZSBOYW1lPSJTZW1hbnRpY1ZlcnNpb25TdHJpbmciPg0KICA8L29wYzpPcGFxdWVU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iS2V5VmFsdWVQYWlyIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IktleSIgVHlwZU5h +bWU9InVhOlF1YWxpZmllZE5hbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlw +ZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkaXRpb25hbFBhcmFtZXRlcnNUeXBlIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQYXJhbWV0ZXJz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFyYW1ldGVy +cyIgVHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mUGFyYW1ldGVy +cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJFcGhlbWVyYWxLZXlUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlB1YmxpY0tleSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2lnbmF0dXJlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJp +bmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRW5kcG9pbnRUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2Vj +dXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlQb2xpY3lVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJv +ZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJIYW5kbGUiPg0KICA8L29wYzpPcGFxdWVUeXBl +Pg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJUcmltbWVkU3RyaW5nIj4NCiAgPC9vcGM6T3Bh +cXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJhdGlvbmFsTnVtYmVyIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik51bWVy +YXRvciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbm9t +aW5hdG9yIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJWZWN0b3IiIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9IlRocmVlRFZlY3RvciIgQmFzZVR5cGU9InRuczpWZWN0b3IiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iWCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJZIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IloiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIgQmFzZVR5 +cGU9InRuczpDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJYIiBU +eXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlkiIFR5cGVOYW1l +PSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iWiIgVHlwZU5hbWU9Im9wYzpE +b3VibGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iT3JpZW50YXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRocmVl +RE9yaWVudGF0aW9uIiBCYXNlVHlwZT0idG5zOk9yaWVudGF0aW9uIj4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkEiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QiIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDIiBUeXBl +TmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJGcmFtZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +VGhyZWVERnJhbWUiIEJhc2VUeXBlPSJ0bnM6RnJhbWUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q2FydGVzaWFuQ29vcmRpbmF0ZXMiIFR5cGVOYW1lPSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29vcmRp +bmF0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJPcmllbnRhdGlvbiIgVHlwZU5hbWU9InRu +czpUaHJlZURPcmllbnRhdGlvbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJPcGVuRmlsZU1vZGUiIExlbmd0aEluQml0cz0iMzIiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlYWQiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IldyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJFcmFzZUV4aXN0aW5nIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBcHBlbmQiIFZhbHVlPSI4IiAvPg0KICA8L29wYzpFbnVt +ZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IklkZW50aXR5Q3JpdGVy +aWFUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJVc2VyTmFtZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +VGh1bWJwcmludCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +Um9sZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBJ +ZCIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQW5vbnltb3Vz +IiBWYWx1ZT0iNSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBdXRoZW50aWNh +dGVkVXNlciIgVmFsdWU9IjYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQXBw +bGljYXRpb24iIFZhbHVlPSI3IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ilg1 +MDlTdWJqZWN0IiBWYWx1ZT0iOCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJJZGVudGl0eU1hcHBpbmdSdWxlVHlwZSIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDcml0ZXJpYVR5cGUi +IFR5cGVOYW1lPSJ0bnM6SWRlbnRpdHlDcml0ZXJpYVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJDcml0ZXJpYSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3VycmVuY3lVbml0VHlwZSIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOdW1l +cmljQ29kZSIgVHlwZU5hbWU9Im9wYzpJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV4 +cG9uZW50IiBUeXBlTmFtZT0ib3BjOlNCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWxw +aGFiZXRpY0NvZGUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQ3VycmVuY3kiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFsYXJtTWFzayIgTGVu +Z3RoSW5CaXRzPSIxNiIgSXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IkFjdGl2ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +VW5hY2tub3dsZWRnZWQiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlVuY29uZmlybWVkIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoN +CiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJUcnVzdExpc3RWYWxpZGF0aW9uT3B0aW9ucyIg +TGVuZ3RoSW5CaXRzPSIzMiIgSXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IlN1cHByZXNzQ2VydGlmaWNhdGVFeHBpcmVkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdXBwcmVzc0hvc3ROYW1lSW52YWxpZCIgVmFsdWU9IjIi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3VwcHJlc3NSZXZvY2F0aW9uU3Rh +dHVzVW5rbm93biIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +U3VwcHJlc3NJc3N1ZXJDZXJ0aWZpY2F0ZUV4cGlyZWQiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1cHByZXNzSXNzdWVyUmV2b2NhdGlvblN0YXR1c1Vua25v +d24iIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDaGVja1Jl +dm9jYXRpb25TdGF0dXNPbmxpbmUiIFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJDaGVja1Jldm9jYXRpb25TdGF0dXNPZmZsaW5lIiBWYWx1ZT0iNjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iVHJ1 +c3RMaXN0TWFza3MiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +IlRydXN0ZWRDZXJ0aWZpY2F0ZXMiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlRydXN0ZWRDcmxzIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJJc3N1ZXJDZXJ0aWZpY2F0ZXMiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlckNybHMiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkFsbCIgVmFsdWU9IjE1IiAvPg0KICA8L29wYzpFbnVtZXJhdGVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRydXN0TGlzdERhdGFUeXBlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNp +ZmllZExpc3RzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZUcnVzdGVkQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iVHJ1c3RlZENlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpCeXRlU3Ry +aW5nIiBMZW5ndGhGaWVsZD0iTm9PZlRydXN0ZWRDZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mVHJ1c3RlZENybHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJUcnVzdGVkQ3JscyIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiBM +ZW5ndGhGaWVsZD0iTm9PZlRydXN0ZWRDcmxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +Zklzc3VlckNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Iklzc3VlckNlcnRpZmljYXRlcyIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiBM +ZW5ndGhGaWVsZD0iTm9PZklzc3VlckNlcnRpZmljYXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZJc3N1ZXJDcmxzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iSXNzdWVyQ3JscyIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiBMZW5ndGhGaWVs +ZD0iTm9PZklzc3VlckNybHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iVHJhbnNhY3Rpb25FcnJvclR5cGUiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0SWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFcnJvciIgVHlwZU5hbWU9InVh +OlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdlIiBUeXBlTmFtZT0i +dWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhVHlwZVNjaGVtYUhlYWRlciIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTmFtZXNwYWNlcyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZXMiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZk5hbWVzcGFjZXMiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFt +ZT0idG5zOlN0cnVjdHVyZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlN0cnVjdHVyZURh +dGFUeXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFbnVtRGF0YVR5cGVzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW51bURhdGFUeXBlcyIg +VHlwZU5hbWU9InRuczpFbnVtRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mRW51bURhdGFU +eXBlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTaW1wbGVEYXRhVHlwZXMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaW1wbGVEYXRhVHlwZXMi +IFR5cGVOYW1lPSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNp +bXBsZURhdGFUeXBlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJEYXRhVHlwZURlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlSWQiIFR5cGVOYW1lPSJ1 +YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0idWE6UXVh +bGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgQmFzZVR5cGU9InRuczpEYXRhVHlw +ZURlc2NyaXB0aW9uIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0aW9uIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJj +ZVR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U3RydWN0dXJlRGVmaW5pdGlvbiIgVHlwZU5hbWU9InRuczpTdHJ1Y3R1cmVEZWZpbml0aW9uIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkVudW1EZXNjcmlwdGlvbiIgQmFzZVR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0aW9uIj4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJj +ZVR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIFNvdXJjZVR5cGU9InRuczpEYXRhVHlw +ZURlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW51bURlZmluaXRpb24iIFR5 +cGVOYW1lPSJ0bnM6RW51bURlZmluaXRpb24iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWls +dEluVHlwZSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgQmFz +ZVR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0aW9uIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRh +dGFUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIFNvdXJjZVR5cGU9InRuczpEYXRhVHlwZURl +c2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9InVhOlF1 +YWxpZmllZE5hbWUiIFNvdXJjZVR5cGU9InRuczpEYXRhVHlwZURlc2NyaXB0aW9uIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQmFzZURhdGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbHRJblR5cGUiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJV +QUJpbmFyeUZpbGVEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhVHlwZVNjaGVtYUhlYWRlciI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTmFtZXNwYWNlcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWVzcGFjZXMiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiBMZW5ndGhGaWVsZD0iTm9PZk5hbWVzcGFjZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iU3RydWN0dXJlRGF0YVR5cGVzIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVy +ZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlN0cnVjdHVyZURhdGFUeXBlcyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFbnVtRGF0YVR5cGVzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW51bURhdGFUeXBlcyIgVHlwZU5hbWU9InRuczpF +bnVtRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mRW51bURhdGFUeXBlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTaW1wbGVEYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaW1wbGVEYXRhVHlwZXMiIFR5cGVOYW1lPSJ0bnM6 +U2ltcGxlVHlwZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNpbXBsZURhdGFUeXBlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNjaGVtYUxvY2F0aW9uIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZGaWxlSGVhZGVyIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmlsZUhlYWRlciIgVHlwZU5hbWU9 +InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mRmlsZUhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkJvZHkiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlBvcnRhYmxlUXVh +bGlmaWVkTmFtZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOYW1lc3BhY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUG9ydGFibGVOb2RlSWQi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFt +ZXNwYWNlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IklkZW50aWZpZXIiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVW5zaWduZWRSYXRpb25hbE51bWJl +ciIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +dW1lcmF0b3IiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGVub21pbmF0b3IiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlB1YlN1YlN0YXRlIiBMZW5ndGhJ +bkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNhYmxlZCIgVmFs +dWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGF1c2VkIiBWYWx1ZT0i +MSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPcGVyYXRpb25hbCIgVmFsdWU9 +IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXJyb3IiIFZhbHVlPSIzIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlByZU9wZXJhdGlvbmFsIiBWYWx1ZT0i +NCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJEYXRhU2V0TWV0YURhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFUeXBlU2NoZW1hSGVh +ZGVyIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlcyIgVHlwZU5hbWU9Im9w +YzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlcyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik5vT2ZTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdHJ1Y3R1cmVEYXRhVHlwZXMiIFR5cGVOYW1lPSJ0bnM6U3Ry +dWN0dXJlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU3RydWN0dXJlRGF0YVR5cGVzIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVudW1EYXRhVHlwZXMiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbnVtRGF0YVR5cGVzIiBUeXBlTmFtZT0i +dG5zOkVudW1EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbnVtRGF0YVR5cGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNpbXBsZURhdGFUeXBlcyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpbXBsZURhdGFUeXBlcyIgVHlwZU5hbWU9 +InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2ltcGxlRGF0YVR5 +cGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmci +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2Fs +aXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRmllbGRzIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmllbGRzIiBUeXBlTmFtZT0idG5z +OkZpZWxkTWV0YURhdGEiIExlbmd0aEZpZWxkPSJOb09mRmllbGRzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGF0YVNldENsYXNzSWQiIFR5cGVOYW1lPSJvcGM6R3VpZCIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkNvbmZpZ3VyYXRpb25WZXJzaW9uIiBUeXBlTmFtZT0idG5zOkNvbmZpZ3Vy +YXRpb25WZXJzaW9uRGF0YVR5cGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRmllbGRNZXRhRGF0YSIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6 +TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpZWxkRmxhZ3MiIFR5cGVO +YW1lPSJ0bnM6RGF0YVNldEZpZWxkRmxhZ3MiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCdWls +dEluVHlwZSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 +YVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1 +ZVJhbmsiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +QXJyYXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iQXJyYXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZBcnJheURpbWVuc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhTdHJpbmdM +ZW5ndGgiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 +YVNldEZpZWxkSWQiIFR5cGVOYW1lPSJvcGM6R3VpZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZQcm9wZXJ0aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUHJvcGVydGllcyIgVHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxk +PSJOb09mUHJvcGVydGllcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpF +bnVtZXJhdGVkVHlwZSBOYW1lPSJEYXRhU2V0RmllbGRGbGFncyIgTGVuZ3RoSW5CaXRzPSIxNiIg +SXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUi +IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlByb21vdGVkRmll +bGQiIFZhbHVlPSIxIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWFqb3JWZXJzaW9uIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbm9yVmVyc2lv +biIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRG +b2xkZXIiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +U2V0Rm9sZGVyIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRhU2V0 +Rm9sZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE1ldGFEYXRhIiBUeXBlTmFt +ZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +RXh0ZW5zaW9uRmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRXh0ZW5zaW9uRmllbGRzIiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZFeHRlbnNpb25GaWVsZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +U2V0U291cmNlIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1Ymxpc2hlZERhdGFT +ZXRTb3VyY2VEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaGVk +VmFyaWFibGVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJQdWJsaXNoZWRWYXJpYWJsZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWxIaW50IiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlYWRiYW5kVHlwZSIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWFkYmFuZFZhbHVlIiBU +eXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2Ui +IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic3RpdHV0 +ZVZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZNZXRhRGF0YVByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJNZXRhRGF0YVByb3BlcnRpZXMiIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1l +IiBMZW5ndGhGaWVsZD0iTm9PZk1ldGFEYXRhUHJvcGVydGllcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJsaXNoZWREYXRhSXRl +bXNEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlB1Ymxpc2hlZERhdGEiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZWREYXRhIiBUeXBlTmFtZT0i +dG5zOlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mUHVibGlzaGVk +RGF0YSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJsaXNoZWRE +YXRhU2V0U291cmNlRGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnROb3RpZmll +ciIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxl +Y3RlZEZpZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlNlbGVjdGVkRmllbGRzIiBUeXBlTmFtZT0idG5zOlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIExl +bmd0aEZpZWxkPSJOb09mU2VsZWN0ZWRGaWVsZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJG +aWx0ZXIiIFR5cGVOYW1lPSJ0bnM6Q29udGVudEZpbHRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJsaXNoZWREYXRhU2V0Q3Vz +dG9tU291cmNlRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNldFNvdXJjZURh +dGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN5Y2xpY0RhdGFTZXQiIFR5cGVOYW1lPSJv +cGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJh +dGVkVHlwZSBOYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRzPSIzMiIg +SXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUi +IFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0YXR1c0NvZGUi +IFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNvdXJjZVRpbWVz +dGFtcCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VydmVy +VGltZXN0YW1wIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJT +b3VyY2VQaWNvU2Vjb25kcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iU2VydmVyUGljb1NlY29uZHMiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJSYXdEYXRhIiBWYWx1ZT0iMzIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldFdyaXRlckRhdGFUeXBl +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5h +bWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxl +ZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNl +dFdyaXRlcklkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRGaWVsZENvbnRl +bnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iS2V5RnJhbWVDb3VudCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0TmFtZSIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVNldFdyaXRl +clByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEYXRhU2V0V3JpdGVyUHJvcGVydGllcyIgVHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExl +bmd0aEZpZWxkPSJOb09mRGF0YVNldFdyaXRlclByb3BlcnRpZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VTZXR0aW5ncyIgVHlwZU5hbWU9InVhOkV4 +dGVuc2lvbk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1YlN1Ykdyb3VwRGF0YVR5cGUiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9 +Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBlTmFtZT0i +b3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eU1vZGUiIFR5cGVO +YW1lPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl +Y3VyaXR5R3JvdXBJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5S2V5U2VydmljZXMiIFR5cGVOYW1lPSJ0bnM6RW5k +cG9pbnREZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZWN1cml0eUtleVNlcnZpY2VzIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4TmV0d29ya01lc3NhZ2VTaXplIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZHcm91cFByb3BlcnRpZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFByb3Bl +cnRpZXMiIFR5cGVOYW1lPSJ0bnM6S2V5VmFsdWVQYWlyIiBMZW5ndGhGaWVsZD0iTm9PZkdyb3Vw +UHJvcGVydGllcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIiBCYXNlVHlwZT0idG5zOlB1YlN1Ykdy +b3VwRGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpT +dHJpbmciIFNvdXJjZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiBTb3VyY2VUeXBlPSJ0 +bnM6UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5 +TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiBTb3VyY2VUeXBlPSJ0bnM6 +UHViU3ViR3JvdXBEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5R3Jv +dXBJZCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJjZVR5cGU9InRuczpQdWJTdWJHcm91cERh +dGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUtl +eVNlcnZpY2VzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxk +PSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heE5l +dHdvcmtNZXNzYWdlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpQ +dWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkdyb3VwUHJv +cGVydGllcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdy +b3VwUHJvcGVydGllcyIgVHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJO +b09mR3JvdXBQcm9wZXJ0aWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVyR3JvdXBJ +ZCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNo +aW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iS2VlcEFsaXZlVGltZSIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJQcmlvcml0eSIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJO +b09mTG9jYWxlSWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSGVhZGVyTGF5b3V0VXJpIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9ydFNl +dHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWVzc2FnZVNldHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTZXRXcml0ZXJzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldFdyaXRlcnMiIFR5cGVOYW1lPSJ0 +bnM6RGF0YVNldFdyaXRlckRhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZkRhdGFTZXRXcml0ZXJz +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9u +T2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQdWJTdWJDb25uZWN0aW9uRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmci +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4i +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZXJJZCIgVHlwZU5hbWU9InVhOlZhcmlh +bnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmFuc3BvcnRQcm9maWxlVXJpIiBUeXBlTmFt +ZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZHJlc3MiIFR5cGVOYW1l +PSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQ29ubmVj +dGlvblByb3BlcnRpZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJDb25uZWN0aW9uUHJvcGVydGllcyIgVHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExl +bmd0aEZpZWxkPSJOb09mQ29ubmVjdGlvblByb3BlcnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJUcmFuc3BvcnRTZXR0aW5ncyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZXcml0ZXJHcm91cHMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZXJHcm91cHMiIFR5cGVOYW1lPSJ0bnM6 +V3JpdGVyR3JvdXBEYXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZXcml0ZXJHcm91cHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVhZGVyR3JvdXBzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVhZGVyR3JvdXBzIiBUeXBlTmFtZT0idG5zOlJl +YWRlckdyb3VwRGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mUmVhZGVyR3JvdXBzIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNvbm5l +Y3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTmV0 +d29ya0FkZHJlc3NEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOZXR3b3JrSW50ZXJmYWNlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJOZXR3b3JrQWRkcmVzc1VybERhdGFUeXBlIiBCYXNlVHlwZT0idG5zOk5ldHdvcmtBZGRyZXNz +RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmV0d29ya0ludGVyZmFjZSIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIFNvdXJjZVR5cGU9InRuczpOZXR3b3JrQWRkcmVzc0RhdGFUeXBlIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXJsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFk +ZXJHcm91cERhdGFUeXBlIiBCYXNlVHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIFNvdXJjZVR5cGU9 +InRuczpQdWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5hYmxl +ZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRh +VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRu +czpNZXNzYWdlU2VjdXJpdHlNb2RlIiBTb3VyY2VUeXBlPSJ0bnM6UHViU3ViR3JvdXBEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5R3JvdXBJZCIgVHlwZU5hbWU9Im9w +YzpTdHJpbmciIFNvdXJjZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBlIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFt +ZT0idG5zOkVuZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlLZXlT +ZXJ2aWNlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIg +VHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpQdWJTdWJHcm91cERhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkdyb3VwUHJvcGVydGllcyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwUHJvcGVydGllcyIgVHlw +ZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mR3JvdXBQcm9wZXJ0aWVz +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIFR5cGVOYW1lPSJ1 +YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdlU2V0dGlu +Z3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJOb09mRGF0YVNldFJlYWRlcnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEYXRhU2V0UmVhZGVycyIgVHlwZU5hbWU9InRuczpEYXRhU2V0UmVhZGVyRGF0 +YVR5cGUiIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldFJlYWRlcnMiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZGVyR3JvdXBUcmFu +c3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZGVyR3JvdXBN +ZXNzYWdlRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFTZXRSZWFk +ZXJEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkVuYWJsZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlB1Ymxpc2hlcklkIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IldyaXRlckdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6VUludDE2IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldFdyaXRlcklkIiBUeXBlTmFtZT0ib3BjOlVJbnQxNiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXRhRGF0YSIgVHlwZU5hbWU9InRuczpEYXRhU2V0 +TWV0YURhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldEZpZWxkQ29udGVu +dE1hc2siIFR5cGVOYW1lPSJ0bnM6RGF0YVNldEZpZWxkQ29udGVudE1hc2siIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJNZXNzYWdlUmVjZWl2ZVRpbWVvdXQiIFR5cGVOYW1lPSJvcGM6RG91Ymxl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iS2V5RnJhbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIZWFkZXJMYXlvdXRVcmkiIFR5cGVOYW1l +PSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlNb2RlIiBUeXBl +TmFtZT0idG5zOk1lc3NhZ2VTZWN1cml0eU1vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZWN1cml0eUdyb3VwSWQiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlNlY3VyaXR5S2V5U2VydmljZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUtleVNlcnZpY2VzIiBUeXBlTmFtZT0idG5zOkVu +ZHBvaW50RGVzY3JpcHRpb24iIExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlLZXlTZXJ2aWNlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEYXRhU2V0UmVhZGVyUHJvcGVydGllcyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRSZWFkZXJQ +cm9wZXJ0aWVzIiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +YXRhU2V0UmVhZGVyUHJvcGVydGllcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zcG9y +dFNldHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTWVzc2FnZVNldHRpbmdzIiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXQiIFR5cGVOYW1lPSJ1YTpF +eHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgQmFzZVR5 +cGU9InRuczpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZUYXJnZXRWYXJpYWJsZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJUYXJnZXRWYXJpYWJsZXMiIFR5cGVOYW1lPSJ0bnM6RmllbGRUYXJnZXREYXRh +VHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZUYXJnZXRWYXJpYWJsZXMiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRmllbGRUYXJnZXREYXRh +VHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJEYXRhU2V0RmllbGRJZCIgVHlwZU5hbWU9Im9wYzpHdWlkIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVjZWl2ZXJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlRhcmdldE5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlSW5kZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIFR5cGVO +YW1lPSJ0bnM6T3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +T3ZlcnJpZGVWYWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRs +aW5nIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJE +aXNhYmxlZCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGFz +dFVzYWJsZVZhbHVlIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJPdmVycmlkZVZhbHVlIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFU +eXBlIiBCYXNlVHlwZT0idG5zOlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUGFyZW50Tm9kZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVHlwZU5hbWU9InRu +czpSb2xlUGVybWlzc2lvblR5cGUiIExlbmd0aEZpZWxkPSJOb09mUm9sZVBlcm1pc3Npb25zIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHVibGlzaGVkRGF0YVNldHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoZWREYXRhU2V0cyIg +VHlwZU5hbWU9InRuczpQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIExlbmd0aEZpZWxkPSJOb09m +UHVibGlzaGVkRGF0YVNldHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQ29ubmVjdGlv +bnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb25uZWN0 +aW9ucyIgVHlwZU5hbWU9InRuczpQdWJTdWJDb25uZWN0aW9uRGF0YVR5cGUiIExlbmd0aEZpZWxk +PSJOb09mQ29ubmVjdGlvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVkIiBUeXBl +TmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RhbmRhbG9uZVN1YnNjcmliZWREYXRhU2V0UmVmRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEYXRhU2V0TmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RhbmRhbG9u +ZVN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFT +ZXREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEYXRhU2V0Rm9sZGVyIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldEZvbGRlciIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mRGF0YVNldEZvbGRlciIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXRhRGF0YSIgVHlwZU5hbWU9InRuczpEYXRhU2V0 +TWV0YURhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaWJlZERhdGFTZXQi +IFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2VjdXJpdHlHcm91cERhdGFUeXBlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUi +IFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlY3Vy +aXR5R3JvdXBGb2xkZXIiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTZWN1cml0eUdyb3VwRm9sZGVyIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZTZWN1cml0eUdyb3VwRm9sZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iS2V5 +TGlmZXRpbWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2VjdXJpdHlQb2xpY3lVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTWF4RnV0dXJlS2V5Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTWF4UGFzdEtleUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5R3JvdXBJZCIgVHlwZU5hbWU9Im9wYzpT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUm9sZVBlcm1pc3Npb25zIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUm9sZVBlcm1pc3Npb25z +IiBUeXBlTmFtZT0idG5zOlJvbGVQZXJtaXNzaW9uVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSb2xl +UGVybWlzc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mR3JvdXBQcm9wZXJ0aWVz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iR3JvdXBQcm9w +ZXJ0aWVzIiBUeXBlTmFtZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZHcm91 +cFByb3BlcnRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iUHViU3ViS2V5UHVzaFRhcmdldERhdGFUeXBlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFwcGxpY2F0aW9uVXJpIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQdXNoVGFy +Z2V0Rm9sZGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UHVzaFRhcmdldEZvbGRlciIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09m +UHVzaFRhcmdldEZvbGRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJsIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UG9s +aWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVz +ZXJUb2tlblR5cGUiIFR5cGVOYW1lPSJ0bnM6VXNlclRva2VuUG9saWN5IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVxdWVzdGVkS2V5Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDE2IiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0cnlJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHVzaFRhcmdldFByb3BlcnRpZXMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdXNoVGFyZ2V0UHJvcGVy +dGllcyIgVHlwZU5hbWU9InRuczpLZXlWYWx1ZVBhaXIiIExlbmd0aEZpZWxkPSJOb09mUHVzaFRh +cmdldFByb3BlcnRpZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VjdXJpdHlHcm91 +cHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0 +eUdyb3VwcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mU2VjdXJpdHlH +cm91cHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUHViU3ViQ29uZmlndXJhdGlvbjJEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpQdWJT +dWJDb25maWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlB1Ymxp +c2hlZERhdGFTZXRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUHVibGlzaGVkRGF0YVNldHMiIFR5cGVOYW1lPSJ0bnM6UHVibGlzaGVkRGF0YVNldERhdGFU +eXBlIiBMZW5ndGhGaWVsZD0iTm9PZlB1Ymxpc2hlZERhdGFTZXRzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZkNvbm5lY3Rpb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvbnMiIFR5cGVOYW1lPSJ0bnM6UHViU3ViQ29ubmVjdGlv +bkRhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZkNvbm5lY3Rpb25zIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiBTb3VyY2VUeXBlPSJ0bnM6 +UHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZlN1YnNjcmliZWREYXRhU2V0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlN1YnNjcmliZWREYXRhU2V0cyIgVHlwZU5hbWU9InRuczpTdGFuZGFsb25lU3Vi +c2NyaWJlZERhdGFTZXREYXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZTdWJzY3JpYmVkRGF0YVNl +dHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVNldENsYXNzZXMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0Q2xhc3NlcyIgVHlw +ZU5hbWU9InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZkRhdGFTZXRD +bGFzc2VzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRlZmF1bHRTZWN1cml0eUtleVNl +cnZpY2VzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVm +YXVsdFNlY3VyaXR5S2V5U2VydmljZXMiIFR5cGVOYW1lPSJ0bnM6RW5kcG9pbnREZXNjcmlwdGlv +biIgTGVuZ3RoRmllbGQ9Ik5vT2ZEZWZhdWx0U2VjdXJpdHlLZXlTZXJ2aWNlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWN1cml0eUdyb3VwcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5R3JvdXBzIiBUeXBlTmFtZT0idG5zOlNl +Y3VyaXR5R3JvdXBEYXRhVHlwZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZWN1cml0eUdyb3VwcyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZQdWJTdWJLZXlQdXNoVGFyZ2V0cyIgVHlwZU5hbWU9 +Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1YlN1YktleVB1c2hUYXJnZXRz +IiBUeXBlTmFtZT0idG5zOlB1YlN1YktleVB1c2hUYXJnZXREYXRhVHlwZSIgTGVuZ3RoRmllbGQ9 +Ik5vT2ZQdWJTdWJLZXlQdXNoVGFyZ2V0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbmZp +Z3VyYXRpb25WZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik5vT2ZDb25maWd1cmF0aW9uUHJvcGVydGllcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzIiBUeXBlTmFt +ZT0idG5zOktleVZhbHVlUGFpciIgTGVuZ3RoRmllbGQ9Ik5vT2ZDb25maWd1cmF0aW9uUHJvcGVy +dGllcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlw +ZSBOYW1lPSJEYXRhU2V0T3JkZXJpbmdUeXBlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVbmRlZmluZWQiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFzY2VuZGluZ1dyaXRlcklkIiBWYWx1ZT0iMSIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBc2NlbmRpbmdXcml0ZXJJZFNpbmdsZSIgVmFs +dWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5 +cGUgTmFtZT0iVWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIExlbmd0aEluQml0cz0iMzIi +IElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25l +IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQdWJsaXNoZXJJ +ZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3JvdXBIZWFk +ZXIiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IldyaXRlckdy +b3VwSWQiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikdyb3Vw +VmVyc2lvbiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTmV0 +d29ya01lc3NhZ2VOdW1iZXIiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJTZXF1ZW5jZU51bWJlciIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlBheWxvYWRIZWFkZXIiIFZhbHVlPSI2NCIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJUaW1lc3RhbXAiIFZhbHVlPSIxMjgiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iUGljb1NlY29uZHMiIFZhbHVlPSIyNTYiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVNldENsYXNzSWQiIFZhbHVlPSI1MTIiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUHJvbW90ZWRGaWVsZHMiIFZhbHVlPSIxMDI0IiAv +Pg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgQmFzZVR5cGU9InRuczpXcml0ZXJHcm91 +cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91cFZlcnNpb24iIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE9yZGVy +aW5nIiBUeXBlTmFtZT0idG5zOkRhdGFTZXRPcmRlcmluZ1R5cGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOlVhZHBOZXR3 +b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2FtcGxpbmdP +ZmZzZXQiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZlB1Ymxpc2hpbmdPZmZzZXQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJQdWJsaXNoaW5nT2Zmc2V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgTGVuZ3RoRmll +bGQ9Ik5vT2ZQdWJsaXNoaW5nT2Zmc2V0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNr +IiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iVGltZXN0YW1wIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJQaWNvU2Vjb25kcyIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iU3RhdHVzIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJNYWpvclZlcnNpb24iIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9Ik1pbm9yVmVyc2lvbiIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlNlcXVlbmNlTnVtYmVyIiBWYWx1ZT0iMzIiIC8+DQogIDwvb3BjOkVudW1lcmF0 +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVWFkcERhdGFTZXRXcml0ZXJN +ZXNzYWdlRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6RGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlw +ZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBl +TmFtZT0idG5zOlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQ29uZmlndXJlZFNpemUiIFR5cGVOYW1lPSJvcGM6VUludDE2IiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTmV0d29ya01lc3NhZ2VOdW1iZXIiIFR5cGVOYW1lPSJvcGM6VUludDE2 +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVNldE9mZnNldCIgVHlwZU5hbWU9Im9wYzpV +SW50MTYiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iVWFkcERhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6 +RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHcm91 +cFZlcnNpb24iIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TmV0d29ya01lc3NhZ2VOdW1iZXIiIFR5cGVOYW1lPSJvcGM6VUludDE2IiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRGF0YVNldE9mZnNldCIgVHlwZU5hbWU9Im9wYzpVSW50MTYiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEYXRhU2V0Q2xhc3NJZCIgVHlwZU5hbWU9Im9wYzpHdWlkIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9 +InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6VWFkcERhdGFTZXRN +ZXNzYWdlQ29udGVudE1hc2siIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNoaW5nSW50 +ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVj +ZWl2ZU9mZnNldCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJQcm9jZXNzaW5nT2Zmc2V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJKc29uTmV0d29ya01l +c3NhZ2VDb250ZW50TWFzayIgTGVuZ3RoSW5CaXRzPSIzMiIgSXNPcHRpb25TZXQ9InRydWUiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5ldHdvcmtNZXNzYWdlSGVhZGVyIiBWYWx1ZT0iMSIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhU2V0TWVzc2FnZUhlYWRlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2luZ2xlRGF0YVNl +dE1lc3NhZ2UiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlB1 +Ymxpc2hlcklkIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJE +YXRhU2V0Q2xhc3NJZCIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlJlcGx5VG8iIFZhbHVlPSIzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJKc29uV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUi +IEJhc2VUeXBlPSJ0bnM6V3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpKc29uTmV0 +d29ya01lc3NhZ2VDb250ZW50TWFzayIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIg +TGVuZ3RoSW5CaXRzPSIzMiIgSXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkRhdGFTZXRXcml0ZXJJZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iTWV0YURhdGFWZXJzaW9uIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJTZXF1ZW5jZU51bWJlciIgVmFsdWU9IjQiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iVGltZXN0YW1wIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdGF0dXMiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJNZXNzYWdlVHlwZSIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFTZXRXcml0ZXJOYW1lIiBWYWx1ZT0iNjQiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmV2ZXJzaWJsZUZpZWxkRW5jb2RpbmciIFZhbHVl +PSIxMjgiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iSnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6 +RGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBUeXBlTmFtZT0idG5zOkpzb25EYXRhU2V0TWVzc2FnZUNv +bnRlbnRNYXNrIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9Ikpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiBCYXNlVHlwZT0i +dG5zOkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgVHlwZU5hbWU9InRuczpKc29uTmV0d29ya01lc3Nh +Z2VDb250ZW50TWFzayIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTZXRNZXNzYWdlQ29u +dGVudE1hc2siIFR5cGVOYW1lPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +UW9zRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRyYW5zbWl0UW9zRGF0 +YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UW9zRGF0YVR5cGUiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlRyYW5zbWl0UW9zUHJpb3JpdHlEYXRh +VHlwZSIgQmFzZVR5cGU9InRuczpUcmFuc21pdFFvc0RhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlByaW9yaXR5TGFiZWwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlY2VpdmVRb3NE +YXRhVHlwZSIgQmFzZVR5cGU9InRuczpRb3NEYXRhVHlwZSI+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVjZWl2ZVFvc1ByaW9yaXR5RGF0 +YVR5cGUiIEJhc2VUeXBlPSJ0bnM6UmVjZWl2ZVFvc0RhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlByaW9yaXR5TGFiZWwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFncmFtQ29u +bmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkNvbm5lY3Rpb25UcmFuc3Bv +cnREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlBZGRyZXNzIiBUeXBl +TmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydDJE +YXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlw +ZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlBZGRyZXNzIiBUeXBlTmFtZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0IiBTb3VyY2VUeXBlPSJ0bnM6RGF0YWdyYW1Db25uZWN0aW9uVHJhbnNw +b3J0RGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlBbm5vdW5jZVJh +dGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzY292 +ZXJ5TWF4TWVzc2FnZVNpemUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iUW9zQ2F0ZWdvcnkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZkRhdGFncmFtUW9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRGF0YWdyYW1Rb3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiIExlbmd0aEZpZWxkPSJOb09mRGF0YWdyYW1Rb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YWdyYW1Xcml0ZXJHcm91cFRy +YW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5zOldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5 +cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVzc2FnZVJlcGVhdENvdW50IiBUeXBlTmFtZT0i +b3BjOkJ5dGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdlUmVwZWF0RGVsYXkiIFR5 +cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3Bj +OlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnQyRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ0bnM6RGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1lc3NhZ2VSZXBlYXRDb3VudCIgVHlwZU5hbWU9Im9wYzpC +eXRlIiBTb3VyY2VUeXBlPSJ0bnM6RGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWVzc2FnZVJlcGVhdERlbGF5IiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgU291cmNlVHlwZT0idG5zOkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnRE +YXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZHJlc3MiIFR5cGVOYW1lPSJ1YTpF +eHRlbnNpb25PYmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRb3NDYXRlZ29yeSIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YWdyYW1R +b3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhZ3Jh +bVFvcyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRh +Z3JhbVFvcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeUFubm91bmNlUmF0ZSIg +VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUb3BpYyIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRGF0YWdyYW1EYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5 +cGUiIEJhc2VUeXBlPSJ0bnM6RGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkFkZHJlc3MiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRb3NDYXRlZ29yeSIgVHlwZU5hbWU9Im9wYzpTdHJpbmci +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YWdyYW1Rb3MiIFR5cGVOYW1lPSJvcGM6 +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhZ3JhbVFvcyIgVHlwZU5hbWU9InVh +OkV4dGVuc2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRhZ3JhbVFvcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlRvcGljIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm9rZXJDb25u +ZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIEJhc2VUeXBlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9y +dERhdGFUeXBlIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291cmNlVXJpIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhlbnRpY2F0aW9uUHJvZmls +ZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2Vy +dmljZSIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +Tm90U3BlY2lmaWVkIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJCZXN0RWZmb3J0IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJBdExlYXN0T25jZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iQXRNb3N0T25jZSIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iRXhhY3RseU9uY2UiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb2tlcldyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIEJhc2VUeXBlPSJ0bnM6V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVzb3VyY2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2ZXJ5R3Vh +cmFudGVlIiBUeXBlTmFtZT0idG5zOkJyb2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +QnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBCYXNlVHlwZT0idG5zOkRhdGFT +ZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWV1ZU5h +bWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzb3Vy +Y2VVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXV0 +aGVudGljYXRpb25Qcm9maWxlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlcXVlc3RlZERlbGl2ZXJ5R3VhcmFudGVlIiBUeXBlTmFtZT0idG5zOkJy +b2tlclRyYW5zcG9ydFF1YWxpdHlPZlNlcnZpY2UiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJN +ZXRhRGF0YVF1ZXVlTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJNZXRhRGF0YVVwZGF0ZVRpbWUiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb2tl +ckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgQmFzZVR5cGU9InRuczpEYXRhU2V0UmVh +ZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVldWVOYW1lIiBU +eXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc291cmNlVXJp +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF1dGhlbnRp +Y2F0aW9uUHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0ZWREZWxpdmVyeUd1YXJhbnRlZSIgVHlwZU5hbWU9InRuczpCcm9rZXJU +cmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0YURh +dGFRdWV1ZU5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25S +ZWZNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iRWxlbWVudEFkZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iRWxlbWVudE1hdGNoIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJFbGVtZW50TW9kaWZ5IiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJFbGVtZW50UmVtb3ZlIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VXcml0ZXIiIFZhbHVlPSIxNiIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VSZWFkZXIiIFZhbHVlPSIzMiIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VXcml0ZXJHcm91cCIg +VmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5jZVJl +YWRlckdyb3VwIiBWYWx1ZT0iMTI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +IlJlZmVyZW5jZUNvbm5lY3Rpb24iIFZhbHVlPSIyNTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iUmVmZXJlbmNlUHViRGF0YXNldCIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VTdWJEYXRhc2V0IiBWYWx1ZT0iMTAyNCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VTZWN1cml0eUdyb3Vw +IiBWYWx1ZT0iMjA0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVu +Y2VQdXNoVGFyZ2V0IiBWYWx1ZT0iNDA5NiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJQdWJTdWJDb25maWd1cmF0aW9uUmVmRGF0YVR5 +cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Q29uZmlndXJhdGlvbk1hc2siIFR5cGVOYW1lPSJ0bnM6UHViU3ViQ29uZmlndXJhdGlvblJlZk1h +c2siIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbGVtZW50SW5kZXgiIFR5cGVOYW1lPSJvcGM6 +VUludDE2IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29ubmVjdGlvbkluZGV4IiBUeXBlTmFt +ZT0ib3BjOlVJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikdyb3VwSW5kZXgiIFR5cGVO +YW1lPSJvcGM6VUludDE2IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25WYWx1ZURhdGFUeXBlIiBCYXNl +VHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbmZpZ3Vy +YXRpb25FbGVtZW50IiBUeXBlTmFtZT0idG5zOlB1YlN1YkNvbmZpZ3VyYXRpb25SZWZEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSWRlbnRpZmllciIgVHlwZU5hbWU9InVhOlZhcmlhbnQi +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iRGlhZ25vc3RpY3NMZXZlbCIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iQmFzaWMiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IkFkdmFuY2VkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJJbmZvIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJMb2ciIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRlYnVn +IiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJh +dGVkVHlwZSBOYW1lPSJQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNhdGlvbiIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5mb3JtYXRp +b24iIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkVycm9yIiBW +YWx1ZT0iMSIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJBbGlhc05hbWVEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBbGlhc05hbWUiIFR5cGVOYW1lPSJ1YTpRdWFsaWZp +ZWROYW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZmVyZW5jZWROb2RlcyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZWROb2Rl +cyIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVyZW5j +ZWROb2RlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVk +VHlwZSBOYW1lPSJQYXNzd29yZE9wdGlvbnNNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIiBJc09wdGlv +blNldD0idHJ1ZSI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3VwcG9ydEluaXRpYWxQYXNz +d29yZENoYW5nZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +U3VwcG9ydERpc2FibGVVc2VyIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJTdXBwb3J0RGlzYWJsZURlbGV0ZUZvclVzZXIiIFZhbHVlPSI0IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1cHBvcnROb0NoYW5nZUZvclVzZXIiIFZhbHVlPSI4 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN1cHBvcnREZXNjcmlwdGlvbkZv +clVzZXIiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXF1 +aXJlc1VwcGVyQ2FzZUNoYXJhY3RlcnMiIFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJSZXF1aXJlc0xvd2VyQ2FzZUNoYXJhY3RlcnMiIFZhbHVlPSI2NCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXF1aXJlc0RpZ2l0Q2hhcmFjdGVycyIg +VmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXF1aXJlc1Nw +ZWNpYWxDaGFyYWN0ZXJzIiBWYWx1ZT0iMjU2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVzZXJDb25maWd1cmF0aW9uTWFzayIgTGVu +Z3RoSW5CaXRzPSIzMiIgSXNPcHRpb25TZXQ9InRydWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ik5vRGVsZXRlIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJEaXNhYmxlZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +Tm9DaGFuZ2VCeVVzZXIiIFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ik11c3RDaGFuZ2VQYXNzd29yZCIgVmFsdWU9IjgiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlck1hbmFnZW1lbnREYXRhVHlw +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJV +c2VyQ29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InRuczpVc2VyQ29uZmlndXJhdGlvbk1hc2siIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9Im9wYzpTdHJpbmci +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJF +bmNvZGVkVGlja2V0Ij4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRU +eXBlIE5hbWU9IkR1cGxleCIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iRnVsbCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iSGFsZiIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +VW5rbm93biIgVmFsdWU9IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 +RW51bWVyYXRlZFR5cGUgTmFtZT0iSW50ZXJmYWNlQWRtaW5TdGF0dXMiIExlbmd0aEluQml0cz0i +MzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVwIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEb3duIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJUZXN0aW5nIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51 +bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJJbnRlcmZhY2VPcGVy +U3RhdHVzIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJVcCIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRG93biIg +VmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVGVzdGluZyIgVmFs +dWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVW5rbm93biIgVmFsdWU9 +IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRG9ybWFudCIgVmFsdWU9IjQi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm90UHJlc2VudCIgVmFsdWU9IjUi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTG93ZXJMYXllckRvd24iIFZhbHVl +PSI2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBl +IE5hbWU9Ik5lZ290aWF0aW9uU3RhdHVzIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJJblByb2dyZXNzIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJDb21wbGV0ZSIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iRmFpbGVkIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJVbmtub3duIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb05lZ290aWF0aW9uIiBWYWx1ZT0iNCIgLz4NCiAgPC9vcGM6RW51bWVyYXRl +ZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJUc25GYWlsdXJlQ29kZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9GYWlsdXJl +IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJbnN1ZmZpY2ll +bnRCYW5kd2lkdGgiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ikluc3VmZmljaWVudFJlc291cmNlcyIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iSW5zdWZmaWNpZW50VHJhZmZpY0NsYXNzQmFuZHdpZHRoIiBWYWx1ZT0iMyIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJlYW1JZEluVXNlIiBWYWx1ZT0i +NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdHJlYW1EZXN0aW5hdGlvbkFk +ZHJlc3NJblVzZSIgVmFsdWU9IjUiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +U3RyZWFtUHJlZW1wdGVkQnlIaWdoZXJSYW5rIiBWYWx1ZT0iNiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJMYXRlbmN5SGFzQ2hhbmdlZCIgVmFsdWU9IjciIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRWdyZXNzUG9ydE5vdEF2YkNhcGFibGUiIFZhbHVlPSI4 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVzZURpZmZlcmVudERlc3RpbmF0 +aW9uQWRkcmVzcyIgVmFsdWU9IjkiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +T3V0T2ZNc3JwUmVzb3VyY2VzIiBWYWx1ZT0iMTAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iT3V0T2ZNbXJwUmVzb3VyY2VzIiBWYWx1ZT0iMTEiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iQ2Fubm90U3RvcmVEZXN0aW5hdGlvbkFkZHJlc3MiIFZhbHVlPSIx +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQcmlvcml0eUlzTm90QW5TcmND +bGFzcyIgVmFsdWU9IjEzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik1heEZy +YW1lU2l6ZVRvb0xhcmdlIiBWYWx1ZT0iMTQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iTWF4RmFuSW5Qb3J0c0xpbWl0UmVhY2hlZCIgVmFsdWU9IjE1IiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZpcnN0VmFsdWVDaGFuZ2VkRm9yU3RyZWFtSWQiIFZhbHVl +PSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWbGFuQmxvY2tlZE9uRWdy +ZXNzIiBWYWx1ZT0iMTciIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmxhblRh +Z2dpbmdEaXNhYmxlZE9uRWdyZXNzIiBWYWx1ZT0iMTgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iU3JDbGFzc1ByaW9yaXR5TWlzbWF0Y2giIFZhbHVlPSIxOSIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJGZWF0dXJlTm90UHJvcGFnYXRlZCIgVmFsdWU9IjIw +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik1heExhdGVuY3lFeGNlZWRlZCIg +VmFsdWU9IjIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJyaWRnZURvZXNO +b3RQcm92aWRlTmV0d29ya0lkIiBWYWx1ZT0iMjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iU3RyZWFtVHJhbnNmb3JtTm90U3VwcG9ydGVkIiBWYWx1ZT0iMjMiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RyZWFtSWRUeXBlTm90U3VwcG9ydGVkIiBWYWx1 +ZT0iMjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRmVhdHVyZU5vdFN1cHBv +cnRlZCIgVmFsdWU9IjI1IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVu +dW1lcmF0ZWRUeXBlIE5hbWU9IlRzblN0cmVhbVN0YXRlIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNhYmxlZCIgVmFsdWU9IjAiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQ29uZmlndXJpbmciIFZhbHVlPSIxIiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlYWR5IiBWYWx1ZT0iMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPcGVyYXRpb25hbCIgVmFsdWU9IjMiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXJyb3IiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVt +ZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlRzblRhbGtlclN0YXR1 +cyIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9u +ZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUmVhZHkiIFZh +bHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZhaWxlZCIgVmFsdWU9 +IjIiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUg +TmFtZT0iVHNuTGlzdGVuZXJTdGF0dXMiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51 +bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlJlYWR5IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJQYXJ0aWFsRmFpbGVkIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJGYWlsZWQiIFZhbHVlPSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlByaW9yaXR5TWFwcGluZ0VudHJ5VHlwZSIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXBw +aW5nVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBy +aW9yaXR5TGFiZWwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUHJpb3JpdHlWYWx1ZV9QQ1AiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlByaW9yaXR5VmFsdWVfRFNDUCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVm +ZXJlbmNlRGVzY3JpcHRpb25EYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTb3VyY2VOb2RlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJ +ZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzRm9yd2FyZCIgVHlwZU5hbWU9Im9wYzpCb29s +ZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZSIgVHlwZU5hbWU9InVhOkV4 +cGFuZGVkTm9kZUlkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlJlZmVyZW5jZUxpc3RFbnRyeURhdGFUeXBlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGUiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ZvcndhcmQiIFR5 +cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRhcmdldE5vZGUi +IFR5cGVOYW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJJZFR5cGUiIExlbmd0aEluQml0cz0iMzIi +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik51bWVyaWMiIFZhbHVlPSIwIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0cmluZyIgVmFsdWU9IjEiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3VpZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iT3BhcXVlIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJOb2RlQ2xhc3MiIExlbmd0 +aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVuc3BlY2lmaWVk +IiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPYmplY3QiIFZh +bHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhcmlhYmxlIiBWYWx1 +ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2QiIFZhbHVlPSI0 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik9iamVjdFR5cGUiIFZhbHVlPSI4 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZhcmlhYmxlVHlwZSIgVmFsdWU9 +IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5jZVR5cGUiIFZh +bHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZSIgVmFs +dWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlZpZXciIFZhbHVlPSIx +MjgiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUg +TmFtZT0iUGVybWlzc2lvblR5cGUiIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVl +Ij4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2UiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlYWRSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IldyaXRlQXR0cmlidXRlIiBWYWx1ZT0i +NCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZVJvbGVQZXJtaXNzaW9u +cyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVIaXN0 +b3JpemluZyIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJl +YWQiIFZhbHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJXcml0ZSIg +VmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlYWRIaXN0b3J5 +IiBWYWx1ZT0iMTI4IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikluc2VydEhp +c3RvcnkiIFZhbHVlPSIyNTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTW9k +aWZ5SGlzdG9yeSIgVmFsdWU9IjUxMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJEZWxldGVIaXN0b3J5IiBWYWx1ZT0iMTAyNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJSZWNlaXZlRXZlbnRzIiBWYWx1ZT0iMjA0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJDYWxsIiBWYWx1ZT0iNDA5NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJBZGRSZWZlcmVuY2UiIFZhbHVlPSI4MTkyIiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlJlbW92ZVJlZmVyZW5jZSIgVmFsdWU9IjE2Mzg0IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRlbGV0ZU5vZGUiIFZhbHVlPSIzMjc2OCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBZGROb2RlIiBWYWx1ZT0iNjU1MzYiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iQWNj +ZXNzTGV2ZWxUeXBlIiBMZW5ndGhJbkJpdHM9IjgiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVu +dW1lcmF0ZWRWYWx1ZSBOYW1lPSJDdXJyZW50UmVhZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQ3VycmVudFdyaXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3J5UmVhZCIgVmFsdWU9IjQiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSGlzdG9yeVdyaXRlIiBWYWx1ZT0iOCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTZW1hbnRpY0NoYW5nZSIgVmFsdWU9IjE2IiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0YXR1c1dyaXRlIiBWYWx1ZT0iMzIiIC8+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVGltZXN0YW1wV3JpdGUiIFZhbHVlPSI2 +NCIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBO +YW1lPSJBY2Nlc3NMZXZlbEV4VHlwZSIgTGVuZ3RoSW5CaXRzPSIzMiIgSXNPcHRpb25TZXQ9InRy +dWUiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkN1cnJlbnRSZWFkIiBWYWx1ZT0iMSIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDdXJyZW50V3JpdGUiIFZhbHVlPSIyIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3RvcnlSZWFkIiBWYWx1ZT0iNCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3J5V3JpdGUiIFZhbHVlPSI4 +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNlbWFudGljQ2hhbmdlIiBWYWx1 +ZT0iMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RhdHVzV3JpdGUiIFZh +bHVlPSIzMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJUaW1lc3RhbXBXcml0 +ZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmF0b21p +Y1JlYWQiIFZhbHVlPSIyNTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9u +YXRvbWljV3JpdGUiIFZhbHVlPSI1MTIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iV3JpdGVGdWxsQXJyYXlPbmx5IiBWYWx1ZT0iMTAyNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJOb1N1YkRhdGFUeXBlcyIgVmFsdWU9IjIwNDgiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uVm9sYXRpbGUiIFZhbHVlPSI0MDk2IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbnN0YW50IiBWYWx1ZT0iODE5MiIgLz4NCiAgPC9v +cGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJFdmVudE5v +dGlmaWVyVHlwZSIgTGVuZ3RoSW5CaXRzPSI4IiBJc09wdGlvblNldD0idHJ1ZSI+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVt +ZXJhdGVkVmFsdWUgTmFtZT0iU3Vic2NyaWJlVG9FdmVudHMiIFZhbHVlPSIxIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikhpc3RvcnlSZWFkIiBWYWx1ZT0iNCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3J5V3JpdGUiIFZhbHVlPSI4IiAvPg0KICA8 +L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFjY2Vz +c1Jlc3RyaWN0aW9uVHlwZSIgTGVuZ3RoSW5CaXRzPSIxNiIgSXNPcHRpb25TZXQ9InRydWUiPg0K +ICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNpZ25pbmdSZXF1aXJlZCIgVmFsdWU9IjEiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRW5jcnlwdGlvblJlcXVpcmVkIiBWYWx1ZT0i +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTZXNzaW9uUmVxdWlyZWQiIFZh +bHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFwcGx5UmVzdHJpY3Rp +b25zVG9Ccm93c2UiIFZhbHVlPSI4IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJvbGVQZXJtaXNzaW9uVHlwZSIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSb2xlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQZXJtaXNzaW9ucyIgVHlwZU5h +bWU9InRuczpQZXJtaXNzaW9uVHlwZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVu +dW1lcmF0ZWRUeXBlIE5hbWU9IlN0cnVjdHVyZVR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlN0cnVjdHVyZSIgVmFsdWU9IjAiIC8+DQogICAg +PG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RydWN0dXJlV2l0aE9wdGlvbmFsRmllbGRzIiBW +YWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVbmlvbiIgVmFsdWU9 +IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU3RydWN0dXJlV2l0aFN1YnR5 +cGVkVmFsdWVzIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJV +bmlvbldpdGhTdWJ0eXBlZFZhbHVlcyIgVmFsdWU9IjQiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RydWN0dXJlRmllbGQiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZSIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIg +VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRh +VHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVl +UmFuayIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZB +cnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0i +Tm9PZkFycmF5RGltZW5zaW9ucyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heFN0cmluZ0xl +bmd0aCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc09w +dGlvbmFsIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU3RydWN0dXJlRGVmaW5pdGlvbiIgQmFz +ZVR5cGU9InRuczpEYXRhVHlwZURlZmluaXRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVm +YXVsdEVuY29kaW5nSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJCYXNlRGF0YVR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTdHJ1Y3R1cmVUeXBlIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVyZVR5cGUiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRmllbGRzIiBUeXBlTmFtZT0idG5zOlN0cnVjdHVyZUZpZWxk +IiBMZW5ndGhGaWVsZD0iTm9PZkZpZWxkcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbnVtRGVmaW5pdGlvbiIgQmFzZVR5cGU9InRu +czpEYXRhVHlwZURlZmluaXRpb24iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpZWxkcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpZWxkcyIgVHlw +ZU5hbWU9InRuczpFbnVtRmllbGQiIExlbmd0aEZpZWxkPSJOb09mRmllbGRzIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFyZ3VtZW50 +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5h +bWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVR5 +cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZVJh +bmsiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXJy +YXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQXJyYXlEaW1lbnNpb25zIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5v +T2ZBcnJheURpbWVuc2lvbnMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIg +VHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRW51bVZhbHVlVHlwZSIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9 +Im9wYzpJbnQ2NCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFt +ZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9u +IiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbnVtRmllbGQiIEJhc2VUeXBlPSJ0bnM6 +RW51bVZhbHVlVHlwZSI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9Im9w +YzpJbnQ2NCIgU291cmNlVHlwZT0idG5zOkVudW1WYWx1ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5 +cGU9InRuczpFbnVtVmFsdWVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRp +b24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6RW51bVZhbHVl +VHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9Ik9wdGlvblNldCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iVmFsaWRCaXRzIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJOb3JtYWxpemVk +U3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0i +RGVjaW1hbFN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl +IE5hbWU9IkR1cmF0aW9uU3RyaW5nIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOk9w +YXF1ZVR5cGUgTmFtZT0iVGltZVN0cmluZyI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoNCiAgPG9w +YzpPcGFxdWVUeXBlIE5hbWU9IkRhdGVTdHJpbmciPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQog +IDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJEdXJhdGlvbiI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+DQoN +CiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlV0Y1RpbWUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0K +DQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJMb2NhbGVJZCI+DQogIDwvb3BjOk9wYXF1ZVR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUaW1lWm9uZURhdGFUeXBlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik9mZnNldCIgVHlw +ZU5hbWU9Im9wYzpJbnQxNiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRheWxpZ2h0U2F2aW5n +SW5PZmZzZXQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IkluZGV4Ij4NCiAgPC9vcGM6T3BhcXVlVHlw +ZT4NCg0KICA8b3BjOk9wYXF1ZVR5cGUgTmFtZT0iSW50ZWdlcklkIj4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IkFwcGxpY2F0aW9uVHlwZSIgTGVu +Z3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2VydmVyIiBW +YWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJDbGllbnQiIFZhbHVl +PSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNsaWVudEFuZFNlcnZlciIg +VmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGlzY292ZXJ5U2Vy +dmVyIiBWYWx1ZT0iMyIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFwcGxpY2F0aW9uVXJpIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RVcmkiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXBwbGljYXRpb25O +YW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkFwcGxpY2F0aW9uVHlwZSIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvblR5cGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5U2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVByb2ZpbGVVcmkiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpc2NvdmVyeVVybHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNjb3ZlcnlVcmxz +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaXNjb3ZlcnlVcmxzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlJlcXVlc3RIZWFkZXIiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQXV0aGVudGljYXRpb25Ub2tlbiIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVzdGFtcCIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuRGlhZ25vc3RpY3MiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXVkaXRFbnRyeUlkIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpbWVvdXRIaW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZGl0aW9uYWxI +ZWFkZXIiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0 +YW1wIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVx +dWVzdEhhbmRsZSIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJTZXJ2aWNlUmVzdWx0IiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlcnZpY2VEaWFnbm9zdGljcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZv +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN0cmluZ1RhYmxlIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RyaW5nVGFibGUiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9PZlN0cmluZ1RhYmxlIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWRkaXRpb25hbEhlYWRlciIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBlIE5hbWU9IlZl +cnNpb25UaW1lIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IlNlcnZpY2VGYXVsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhl +YWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVyaXNWZXJzaW9uIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOYW1lc3BhY2VVcmlzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlVXJp +cyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mTmFtZXNwYWNlVXJpcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpcyIgVHlwZU5hbWU9Im9wYzpT +dHJpbmciIExlbmd0aEZpZWxkPSJOb09mU2VydmVyVXJpcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZMb2NhbGVJZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJMb2NhbGVJZHMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiBMZW5ndGhGaWVsZD0iTm9P +ZkxvY2FsZUlkcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZpY2VJZCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXNwb25zZVR5cGUiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5hbWVzcGFjZVVy +aXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOYW1lc3Bh +Y2VVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZOYW1lc3BhY2VV +cmlzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlclVyaXMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmlzIiBUeXBlTmFtZT0i +b3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJVcmlzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU2VydmljZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVyc1Jl +cXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkxvY2FsZUlkcyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExl +bmd0aEZpZWxkPSJOb09mTG9jYWxlSWRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNl +cnZlclVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +ZXJ2ZXJVcmlzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJV +cmlzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVz +cG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIgVHlwZU5h +bWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5cGVOYW1l +PSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJzIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlNlcnZlck9uTmV0d29yayIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZWNvcmRJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZXJ2ZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkRpc2NvdmVyeVVybCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2ZXJDYXBhYmlsaXRpZXMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +RmluZFNlcnZlcnNPbk5ldHdvcmtSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVx +dWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0aW5nUmVjb3JkSWQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVjb3Jkc1Rv +UmV0dXJuIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZTZXJ2ZXJDYXBhYmlsaXR5RmlsdGVyIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iU2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIExlbmd0aEZpZWxkPSJOb09mU2VydmVyQ2FwYWJpbGl0eUZpbHRlciIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJGaW5kU2VydmVy +c09uTmV0d29ya1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVh +ZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdENvdW50ZXJSZXNldFRpbWUiIFR5cGVO +YW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVycyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlcnMiIFR5 +cGVOYW1lPSJ0bnM6U2VydmVyT25OZXR3b3JrIiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlcnMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlwZSBOYW1lPSJBcHBs +aWNhdGlvbkluc3RhbmNlQ2VydGlmaWNhdGUiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxv +cGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSIgTGVuZ3RoSW5CaXRz +PSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW52YWxpZCIgVmFsdWU9IjAi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9uZSIgVmFsdWU9IjEiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2lnbiIgVmFsdWU9IjIiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2lnbkFuZEVuY3J5cHQiIFZhbHVlPSIzIiAvPg0KICA8 +L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9IlVzZXJU +b2tlblR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IkFub255bW91cyIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iVXNlck5hbWUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +IkNlcnRpZmljYXRlIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJJc3N1ZWRUb2tlbiIgVmFsdWU9IjMiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlclRva2VuUG9saWN5IiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFt +ZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuVHlwZSIgVHlwZU5h +bWU9InRuczpVc2VyVG9rZW5UeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNzdWVkVG9r +ZW5UeXBlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklz +c3VlckVuZHBvaW50VXJsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbmRwb2lu +dERlc2NyaXB0aW9uIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IkVuZHBvaW50VXJsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNlcnZlciIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9u +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyQ2VydGlmaWNhdGUiIFR5cGVOYW1lPSJv +cGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlw +ZU5hbWU9InRuczpNZXNzYWdlU2VjdXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2VjdXJpdHlQb2xpY3lVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZlVzZXJJZGVudGl0eVRva2VucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJJZGVudGl0eVRva2VucyIgVHlwZU5hbWU9InRuczpV +c2VyVG9rZW5Qb2xpY3kiIExlbmd0aEZpZWxkPSJOb09mVXNlcklkZW50aXR5VG9rZW5zIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgVHlwZU5hbWU9Im9wYzpT +dHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eUxldmVsIiBUeXBlTmFtZT0i +b3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iR2V0RW5kcG9pbnRzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmRwb2ludFVybCIgVHlw +ZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRz +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUHJvZmlsZVVyaXMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcm9maWxlVXJpcyIgVHlwZU5hbWU9Im9wYzpTdHJp +bmciIExlbmd0aEZpZWxkPSJOb09mUHJvZmlsZVVyaXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2V0RW5kcG9pbnRzUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mRW5kcG9pbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRW5kcG9pbnRzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50RGVzY3JpcHRp +b24iIExlbmd0aEZpZWxkPSJOb09mRW5kcG9pbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVyZWRTZXJ2ZXIiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJp +IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlByb2R1Y3RV +cmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlNl +cnZlck5hbWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U2VydmVyTmFtZXMiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBMZW5ndGhGaWVsZD0iTm9P +ZlNlcnZlck5hbWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVHlwZSIgVHlwZU5h +bWU9InRuczpBcHBsaWNhdGlvblR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJHYXRld2F5 +U2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZEaXNjb3ZlcnlVcmxzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGlzY292ZXJ5VXJscyIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIExlbmd0aEZpZWxk +PSJOb09mRGlzY292ZXJ5VXJscyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlbWFwaG9yZUZp +bGVQYXRoIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklz +T25saW5lIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXF1ZXN0IiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVl +c3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlcnZlciIgVHlwZU5hbWU9InRuczpSZWdpc3RlcmVkU2VydmVyIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZ2lzdGVy +U2VydmVyUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIi +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +TWRuc0Rpc2NvdmVyeUNvbmZpZ3VyYXRpb24iIEJhc2VUeXBlPSJ0bnM6RGlzY292ZXJ5Q29uZmln +dXJhdGlvbiI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNZG5zU2VydmVyTmFtZSIgVHlwZU5hbWU9 +Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mU2VydmVyQ2FwYWJpbGl0 +aWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVy +Q2FwYWJpbGl0aWVzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZTZXJ2 +ZXJDYXBhYmlsaXRpZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXIi +IFR5cGVOYW1lPSJ0bnM6UmVnaXN0ZXJlZFNlcnZlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRGlzY292ZXJ5Q29uZmlndXJhdGlvbiIgVHlwZU5hbWU9InVhOkV4 +dGVuc2lvbk9iamVjdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkNvbmZpZ3VyYXRpb25SZXN1 +bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29uZmln +dXJhdGlvblJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9P +ZkNvbmZpZ3VyYXRpb25SZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdu +b3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVs +ZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUiIExlbmd0 +aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Iklzc3VlIiBWYWx1 +ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZW5ldyIgVmFsdWU9IjEi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iQ2hhbm5lbFNlY3VyaXR5VG9rZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ2hhbm5lbElkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JlYXRlZEF0IiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZExpZmV0aW1lIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRu +czpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50UHJvdG9jb2xW +ZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +cXVlc3RUeXBlIiBUeXBlTmFtZT0idG5zOlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5TW9kZSIgVHlwZU5hbWU9InRuczpNZXNzYWdlU2Vj +dXJpdHlNb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1l +PSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RlZExpZmV0 +aW1lIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJPcGVuU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU2VydmVyUHJvdG9jb2xWZXJzaW9uIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5VG9rZW4iIFR5cGVOYW1lPSJ0bnM6Q2hhbm5l +bFNlY3VyaXR5VG9rZW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJOb25jZSIgVHlw +ZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJl +c3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpZ25l +ZFNvZnR3YXJlQ2VydGlmaWNhdGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQ2VydGlmaWNhdGVEYXRhIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJp +bmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTaWduYXR1cmUiIFR5cGVOYW1lPSJvcGM6Qnl0 +ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVUeXBl +IE5hbWU9IlNlc3Npb25BdXRoZW50aWNhdGlvblRva2VuIj4NCiAgPC9vcGM6T3BhcXVlVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNpZ25hdHVyZURhdGEiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWxnb3JpdGhtIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNpZ25hdHVyZSIgVHlw +ZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNyZWF0ZVNlc3Npb25SZXF1ZXN0IiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIi +IFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNs +aWVudERlc2NyaXB0aW9uIiBUeXBlTmFtZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXJ2ZXJVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5kcG9pbnRVcmwiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvbk5hbWUiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50Tm9uY2UiIFR5cGVOYW1lPSJvcGM6 +Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudENlcnRpZmljYXRlIiBU +eXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0 +ZWRTZXNzaW9uVGltZW91dCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJNYXhSZXNwb25zZU1lc3NhZ2VTaXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJD +cmVhdGVTZXNzaW9uUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VI +ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdXRoZW50aWNhdGlvblRva2VuIiBUeXBl +TmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFNlc3Npb25U +aW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNl +cnZlck5vbmNlIiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTZXJ2ZXJDZXJ0aWZpY2F0ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlckVuZHBvaW50cyIgVHlwZU5hbWU9InRu +czpFbmRwb2ludERlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZlNlcnZlckVuZHBvaW50cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclNvZnR3 +YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUi +IExlbmd0aEZpZWxkPSJOb09mU2VydmVyU29mdHdhcmVDZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTZXJ2ZXJTaWduYXR1cmUiIFR5cGVOYW1lPSJ0bnM6U2lnbmF0dXJlRGF0 +YSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heFJlcXVlc3RNZXNzYWdlU2l6ZSIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iVXNlcklkZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6 +U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkFub255bW91c0lkZW50aXR5VG9rZW4iIEJhc2VUeXBlPSJ0bnM6VXNlcklkZW50 +aXR5VG9rZW4iPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUG9saWN5SWQiIFR5cGVOYW1lPSJvcGM6 +U3RyaW5nIiBTb3VyY2VUeXBlPSJ0bnM6VXNlcklkZW50aXR5VG9rZW4iIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVXNlck5hbWVJZGVu +dGl0eVRva2VuIiBCYXNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlBvbGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5z +OlVzZXJJZGVudGl0eVRva2VuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlck5hbWUiIFR5 +cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFzc3dvcmQiIFR5 +cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuY3J5cHRp +b25BbGdvcml0aG0iIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ilg1MDlJZGVudGl0eVRva2VuIiBC +YXNlVHlwZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBv +bGljeUlkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgU291cmNlVHlwZT0idG5zOlVzZXJJZGVudGl0 +eVRva2VuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2VydGlmaWNhdGVEYXRhIiBUeXBlTmFt +ZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iSXNzdWVkSWRlbnRpdHlUb2tlbiIgQmFzZVR5cGU9InRuczpV +c2VySWRlbnRpdHlUb2tlbiI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQb2xpY3lJZCIgVHlwZU5h +bWU9Im9wYzpTdHJpbmciIFNvdXJjZVR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlRva2VuRGF0YSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5jcnlwdGlvbkFsZ29yaXRobSIgVHlwZU5hbWU9Im9w +YzpTdHJpbmciIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6T3BhcXVlVHlw +ZSBOYW1lPSJSc2FFbmNyeXB0ZWRTZWNyZXQiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxv +cGM6T3BhcXVlVHlwZSBOYW1lPSJFY2NFbmNyeXB0ZWRTZWNyZXQiPg0KICA8L29wYzpPcGFxdWVU +eXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVz +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJDbGllbnRTaWduYXR1cmUiIFR5cGVOYW1lPSJ0bnM6U2lnbmF0dXJlRGF0YSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDbGllbnRTb2Z0d2FyZUNlcnRpZmljYXRlcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNsaWVudFNvZnR3 +YXJlQ2VydGlmaWNhdGVzIiBUeXBlTmFtZT0idG5zOlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUi +IExlbmd0aEZpZWxkPSJOb09mQ2xpZW50U29mdHdhcmVDZXJ0aWZpY2F0ZXMiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTG9jYWxlSWRzIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZMb2NhbGVJZHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VySWRlbnRp +dHlUb2tlbiIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlVzZXJUb2tlblNpZ25hdHVyZSIgVHlwZU5hbWU9InRuczpTaWduYXR1cmVEYXRhIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkFjdGl2YXRlU2Vzc2lvblJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VydmVyTm9uY2UiIFR5cGVOYW1l +PSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlw +ZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2xvc2VT +ZXNzaW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zIiBUeXBlTmFtZT0ib3Bj +OkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQ2xvc2VTZXNzaW9uUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0 +bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iQ2FuY2VsUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0i +dG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGFuZGxl +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYW5jZWxSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNhbmNl +bENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJOb2RlQXR0cmlidXRlc01hc2siIExlbmd0 +aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vbmUiIFZhbHVl +PSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc0xldmVsIiBWYWx1 +ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBcnJheURpbWVuc2lvbnMi +IFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJyb3dzZU5hbWUi +IFZhbHVlPSI0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNvbnRhaW5zTm9M +b29wcyIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRGF0YVR5 +cGUiIFZhbHVlPSIxNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEZXNjcmlw +dGlvbiIgVmFsdWU9IjMyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRpc3Bs +YXlOYW1lIiBWYWx1ZT0iNjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXZl +bnROb3RpZmllciIgVmFsdWU9IjEyOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJFeGVjdXRhYmxlIiBWYWx1ZT0iMjU2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ikhpc3Rvcml6aW5nIiBWYWx1ZT0iNTEyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9IkludmVyc2VOYW1lIiBWYWx1ZT0iMTAyNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJJc0Fic3RyYWN0IiBWYWx1ZT0iMjA0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIgVmFsdWU9IjQwOTYiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZUNsYXNzIiBWYWx1ZT0iODE5MiIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJOb2RlSWQiIFZhbHVlPSIxNjM4NCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTeW1tZXRyaWMiIFZhbHVlPSIzMjc2OCIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyQWNjZXNzTGV2ZWwiIFZhbHVl +PSI2NTUzNiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2VyRXhlY3V0YWJs +ZSIgVmFsdWU9IjEzMTA3MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVc2Vy +V3JpdGVNYXNrIiBWYWx1ZT0iMjYyMTQ0IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IlZhbHVlUmFuayIgVmFsdWU9IjUyNDI4OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJXcml0ZU1hc2siIFZhbHVlPSIxMDQ4NTc2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlZhbHVlIiBWYWx1ZT0iMjA5NzE1MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIFZhbHVlPSI0MTk0MzA0IiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgVmFsdWU9IjgzODg2 +MDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWNjZXNzUmVzdHJpY3Rpb25z +IiBWYWx1ZT0iMTY3NzcyMTYiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQWxs +IiBWYWx1ZT0iMzM1NTQ0MzEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQmFz +ZU5vZGUiIFZhbHVlPSIyNjUwMTIyMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJPYmplY3QiIFZhbHVlPSIyNjUwMTM0OCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJPYmplY3RUeXBlIiBWYWx1ZT0iMjY1MDMyNjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iVmFyaWFibGUiIFZhbHVlPSIyNjU3MTM4MyIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJWYXJpYWJsZVR5cGUiIFZhbHVlPSIyODYwMDQzOCIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJNZXRob2QiIFZhbHVlPSIyNjYzMjU0OCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZlcmVuY2VUeXBlIiBWYWx1ZT0iMjY1Mzcw +NjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVmlldyIgVmFsdWU9IjI2NTAx +MzU2IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9Ik5vZGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpM +b2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVO +YW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNr +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0 +ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9iamVjdEF0dHJpYnV0ZXMiIEJhc2VUeXBl +PSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3BlY2lmaWVkQXR0 +cmlidXRlcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmli +dXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6 +TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBT +b3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJX +cml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRXZlbnROb3RpZmllciIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlZhcmlhYmxl +QXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNl +VHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxh +eU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0 +dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9 +InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJj +ZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJX +cml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWYWx1ZSIgVHlwZU5hbWU9InVhOlZhcmlh +bnQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhVHlwZSIgVHlwZU5hbWU9InVhOk5vZGVJ +ZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlUmFuayIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBcnJheURpbWVuc2lvbnMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBcnJheURpbWVuc2lvbnMiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZkFycmF5RGltZW5zaW9ucyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkFjY2Vzc0xldmVsIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyQWNjZXNzTGV2ZWwiIFR5cGVOYW1lPSJvcGM6Qnl0 +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1pbmltdW1TYW1wbGluZ0ludGVydmFsIiBUeXBl +TmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikhpc3Rvcml6aW5nIiBU +eXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTWV0aG9kQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpO +b2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVz +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6 +ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFz +ayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJFeGVjdXRhYmxlIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJVc2VyRXhlY3V0YWJsZSIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik9iamVjdFR5 +cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3Vy +Y2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNw +bGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2Rl +QXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFt +ZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291 +cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNl +cldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJv +cGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJWYXJpYWJsZVR5cGVBdHRyaWJ1dGVzIiBCYXNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmllZEF0dHJpYnV0ZXMiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRl +eHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4dCIgU291cmNlVHlwZT0i +dG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iV3JpdGVNYXNrIiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRh +dGFUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFs +dWVSYW5rIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkFycmF5RGltZW5zaW9ucyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxk +PSJOb09mQXJyYXlEaW1lbnNpb25zIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSXNBYnN0cmFj +dCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZmVyZW5jZVR5cGVBdHRyaWJ1dGVzIiBCYXNl +VHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNwZWNpZmll +ZEF0dHJpYnV0ZXMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0 +dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9 +InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6TG9jYWxpemVkVGV4 +dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVB +dHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlcldyaXRlTWFzayIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IklzQWJzdHJhY3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN5bW1ldHJpYyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iSW52ZXJzZU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRU +ZXh0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IkRhdGFUeXBlQXR0cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGlzcGxheU5hbWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlw +dGlvbiIgVHlwZU5hbWU9InVhOkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0 +cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9w +YzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlVzZXJXcml0ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBl +PSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0Fic3RyYWN0 +IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVmlld0F0dHJpYnV0ZXMiIEJhc2VUeXBlPSJ0bnM6 +Tm9kZUF0dHJpYnV0ZXMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3BlY2lmaWVkQXR0cmlidXRl +cyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxp +emVkVGV4dCIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGVzY3JpcHRpb24iIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VU +eXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZU1h +c2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VyV3JpdGVNYXNrIiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgU291cmNlVHlwZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iQ29udGFpbnNOb0xvb3BzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJFdmVudE5vdGlmaWVyIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iR2VuZXJp +Y0F0dHJpYnV0ZVZhbHVlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJHZW5lcmljQXR0 +cmlidXRlcyIgQmFzZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgU291cmNlVHlw +ZT0idG5zOk5vZGVBdHRyaWJ1dGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzcGxheU5h +bWUiIFR5cGVOYW1lPSJ1YTpMb2NhbGl6ZWRUZXh0IiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJp +YnV0ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZXNjcmlwdGlvbiIgVHlwZU5hbWU9InVh +OkxvY2FsaXplZFRleHQiIFNvdXJjZVR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IldyaXRlTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIFNvdXJjZVR5 +cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZXJXcml0 +ZU1hc2siIFR5cGVOYW1lPSJvcGM6VUludDMyIiBTb3VyY2VUeXBlPSJ0bnM6Tm9kZUF0dHJpYnV0 +ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mQXR0cmlidXRlVmFsdWVzIiBUeXBlTmFt +ZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQXR0cmlidXRlVmFsdWVzIiBU +eXBlTmFtZT0idG5zOkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZBdHRy +aWJ1dGVWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNJdGVtIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlBhcmVudE5vZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFu +ZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBl +TmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTmV3Tm9k +ZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJCcm93c2VOYW1lIiBUeXBlTmFtZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vZGVDbGFzcyIgVHlwZU5hbWU9InRuczpOb2RlQ2xhc3MiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb2RlQXR0cmlidXRlcyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVj +dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlR5cGVEZWZpbml0aW9uIiBUeXBlTmFtZT0idWE6 +RXhwYW5kZWROb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iQWRkTm9kZXNSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0 +YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZGRlZE5vZGVJZCIgVHlwZU5hbWU9 +InVhOk5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJBZGROb2Rlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpS +ZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9BZGQiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvQWRkIiBU +eXBlTmFtZT0idG5zOkFkZE5vZGVzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvQWRkIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkFkZE5vZGVzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFk +ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6QWRk +Tm9kZXNSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGlj +SW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQWRkUmVmZXJlbmNlc0l0 +ZW0iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U291cmNlTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVmZXJlbmNlVHlwZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iSXNGb3J3YXJkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJUYXJnZXRTZXJ2ZXJVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2Rl +SWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXROb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0 +bnM6Tm9kZUNsYXNzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5jZXNSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1l +PSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVu +Y2VzVG9BZGQiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZWZlcmVuY2VzVG9BZGQiIFR5cGVOYW1lPSJ0bnM6QWRkUmVmZXJlbmNlc0l0ZW0iIExlbmd0aEZp +ZWxkPSJOb09mUmVmZXJlbmNlc1RvQWRkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkFkZFJlZmVyZW5jZXNSZXNwb25zZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09m +UmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5m +b3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9z +dGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iRGVsZXRlTm9kZXNJdGVtIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlbGV0ZVRhcmdldFJlZmVyZW5jZXMiIFR5cGVOYW1lPSJv +cGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJEZWxldGVOb2Rlc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRu +czpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9EZWxl +dGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1Rv +RGVsZXRlIiBUeXBlTmFtZT0idG5zOkRlbGV0ZU5vZGVzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZO +b2Rlc1RvRGVsZXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1l +PSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0 +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMi +IFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0i +dWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0K +ICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRl +bGV0ZVJlZmVyZW5jZXNJdGVtIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlNvdXJjZU5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IklzRm9yd2FyZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFu +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGFyZ2V0Tm9kZUlkIiBUeXBlTmFtZT0idWE6RXhw +YW5kZWROb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVCaWRpcmVjdGlvbmFs +IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRlUmVmZXJlbmNlc1JlcXVlc3QiIEJhc2VU +eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhl +YWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlJlZmVyZW5jZXNUb0RlbGV0ZSIgVHlwZU5hbWU9InRuczpEZWxldGVS +ZWZlcmVuY2VzSXRlbSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZWZlcmVuY2VzVG9EZWxldGUiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVs +ZXRlUmVmZXJlbmNlc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNl +SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idWE6 +U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJ +bmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJBdHRyaWJ1dGVXcml0ZU1h +c2siIExlbmd0aEluQml0cz0iMzIiIElzT3B0aW9uU2V0PSJ0cnVlIj4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJBY2Nlc3NMZXZlbCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iQXJyYXlEaW1lbnNpb25zIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJDb250YWluc05vTG9vcHMiIFZhbHVlPSI4IiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRhdGFUeXBlIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iRGVzY3JpcHRpb24iIFZhbHVlPSIzMiIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFsdWU9IjY0IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkV2ZW50Tm90aWZpZXIiIFZhbHVlPSIxMjgiIC8+DQog +ICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iRXhlY3V0YWJsZSIgVmFsdWU9IjI1NiIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIaXN0b3JpemluZyIgVmFsdWU9IjUxMiIg +Lz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJbnZlcnNlTmFtZSIgVmFsdWU9IjEw +MjQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSXNBYnN0cmFjdCIgVmFsdWU9 +IjIwNDgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTWluaW11bVNhbXBsaW5n +SW50ZXJ2YWwiIFZhbHVlPSI0MDk2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9 +Ik5vZGVDbGFzcyIgVmFsdWU9IjgxOTIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iTm9kZUlkIiBWYWx1ZT0iMTYzODQiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iU3ltbWV0cmljIiBWYWx1ZT0iMzI3NjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iVXNlckFjY2Vzc0xldmVsIiBWYWx1ZT0iNjU1MzYiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iVXNlckV4ZWN1dGFibGUiIFZhbHVlPSIxMzEwNzIiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iVXNlcldyaXRlTWFzayIgVmFsdWU9IjI2MjE0NCIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYWx1ZVJhbmsiIFZhbHVlPSI1MjQyODgi +IC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iV3JpdGVNYXNrIiBWYWx1ZT0iMTA0 +ODU3NiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJWYWx1ZUZvclZhcmlhYmxl +VHlwZSIgVmFsdWU9IjIwOTcxNTIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0i +RGF0YVR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iNDE5NDMwNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0 +ZWRWYWx1ZSBOYW1lPSJSb2xlUGVybWlzc2lvbnMiIFZhbHVlPSI4Mzg4NjA4IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc1Jlc3RyaWN0aW9ucyIgVmFsdWU9IjE2Nzc3 +MjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFjY2Vzc0xldmVsRXgiIFZh +bHVlPSIzMzU1NDQzMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVt +ZXJhdGVkVHlwZSBOYW1lPSJCcm93c2VEaXJlY3Rpb24iIExlbmd0aEluQml0cz0iMzIiPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZvcndhcmQiIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkludmVyc2UiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IkludmFsaWQiIFZhbHVlPSIzIiAvPg0KICA8L29wYzpFbnVtZXJhdGVk +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlZpZXdEZXNjcmlwdGlvbiIgQmFz +ZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWaWV3SWQi +IFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUaW1lc3RhbXAi +IFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWaWV3VmVy +c2lvbiIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlRGVzY3JpcHRpb24iIEJhc2VUeXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBl +TmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlRGlyZWN0aW9u +IiBUeXBlTmFtZT0idG5zOkJyb3dzZURpcmVjdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkluY2x1ZGVTdWJ0eXBlcyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9kZUNsYXNzTWFzayIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRNYXNrIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJC +cm93c2VSZXN1bHRNYXNrIiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJSZWZlcmVuY2VUeXBlSWQiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IklzRm9yd2FyZCIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iTm9kZUNsYXNzIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJCcm93c2VOYW1lIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1 +ZSBOYW1lPSJEaXNwbGF5TmFtZSIgVmFsdWU9IjE2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9IlR5cGVEZWZpbml0aW9uIiBWYWx1ZT0iMzIiIC8+DQogICAgPG9wYzpFbnVtZXJh +dGVkVmFsdWUgTmFtZT0iQWxsIiBWYWx1ZT0iNjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFs +dWUgTmFtZT0iUmVmZXJlbmNlVHlwZUluZm8iIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlRhcmdldEluZm8iIFZhbHVlPSI2MCIgLz4NCiAgPC9vcGM6RW51bWVy +YXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWZlcmVuY2VEZXNjcmlw +dGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJJc0ZvcndhcmQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQnJvd3NlTmFtZSIgVHlwZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNwbGF5TmFtZSIgVHlwZU5hbWU9InVhOkxvY2FsaXpl +ZFRleHQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlQ2xhc3MiIFR5cGVOYW1lPSJ0bnM6 +Tm9kZUNsYXNzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHlwZURlZmluaXRpb24iIFR5cGVO +YW1lPSJ1YTpFeHBhbmRlZE5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpPcGFxdWVUeXBlIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50Ij4NCiAgPC9vcGM6T3BhcXVl +VHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb3dzZVJlc3VsdCIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2Rl +IiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRp +bnVhdGlvblBvaW50IiBUeXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mUmVmZXJlbmNlcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlZmVyZW5jZXMiIFR5cGVOYW1lPSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRp +b24iIExlbmd0aEZpZWxkPSJOb09mUmVmZXJlbmNlcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm93c2VSZXF1ZXN0IiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFk +ZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlZpZXciIFR5cGVOYW1lPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVxdWVzdGVkTWF4UmVmZXJlbmNlc1Blck5vZGUiIFR5cGVOYW1lPSJvcGM6VUludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9Ccm93c2UiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvQnJvd3NlIiBUeXBlTmFt +ZT0idG5zOkJyb3dzZURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZk5vZGVzVG9Ccm93c2Ui +IC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFt +ZT0iQnJvd3NlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFk +ZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6QnJv +d3NlUmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0lu +Zm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0 +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +cXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2ludHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVh +biIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZDb250aW51YXRpb25Qb2ludHMiIFR5cGVO +YW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDb250aW51YXRpb25Qb2lu +dHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZDb250aW51YXRp +b25Qb2ludHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iQnJvd3NlTmV4dFJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBl +TmFtZT0idG5zOkJyb3dzZVJlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVh +OkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWxh +dGl2ZVBhdGhFbGVtZW50IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IklzSW52ZXJzZSIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iSW5jbHVkZVN1YnR5cGVzIiBUeXBlTmFtZT0ib3BjOkJvb2xl +YW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUYXJnZXROYW1lIiBUeXBlTmFtZT0idWE6UXVh +bGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJSZWxhdGl2ZVBhdGgiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkVsZW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRWxlbWVudHMiIFR5cGVOYW1lPSJ0bnM6UmVsYXRp +dmVQYXRoRWxlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbGVtZW50cyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm93c2VQYXRoIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0 +aW5nTm9kZSIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +bGF0aXZlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2ZVBhdGgiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnJvd3NlUGF0aFRhcmdl +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJU +YXJnZXRJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVtYWluaW5nUGF0aEluZGV4IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJCcm93c2VQ +YXRoUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZlRhcmdldHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJUYXJnZXRzIiBUeXBlTmFtZT0idG5zOkJyb3dzZVBhdGhUYXJnZXQiIExl +bmd0aEZpZWxkPSJOb09mVGFyZ2V0cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAg +PG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1Jl +cXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkJyb3dzZVBhdGhzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aHMiIFR5cGVOYW1lPSJ0bnM6QnJvd3NlUGF0 +aCIgTGVuZ3RoRmllbGQ9Ik5vT2ZCcm93c2VQYXRocyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2xhdGVCcm93c2VQYXRoc1Rv +Tm9kZUlkc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkJyb3dz +ZVBhdGhSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGlj +SW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1Jl +cXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWdpc3RlciIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVzVG9SZWdpc3RlciIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvUmVnaXN0ZXIiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVnaXN0ZXJOb2Rlc1Jl +c3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlZ2lzdGVyZWROb2RlSWRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVnaXN0ZXJlZE5vZGVJZHMiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIExlbmd0aEZpZWxkPSJOb09mUmVnaXN0ZXJlZE5vZGVJZHMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iVW5yZWdp +c3Rlck5vZGVzUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9kZXNUb1VucmVnaXN0ZXIiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2Rlc1RvVW5yZWdpc3RlciIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rlc1RvVW5yZWdpc3RlciIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJVbnJlZ2lzdGVyTm9kZXNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNw +b25zZUhlYWRlciIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpPcGFxdWVU +eXBlIE5hbWU9IkNvdW50ZXIiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6T3BhcXVl +VHlwZSBOYW1lPSJOdW1lcmljUmFuZ2UiPg0KICA8L29wYzpPcGFxdWVUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iRW5kcG9pbnRDb25maWd1cmF0aW9uIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik9wZXJhdGlvblRpbWVvdXQi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJVc2VCaW5hcnlF +bmNvZGluZyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TWF4U3RyaW5nTGVuZ3RoIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTWF4Qnl0ZVN0cmluZ0xlbmd0aCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik1heEFycmF5TGVuZ3RoIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4TWVzc2FnZVNpemUiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhCdWZmZXJTaXplIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2hhbm5lbExpZmV0aW1lIiBUeXBlTmFtZT0i +b3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlUb2tlbkxpZmV0aW1l +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlF1ZXJ5RGF0YURlc2NyaXB0aW9uIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGF0aXZlUGF0aCIg +VHlwZU5hbWU9InRuczpSZWxhdGl2ZVBhdGgiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRy +aWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJ +bmRleFJhbmdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb2RlVHlwZURlc2NyaXB0aW9uIiBC +YXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlR5cGVE +ZWZpbml0aW9uTm9kZSIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iSW5jbHVkZVN1YlR5cGVzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGF0YVRvUmV0dXJuIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YVRvUmV0dXJuIiBUeXBlTmFtZT0idG5zOlF1 +ZXJ5RGF0YURlc2NyaXB0aW9uIiBMZW5ndGhGaWVsZD0iTm9PZkRhdGFUb1JldHVybiIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJGaWx0 +ZXJPcGVyYXRvciIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iRXF1YWxzIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJJc051bGwiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ikdy +ZWF0ZXJUaGFuIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJM +ZXNzVGhhbiIgVmFsdWU9IjMiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iR3Jl +YXRlclRoYW5PckVxdWFsIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJMZXNzVGhhbk9yRXF1YWwiIFZhbHVlPSI1IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9Ikxpa2UiIFZhbHVlPSI2IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9Ik5vdCIgVmFsdWU9IjciIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQmV0 +d2VlbiIgVmFsdWU9IjgiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5MaXN0 +IiBWYWx1ZT0iOSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJBbmQiIFZhbHVl +PSIxMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPciIgVmFsdWU9IjExIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkNhc3QiIFZhbHVlPSIxMiIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJJblZpZXciIFZhbHVlPSIxMyIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJPZlR5cGUiIFZhbHVlPSIxNCIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWxhdGVkVG8iIFZhbHVlPSIxNSIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJCaXR3aXNlQW5kIiBWYWx1ZT0iMTYiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iQml0d2lzZU9yIiBWYWx1ZT0iMTciIC8+DQogIDwvb3Bj +OkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUXVlcnlEYXRh +U2V0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vZGVJZCIgVHlwZU5hbWU9InVhOkV4cGFuZGVkTm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiBUeXBlTmFtZT0idWE6RXhwYW5kZWROb2RlSWQiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVmFsdWVzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgTGVu +Z3RoRmllbGQ9Ik5vT2ZWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTm9kZVJlZmVyZW5jZSIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWZlcmVuY2VUeXBlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJc0ZvcndhcmQiIFR5cGVOYW1l +PSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZWZlcmVuY2VkTm9k +ZUlkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlZmVy +ZW5jZWROb2RlSWRzIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBMZW5ndGhGaWVsZD0iTm9PZlJlZmVy +ZW5jZWROb2RlSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50IiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkZpbHRlck9wZXJhdG9yIiBUeXBlTmFt +ZT0idG5zOkZpbHRlck9wZXJhdG9yIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkZpbHRl +ck9wZXJhbmRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RmlsdGVyT3BlcmFuZHMiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIExlbmd0aEZpZWxk +PSJOb09mRmlsdGVyT3BlcmFuZHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxv +cGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ29udGVudEZpbHRlciIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRWxlbWVudHMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbGVtZW50cyIgVHlwZU5hbWU9 +InRuczpDb250ZW50RmlsdGVyRWxlbWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFbGVtZW50cyIgLz4N +CiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJG +aWx0ZXJPcGVyYW5kIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFbGVtZW50T3BlcmFu +ZCIgQmFzZVR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Iklu +ZGV4IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJMaXRlcmFsT3BlcmFuZCIgQmFzZVR5cGU9InRu +czpGaWx0ZXJPcGVyYW5kIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFtZT0i +dWE6VmFyaWFudCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJBdHRyaWJ1dGVPcGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9wZXJh +bmQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQWxpYXMiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aCIgVHlwZU5hbWU9InRuczpSZWxhdGl2ZVBh +dGgiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJZCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmRleFJhbmdlIiBUeXBlTmFtZT0ib3Bj +OlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiBCYXNlVHlwZT0idG5zOkZpbHRlck9w +ZXJhbmQiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVHlwZURlZmluaXRpb25JZCIgVHlwZU5hbWU9 +InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZCcm93c2VQYXRoIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlUGF0aCIgVHlw +ZU5hbWU9InVhOlF1YWxpZmllZE5hbWUiIExlbmd0aEZpZWxkPSJOb09mQnJvd3NlUGF0aCIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0 +dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk9wZXJhbmRTdGF0dXNDb2RlcyIg +VHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik9wZXJhbmRTdGF0 +dXNDb2RlcyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mT3BlcmFu +ZFN0YXR1c0NvZGVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk9wZXJhbmREaWFnbm9z +dGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJP +cGVyYW5kRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0 +aEZpZWxkPSJOb09mT3BlcmFuZERpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb250ZW50RmlsdGVyUmVzdWx0 +IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZFbGVtZW50UmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkVsZW1lbnRSZXN1bHRzIiBUeXBlTmFtZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50 +UmVzdWx0IiBMZW5ndGhGaWVsZD0iTm9PZkVsZW1lbnRSZXN1bHRzIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iTm9PZkVsZW1lbnREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbGVtZW50RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt +ZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRWxlbWVudERpYWdub3N0aWNJ +bmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlw +ZSBOYW1lPSJQYXJzaW5nUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFTdGF0dXNDb2RlcyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRhdGFTdGF0dXNDb2RlcyIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mRGF0YVN0YXR1c0NvZGVzIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRhdGFEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEYXRhRGlhZ25vc3RpY0luZm9zIiBU +eXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGF0YURpYWdub3N0 +aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVj +dCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJl +cXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJWaWV3IiBUeXBlTmFtZT0idG5z +OlZpZXdEZXNjcmlwdGlvbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZOb2RlVHlwZXMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlVHlwZXMi +IFR5cGVOYW1lPSJ0bnM6Tm9kZVR5cGVEZXNjcmlwdGlvbiIgTGVuZ3RoRmllbGQ9Ik5vT2ZOb2Rl +VHlwZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1lPSJ0bnM6Q29u +dGVudEZpbHRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1heERhdGFTZXRzVG9SZXR1cm4i +IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4UmVmZXJl +bmNlc1RvUmV0dXJuIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJRdWVyeUZpcnN0UmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mUXVlcnlEYXRhU2V0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlF1ZXJ5RGF0YVNldHMiIFR5cGVOYW1lPSJ0bnM6UXVlcnlEYXRh +U2V0IiBMZW5ndGhGaWVsZD0iTm9PZlF1ZXJ5RGF0YVNldHMiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZlBhcnNpbmdSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUGFyc2luZ1Jlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6 +UGFyc2luZ1Jlc3VsdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZQYXJzaW5nUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJSZXN1bHQiIFR5cGVOYW1lPSJ0bnM6Q29udGVudEZpbHRl +clJlc3VsdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJRdWVyeU5leHRSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVx +dWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Q +b2ludCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29u +dGludWF0aW9uUG9pbnQiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJRdWVyeU5leHRSZXNw +b25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZRdWVyeURhdGFTZXRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVlcnlEYXRhU2V0cyIgVHlwZU5hbWU9InRuczpRdWVy +eURhdGFTZXQiIExlbmd0aEZpZWxkPSJOb09mUXVlcnlEYXRhU2V0cyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlJldmlzZWRDb250aW51YXRpb25Qb2ludCIgVHlwZU5hbWU9Im9wYzpCeXRlU3Ry +aW5nIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBl +IE5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iU291cmNlIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJTZXJ2ZXIiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IkJvdGgiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVl +IE5hbWU9Ik5laXRoZXIiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5h +bWU9IkludmFsaWQiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRWYWx1ZUlkIiBCYXNlVHlwZT0idWE6RXh0ZW5z +aW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5v +ZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF0dHJpYnV0ZUlkIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkluZGV4UmFuZ2UiIFR5cGVOYW1lPSJv +cGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YUVuY29kaW5nIiBUeXBlTmFt +ZT0idWE6UXVhbGlmaWVkTmFtZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0i +dG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhBZ2UiIFR5cGVO +YW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVGltZXN0YW1wc1RvUmV0 +dXJuIiBUeXBlTmFtZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik5vT2ZOb2Rlc1RvUmVhZCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vZGVzVG9SZWFkIiBUeXBlTmFtZT0idG5zOlJlYWRWYWx1ZUlkIiBMZW5n +dGhGaWVsZD0iTm9PZk5vZGVzVG9SZWFkIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZS +ZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +dWx0cyIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5h +bWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIg +Lz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJIaXN0b3J5UmVhZFZhbHVlSWQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9kZUlkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iSW5kZXhSYW5nZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJEYXRhRW5jb2RpbmciIFR5cGVOYW1lPSJ1YTpRdWFsaWZpZWROYW1l +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ29udGludWF0aW9uUG9pbnQiIFR5cGVOYW1lPSJv +cGM6Qnl0ZVN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5UmVhZFJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lv +bk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6 +U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiBU +eXBlTmFtZT0ib3BjOkJ5dGVTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0b3J5 +RGF0YSIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5UmVhZERldGFpbHMi +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlYWRFdmVudERldGFpbHMiIEJhc2VUeXBl +PSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik51bVZhbHVl +c1Blck5vZGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U3RhcnRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRW5kVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkZpbHRlciIgVHlwZU5hbWU9InRuczpFdmVudEZpbHRlciIgLz4NCiAgPC9vcGM6U3RydWN0 +dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZWFkUmF3TW9kaWZpZWRE +ZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJJc1JlYWRNb2RpZmllZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iU3RhcnRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iRW5kVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIFR5cGVOYW1lPSJvcGM6VUludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV0dXJuQm91bmRzIiBUeXBlTmFtZT0ib3BjOkJv +b2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iUmVhZFByb2Nlc3NlZERldGFpbHMiIEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWRE +ZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXJ0VGltZSIgVHlwZU5hbWU9Im9wYzpE +YXRlVGltZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZFRpbWUiIFR5cGVOYW1lPSJvcGM6 +RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcm9jZXNzaW5nSW50ZXJ2YWwiIFR5 +cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkFnZ3JlZ2F0 +ZVR5cGUiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZ2dy +ZWdhdGVUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiBMZW5ndGhGaWVsZD0iTm9PZkFnZ3JlZ2F0 +ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZ2dyZWdhdGVDb25maWd1cmF0aW9uIiBU +eXBlTmFtZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmVhZEF0VGltZURldGFpbHMi +IEJhc2VUeXBlPSJ0bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vT2ZSZXFUaW1lcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlcVRpbWVzIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiBMZW5ndGhGaWVsZD0iTm9PZlJl +cVRpbWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlU2ltcGxlQm91bmRzIiBUeXBlTmFt +ZT0ib3BjOkJvb2xlYW4iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iUmVhZEFubm90YXRpb25EYXRhRGV0YWlscyIgQmFzZVR5cGU9InRu +czpIaXN0b3J5UmVhZERldGFpbHMiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlcVRpbWVz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxVGltZXMi +IFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIExlbmd0aEZpZWxkPSJOb09mUmVxVGltZXMiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iSGlz +dG9yeURhdGEiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZkRhdGFWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJEYXRhVmFsdWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhGaWVs +ZD0iTm9PZkRhdGFWYWx1ZXMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZpY2F0aW9uSW5mbyIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb2RpZmljYXRpb25UaW1lIiBUeXBl +TmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXBkYXRlVHlwZSIg +VHlwZU5hbWU9InRuczpIaXN0b3J5VXBkYXRlVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlVzZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5TW9kaWZpZWREYXRhIiBC +YXNlVHlwZT0idG5zOkhpc3RvcnlEYXRhIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEYXRh +VmFsdWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0 +YVZhbHVlcyIgVHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZEYXRhVmFs +dWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1vZGlmaWNhdGlvbkluZm9zIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9kaWZpY2F0aW9uSW5m +b3MiIFR5cGVOYW1lPSJ0bnM6TW9kaWZpY2F0aW9uSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZNb2Rp +ZmljYXRpb25JbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1 +Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5RXZlbnQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkV2ZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV2ZW50cyIgVHlwZU5hbWU9InRuczpIaXN0b3J5 +RXZlbnRGaWVsZExpc3QiIExlbmd0aEZpZWxkPSJOb09mRXZlbnRzIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkUmVx +dWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJIaXN0b3J5UmVhZERldGFpbHMiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25P +YmplY3QiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIFR5cGVO +YW1lPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVs +ZWFzZUNvbnRpbnVhdGlvblBvaW50cyIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZk5vZGVzVG9SZWFkIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZXNUb1JlYWQiIFR5cGVOYW1lPSJ0bnM6SGlzdG9yeVJl +YWRWYWx1ZUlkIiBMZW5ndGhGaWVsZD0iTm9PZk5vZGVzVG9SZWFkIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlSZWFkUmVz +cG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6SGlzdG9yeVJlYWRSZXN1 +bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5v +T2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVu +Z3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iV3JpdGVWYWx1ZSIgQmFzZVR5cGU9InVh +OkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1l +PSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdHRyaWJ1dGVJZCIgVHlwZU5h +bWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbmRleFJhbmdlIiBUeXBl +TmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlZhbHVlIiBUeXBlTmFt +ZT0idWE6RGF0YVZhbHVlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IldyaXRlUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm9kZXNUb1dyaXRl +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9kZXNUb1dy +aXRlIiBUeXBlTmFtZT0idG5zOldyaXRlVmFsdWUiIExlbmd0aEZpZWxkPSJOb09mTm9kZXNUb1dy +aXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBl +IE5hbWU9IldyaXRlUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VI +ZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpT +dGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0lu +Zm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1 +cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRh +aWxzIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+ +DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJIaXN0b3J5VXBkYXRlVHlwZSIgTGVuZ3Ro +SW5CaXRzPSIzMiI+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iSW5zZXJ0IiBWYWx1 +ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZXBsYWNlIiBWYWx1ZT0i +MiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVcGRhdGUiIFZhbHVlPSIzIiAv +Pg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkRlbGV0ZSIgVmFsdWU9IjQiIC8+DQog +IDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFtZT0iUGVy +Zm9ybVVwZGF0ZVR5cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZh +bHVlIE5hbWU9Ikluc2VydCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUg +TmFtZT0iUmVwbGFjZSIgVmFsdWU9IjIiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFt +ZT0iVXBkYXRlIiBWYWx1ZT0iMyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJS +ZW1vdmUiIFZhbHVlPSI0IiAvPg0KICA8L29wYzpFbnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3Rv +cnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9 +InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUGVyZm9ybUluc2VydFJlcGxhY2UiIFR5cGVOYW1lPSJ0bnM6UGVy +Zm9ybVVwZGF0ZVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mVXBkYXRlVmFsdWVz +IiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXBkYXRlVmFs +dWVzIiBUeXBlTmFtZT0idWE6RGF0YVZhbHVlIiBMZW5ndGhGaWVsZD0iTm9PZlVwZGF0ZVZhbHVl +cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJVcGRhdGVTdHJ1Y3R1cmVEYXRhRGV0YWlscyIgQmFzZVR5cGU9InRuczpIaXN0b3J5VXBk +YXRlRGV0YWlscyI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb2RlSWQiIFR5cGVOYW1lPSJ1YTpO +b2RlSWQiIFNvdXJjZVR5cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlBlcmZvcm1JbnNlcnRSZXBsYWNlIiBUeXBlTmFtZT0idG5zOlBlcmZvcm1V +cGRhdGVUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlVwZGF0ZVZhbHVlcyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVwZGF0ZVZhbHVlcyIg +VHlwZU5hbWU9InVhOkRhdGFWYWx1ZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZVcGRhdGVWYWx1ZXMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +VXBkYXRlRXZlbnREZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNl +VHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UGVyZm9ybUluc2VydFJlcGxhY2UiIFR5cGVOYW1lPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXIiIFR5cGVOYW1lPSJ0bnM6RXZlbnRGaWx0ZXIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRXZlbnREYXRhIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnREYXRhIiBUeXBlTmFtZT0idG5zOkhp +c3RvcnlFdmVudEZpZWxkTGlzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVudERhdGEiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVsZXRl +UmF3TW9kaWZpZWREZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNl +VHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +SXNEZWxldGVNb2RpZmllZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU3RhcnRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iRW5kVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVBdFRp +bWVEZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNlVHlwZT0idG5z +Okhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlcVRp +bWVzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxVGlt +ZXMiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIExlbmd0aEZpZWxkPSJOb09mUmVxVGltZXMiIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +RGVsZXRlRXZlbnREZXRhaWxzIiBCYXNlVHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vZGVJZCIgVHlwZU5hbWU9InVhOk5vZGVJZCIgU291cmNl +VHlwZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkV2ZW50SWRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iRXZlbnRJZHMiIFR5cGVOYW1lPSJvcGM6Qnl0ZVN0cmluZyIgTGVuZ3RoRmllbGQ9Ik5vT2ZF +dmVudElkcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1c0NvZGUiIFR5cGVOYW1lPSJ1YTpTdGF0 +dXNDb2RlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk9wZXJhdGlvblJlc3VsdHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJPcGVyYXRpb25SZXN1 +bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZPcGVyYXRpb25S +ZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZv +cyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0 +aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJIaXN0b3J5VXBkYXRlUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSGlzdG9yeVVwZGF0 +ZURldGFpbHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJI +aXN0b3J5VXBkYXRlRGV0YWlscyIgVHlwZU5hbWU9InVhOkV4dGVuc2lvbk9iamVjdCIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5VXBkYXRlUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ0bnM6SGlzdG9yeVVwZGF0ZVJlc3VsdCIg +TGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkRp +YWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiBMZW5ndGhG +aWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDYWxsTWV0aG9kUmVxdWVzdCIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJPYmplY3RJZCIgVHlw +ZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1ldGhvZElkIiBUeXBl +TmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZklucHV0QXJndW1l +bnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW5wdXRB +cmd1bWVudHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9PZklucHV0QXJn +dW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkNhbGxNZXRob2RSZXN1bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0Nv +ZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSW5wdXRBcmd1bWVudFJlc3VsdHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJbnB1dEFyZ3VtZW50 +UmVzdWx0cyIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mSW5wdXRB +cmd1bWVudFJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSW5wdXRBcmd1bWVu +dERpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IklucHV0QXJndW1lbnREaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9z +dGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZJbnB1dEFyZ3VtZW50RGlhZ25vc3RpY0luZm9zIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk91dHB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik91dHB1dEFyZ3VtZW50cyIgVHlwZU5h +bWU9InVhOlZhcmlhbnQiIExlbmd0aEZpZWxkPSJOb09mT3V0cHV0QXJndW1lbnRzIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhbGxS +ZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZNZXRob2RzVG9DYWxsIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWV0aG9kc1RvQ2FsbCIgVHlwZU5hbWU9InRuczpDYWxs +TWV0aG9kUmVxdWVzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZNZXRob2RzVG9DYWxsIiAvPg0KICA8L29w +YzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkNhbGxSZXNw +b25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpDYWxsTWV0aG9kUmVzdWx0 +IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0 +aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik1vbml0b3JpbmdNb2RlIiBMZW5ndGhJbkJp +dHM9IjMyIj4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJEaXNhYmxlZCIgVmFsdWU9 +IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iU2FtcGxpbmciIFZhbHVlPSIx +IiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlcG9ydGluZyIgVmFsdWU9IjIi +IC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6RW51bWVyYXRlZFR5cGUgTmFt +ZT0iRGF0YUNoYW5nZVRyaWdnZXIiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVy +YXRlZFZhbHVlIE5hbWU9IlN0YXR1cyIgVmFsdWU9IjAiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVk +VmFsdWUgTmFtZT0iU3RhdHVzVmFsdWUiIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6RW51bWVyYXRl +ZFZhbHVlIE5hbWU9IlN0YXR1c1ZhbHVlVGltZXN0YW1wIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6 +RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpFbnVtZXJhdGVkVHlwZSBOYW1lPSJEZWFkYmFuZFR5 +cGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5v +bmUiIFZhbHVlPSIwIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkFic29sdXRl +IiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQZXJjZW50IiBW +YWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJNb25pdG9yaW5nRmlsdGVyIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1l +PSJEYXRhQ2hhbmdlRmlsdGVyIiBCYXNlVHlwZT0idG5zOk1vbml0b3JpbmdGaWx0ZXIiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iVHJpZ2dlciIgVHlwZU5hbWU9InRuczpEYXRhQ2hhbmdlVHJpZ2dl +ciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlYWRiYW5kVHlwZSIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWFkYmFuZFZhbHVlIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJFdmVudEZpbHRlciIgQmFzZVR5cGU9InRuczpNb25pdG9yaW5nRmlsdGVy +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxlY3RDbGF1c2VzIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VsZWN0Q2xhdXNlcyIgVHlwZU5hbWU9 +InRuczpTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiBMZW5ndGhGaWVsZD0iTm9PZlNlbGVjdENsYXVz +ZXMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJXaGVyZUNsYXVzZSIgVHlwZU5hbWU9InRuczpD +b250ZW50RmlsdGVyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iVXNlU2VydmVyQ2FwYWJpbGl0aWVz +RGVmYXVsdHMiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlRyZWF0VW5jZXJ0YWluQXNCYWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlBlcmNlbnREYXRhQmFkIiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJQZXJjZW50RGF0YUdvb2QiIFR5cGVOYW1lPSJvcGM6Qnl0ZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlVzZVNsb3BlZEV4dHJhcG9sYXRpb24iIFR5cGVOYW1lPSJv +cGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1 +cmVkVHlwZSBOYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiIEJhc2VUeXBlPSJ0bnM6TW9uaXRvcmluZ0Zp +bHRlciI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGFydFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0 +ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBZ2dyZWdhdGVUeXBlIiBUeXBlTmFtZT0i +dWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJvY2Vzc2luZ0ludGVydmFsIiBU +eXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFnZ3JlZ2F0ZUNv +bmZpZ3VyYXRpb24iIFR5cGVOYW1lPSJ0bnM6QWdncmVnYXRlQ29uZmlndXJhdGlvbiIgLz4NCiAg +PC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25p +dG9yaW5nRmlsdGVyUmVzdWx0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJFdmVudEZp +bHRlclJlc3VsdCIgQmFzZVR5cGU9InRuczpNb25pdG9yaW5nRmlsdGVyUmVzdWx0Ij4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxlY3RDbGF1c2VSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOklu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VsZWN0Q2xhdXNlUmVzdWx0cyIgVHlwZU5h +bWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mU2VsZWN0Q2xhdXNlUmVzdWx0cyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTZWxlY3RDbGF1c2VEaWFnbm9zdGljSW5mb3Mi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWxlY3RDbGF1 +c2VEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmll +bGQ9Ik5vT2ZTZWxlY3RDbGF1c2VEaWFnbm9zdGljSW5mb3MiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJXaGVyZUNsYXVzZVJlc3VsdCIgVHlwZU5hbWU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0 +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkFnZ3JlZ2F0ZUZpbHRlclJlc3VsdCIgQmFzZVR5cGU9InRuczpNb25pdG9yaW5nRmlsdGVy +UmVzdWx0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRTdGFydFRpbWUiIFR5cGVOYW1l +PSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkUHJvY2Vzc2lu +Z0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJldmlzZWRBZ2dyZWdhdGVDb25maWd1cmF0aW9uIiBUeXBlTmFtZT0idG5zOkFnZ3JlZ2F0ZUNv +bmZpZ3VyYXRpb24iIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0 +dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmluZ1BhcmFtZXRlcnMiIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50SGFuZGxlIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNhbXBsaW5nSW50ZXJ2YWwiIFR5 +cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmlsdGVyIiBUeXBl +TmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUXVldWVT +aXplIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc2Nh +cmRPbGRlc3QiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5 +cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVx +dWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJJdGVtVG9Nb25pdG9yIiBUeXBlTmFtZT0idG5zOlJlYWRWYWx1ZUlkIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTW9uaXRvcmluZ01vZGUiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmluZ01vZGUi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRQYXJhbWV0ZXJzIiBUeXBlTmFtZT0i +dG5zOk1vbml0b3JpbmdQYXJhbWV0ZXJzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0K +ICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIEJh +c2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3RhdHVz +Q29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJN +b25pdG9yZWRJdGVtSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmV2aXNlZFNhbXBsaW5nSW50ZXJ2YWwiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNlZFF1ZXVlU2l6ZSIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJGaWx0ZXJSZXN1bHQiIFR5cGVOYW1lPSJ1YTpF +eHRlbnNpb25PYmplY3QiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRlTW9uaXRvcmVkSXRlbXNSZXF1ZXN0IiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3RIZWFkZXIi +IFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1 +YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IlRpbWVzdGFtcHNUb1JldHVybiIgVHlwZU5hbWU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4i +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mSXRlbXNUb0NyZWF0ZSIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikl0ZW1zVG9DcmVhdGUiIFR5cGVOYW1l +PSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIExlbmd0aEZpZWxkPSJOb09mSXRlbXNU +b0NyZWF0ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVk +VHlwZSBOYW1lPSJDcmVhdGVNb25pdG9yZWRJdGVtc1Jlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJl +c3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1 +bHRzIiBUeXBlTmFtZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIExlbmd0aEZpZWxk +PSJOb09mUmVzdWx0cyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5m +b3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9z +dGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZE +aWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3Ry +dWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmVkSXRlbUlk +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcXVlc3Rl +ZFBhcmFtZXRlcnMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRv +cmVkSXRlbU1vZGlmeVJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRRdWV1ZVNpemUiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRmlsdGVyUmVzdWx0 +IiBUeXBlTmFtZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik1vZGlmeU1vbml0b3JlZEl0ZW1zUmVx +dWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIFR5cGVOYW1lPSJ0bnM6VGlt +ZXN0YW1wc1RvUmV0dXJuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkl0ZW1zVG9Nb2Rp +ZnkiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJJdGVtc1Rv +TW9kaWZ5IiBUeXBlTmFtZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiBMZW5ndGhG +aWVsZD0iTm9PZkl0ZW1zVG9Nb2RpZnkiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQog +IDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNSZXNwb25zZSIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNw +b25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlwZU5hbWU9InRuczpNb25pdG9yZWRJdGVtTW9kaWZ5UmVz +dWx0IiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJO +b09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExl +bmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlw +ZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVxdWVz +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yaW5nTW9kZSIgVHlwZU5hbWU9InRuczpNb25pdG9yaW5n +TW9kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZNb25pdG9yZWRJdGVtSWRzIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRvcmVkSXRlbUlk +cyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mTW9uaXRvcmVkSXRlbUlk +cyIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBO +YW1lPSJTZXRNb25pdG9yaW5nTW9kZVJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBlTmFtZT0idG5z +OlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlJlc3VsdHMiIFR5 +cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXN1bHRzIiBUeXBl +TmFtZT0idWE6U3RhdHVzQ29kZSIgTGVuZ3RoRmllbGQ9Ik5vT2ZSZXN1bHRzIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRp +YWdub3N0aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZkRpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXRUcmln +Z2VyaW5nUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJUcmlnZ2VyaW5nSXRlbUlkIiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMaW5rc1RvQWRkIiBUeXBl +TmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGlua3NUb0FkZCIgVHlw +ZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mTGlua3NUb0FkZCIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMaW5rc1RvUmVtb3ZlIiBUeXBlTmFtZT0ib3BjOkludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGlua3NUb1JlbW92ZSIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIExlbmd0aEZpZWxkPSJOb09mTGlua3NUb1JlbW92ZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXRUcmlnZ2VyaW5nUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJOb09mQWRkUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkFkZFJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBM +ZW5ndGhGaWVsZD0iTm9PZkFkZFJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09m +QWRkRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iQWRkRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8i +IExlbmd0aEZpZWxkPSJOb09mQWRkRGlhZ25vc3RpY0luZm9zIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iTm9PZlJlbW92ZVJlc3VsdHMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJSZW1vdmVSZXN1bHRzIiBUeXBlTmFtZT0idWE6U3RhdHVzQ29kZSIgTGVu +Z3RoRmllbGQ9Ik5vT2ZSZW1vdmVSZXN1bHRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZlJlbW92ZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlbW92ZURpYWdub3N0aWNJbmZvcyIgVHlwZU5hbWU9InVhOkRpYWdub3N0 +aWNJbmZvIiBMZW5ndGhGaWVsZD0iTm9PZlJlbW92ZURpYWdub3N0aWNJbmZvcyIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJEZWxldGVN +b25pdG9yZWRJdGVtc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVh +ZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1vbml0b3JlZEl0ZW1JZHMi +IFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yZWRJ +dGVtSWRzIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgTGVuZ3RoRmllbGQ9Ik5vT2ZNb25pdG9yZWRJ +dGVtSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVO +YW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVz +dWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3Vs +dHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0ib3Bj +OkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25vc3RpY0luZm9zIiBUeXBlTmFt +ZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09mRGlhZ25vc3RpY0luZm9zIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9 +IkNyZWF0ZVN1YnNjcmlwdGlvblJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1 +ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkUHVibGlzaGluZ0lu +dGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJl +cXVlc3RlZExpZmV0aW1lQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVxdWVzdGVkTWF4S2VlcEFsaXZlQ291bnQiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2gi +IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaGlu +Z0VuYWJsZWQiIFR5cGVOYW1lPSJvcGM6Qm9vbGVhbiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlByaW9yaXR5IiBUeXBlTmFtZT0ib3BjOkJ5dGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9u +c2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVydmFsIiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRMaWZldGltZUNvdW50 +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJldmlzZWRN +YXhLZWVwQWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0cnVj +dHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9kaWZ5U3Vic2NyaXB0 +aW9uUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBlTmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0ZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIFR5 +cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdGVkTGlm +ZXRpbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJSZXF1ZXN0ZWRNYXhLZWVwQWxpdmVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQcmlvcml0eSIgVHlwZU5hbWU9 +Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVy +ZWRUeXBlIE5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvblJlc3BvbnNlIiBCYXNlVHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3BvbnNlSGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlc3BvbnNlSGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmV2aXNl +ZFB1Ymxpc2hpbmdJbnRlcnZhbCIgVHlwZU5hbWU9Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJSZXZpc2VkTGlmZXRpbWVDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXZpc2VkTWF4S2VlcEFsaXZlQ291bnQiIFR5cGVOYW1l +PSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVzdCIgQmFzZVR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXF1ZXN0SGVhZGVyIiBUeXBl +TmFtZT0idG5zOlJlcXVlc3RIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJQdWJsaXNo +aW5nRW5hYmxlZCIgVHlwZU5hbWU9Im9wYzpCb29sZWFuIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTm9PZlN1YnNjcmlwdGlvbklkcyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkcyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0 +aEZpZWxkPSJOb09mU3Vic2NyaXB0aW9uSWRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVzcG9uc2Ui +IEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVz +cG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5ndGhGaWVs +ZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25vc3RpY0lu +Zm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlhZ25v +c3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxkPSJOb09m +RGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0 +cnVjdHVyZWRUeXBlIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIEJhc2VUeXBlPSJ1YTpFeHRl +bnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VxdWVuY2VOdW1iZXIiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHVibGlzaFRpbWUiIFR5 +cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTm90aWZp +Y2F0aW9uRGF0YSIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ik5vdGlmaWNhdGlvbkRhdGEiIFR5cGVOYW1lPSJ1YTpFeHRlbnNpb25PYmplY3QiIExlbmd0aEZp +ZWxkPSJOb09mTm90aWZpY2F0aW9uRGF0YSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoN +CiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJOb3RpZmljYXRpb25EYXRhIiBCYXNlVHlwZT0i +dWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJEYXRhQ2hhbmdlTm90aWZpY2F0aW9uIiBCYXNlVHlwZT0idG5z +Ok5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZk1vbml0b3JlZEl0 +ZW1zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9uaXRv +cmVkSXRlbXMiIFR5cGVOYW1lPSJ0bnM6TW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZNb25pdG9yZWRJdGVtcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZE +aWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0K +DQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGll +bnRIYW5kbGUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +VmFsdWUiIFR5cGVOYW1lPSJ1YTpEYXRhVmFsdWUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBl +Pg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRXZlbnROb3RpZmljYXRpb25MaXN0IiBC +YXNlVHlwZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9P +ZkV2ZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV2 +ZW50cyIgVHlwZU5hbWU9InRuczpFdmVudEZpZWxkTGlzdCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVu +dHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUg +TmFtZT0iRXZlbnRGaWVsZExpc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50SGFuZGxlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZFdmVudEZpZWxkcyIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkV2ZW50RmllbGRzIiBUeXBlTmFtZT0idWE6VmFy +aWFudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZFdmVudEZpZWxkcyIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJIaXN0b3J5RXZlbnRGaWVsZExp +c3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkV2ZW50RmllbGRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iRXZlbnRGaWVsZHMiIFR5cGVOYW1lPSJ1YTpWYXJpYW50IiBMZW5ndGhGaWVsZD0iTm9P +ZkV2ZW50RmllbGRzIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiIgQmFzZVR5cGU9InRuczpO +b3RpZmljYXRpb25EYXRhIj4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN0YXR1cyIgVHlwZU5hbWU9 +InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mbyIg +VHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVu +dCIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJT +dWJzY3JpcHRpb25JZCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJTZXF1ZW5jZU51bWJlciIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3BjOlN0 +cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHVibGlzaFJlcXVl +c3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudHMiIFR5cGVOYW1lPSJv +cGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25BY2tub3dsZWRn +ZW1lbnRzIiBUeXBlTmFtZT0idG5zOlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnRzIiAvPg0KICA8L29wYzpTdHJ1 +Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlB1Ymxpc2hSZXNwb25z +ZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJS +ZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklkIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBdmFpbGFibGVTZXF1ZW5jZU51bWJlcnMiIFR5cGVOYW1l +PSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJBdmFpbGFibGVTZXF1ZW5jZU51 +bWJlcnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZkF2YWlsYWJsZVNl +cXVlbmNlTnVtYmVycyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vcmVOb3RpZmljYXRpb25z +IiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb3RpZmlj +YXRpb25NZXNzYWdlIiBUeXBlTmFtZT0idG5zOk5vdGlmaWNhdGlvbk1lc3NhZ2UiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVOYW1lPSJ1YTpTdGF0dXNDb2RlIiBMZW5n +dGhGaWVsZD0iTm9PZlJlc3VsdHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mRGlhZ25v +c3RpY0luZm9zIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +RGlhZ25vc3RpY0luZm9zIiBUeXBlTmFtZT0idWE6RGlhZ25vc3RpY0luZm8iIExlbmd0aEZpZWxk +PSJOb09mRGlhZ25vc3RpY0luZm9zIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlcHVibGlzaFJlcXVlc3QiIEJhc2VUeXBlPSJ1YTpF +eHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlw +ZU5hbWU9InRuczpSZXF1ZXN0SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2Ny +aXB0aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +UmV0cmFuc21pdFNlcXVlbmNlTnVtYmVyIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9v +cGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJSZXB1Ymxp +c2hSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRuczpSZXNwb25zZUhlYWRlciIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIFR5cGVOYW1lPSJ0bnM6 +Tm90aWZpY2F0aW9uTWVzc2FnZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2ZlclJlc3VsdCIgQmFzZVR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdGF0dXNDb2RlIiBUeXBlTmFtZT0i +dWE6U3RhdHVzQ29kZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZBdmFpbGFibGVTZXF1 +ZW5jZU51bWJlcnMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBdmFpbGFibGVTZXF1ZW5jZU51bWJlcnMiIFR5cGVOYW1lPSJvcGM6VUludDMyIiBMZW5ndGhG +aWVsZD0iTm9PZkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgLz4NCiAgPC9vcGM6U3RydWN0dXJl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlv +bnNSZXF1ZXN0IiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlJlcXVlc3RIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZTdWJzY3JpcHRpb25JZHMiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTdWJzY3JpcHRpb25JZHMiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiBMZW5ndGhGaWVsZD0iTm9PZlN1YnNjcmlwdGlvbklkcyIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNlbmRJbml0aWFsVmFsdWVzIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4iIC8+ +DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0i +VHJhbnNmZXJTdWJzY3JpcHRpb25zUmVzcG9uc2UiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmpl +Y3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzcG9uc2VIZWFkZXIiIFR5cGVOYW1lPSJ0bnM6 +UmVzcG9uc2VIZWFkZXIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mUmVzdWx0cyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlc3VsdHMiIFR5cGVO +YW1lPSJ0bnM6VHJhbnNmZXJSZXN1bHQiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1 +YTpEaWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRGVs +ZXRlU3Vic2NyaXB0aW9uc1JlcXVlc3QiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iUmVxdWVzdEhlYWRlciIgVHlwZU5hbWU9InRuczpSZXF1ZXN0 +SGVhZGVyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZlN1YnNjcmlwdGlvbklkcyIgVHlw +ZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlN1YnNjcmlwdGlvbklk +cyIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIExlbmd0aEZpZWxkPSJOb09mU3Vic2NyaXB0aW9uSWRz +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5h +bWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNSZXNwb25zZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZXNwb25zZUhlYWRlciIgVHlwZU5hbWU9InRu +czpSZXNwb25zZUhlYWRlciIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZSZXN1bHRzIiBU +eXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVzdWx0cyIgVHlw +ZU5hbWU9InVhOlN0YXR1c0NvZGUiIExlbmd0aEZpZWxkPSJOb09mUmVzdWx0cyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaWFnbm9zdGljSW5mb3MiIFR5cGVOYW1lPSJ1YTpE +aWFnbm9zdGljSW5mbyIgTGVuZ3RoRmllbGQ9Ik5vT2ZEaWFnbm9zdGljSW5mb3MiIC8+DQogIDwv +b3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iQnVpbGRJ +bmZvIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlByb2R1Y3RVcmkiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTWFudWZhY3R1cmVyTmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJQcm9kdWN0TmFtZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJTb2Z0d2FyZVZlcnNpb24iIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGROdW1iZXIiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnVpbGREYXRlIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1l +IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5h +bWU9IlJlZHVuZGFuY3lTdXBwb3J0IiBMZW5ndGhJbkJpdHM9IjMyIj4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJOb25lIiBWYWx1ZT0iMCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRW +YWx1ZSBOYW1lPSJDb2xkIiBWYWx1ZT0iMSIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBO +YW1lPSJXYXJtIiBWYWx1ZT0iMiIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJI +b3QiIFZhbHVlPSIzIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlRyYW5zcGFy +ZW50IiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJIb3RBbmRN +aXJyb3JlZCIgVmFsdWU9IjUiIC8+DQogIDwvb3BjOkVudW1lcmF0ZWRUeXBlPg0KDQogIDxvcGM6 +RW51bWVyYXRlZFR5cGUgTmFtZT0iU2VydmVyU3RhdGUiIExlbmd0aEluQml0cz0iMzIiPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJ1bm5pbmciIFZhbHVlPSIwIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IkZhaWxlZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9Db25maWd1cmF0aW9uIiBWYWx1ZT0iMiIgLz4NCiAgICA8 +b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJTdXNwZW5kZWQiIFZhbHVlPSIzIiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlNodXRkb3duIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3Bj +OkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJUZXN0IiBWYWx1ZT0iNSIgLz4NCiAgICA8b3BjOkVudW1l +cmF0ZWRWYWx1ZSBOYW1lPSJDb21tdW5pY2F0aW9uRmF1bHQiIFZhbHVlPSI2IiAvPg0KICAgIDxv +cGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlVua25vd24iIFZhbHVlPSI3IiAvPg0KICA8L29wYzpF +bnVtZXJhdGVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlJlZHVuZGFudFNl +cnZlckRhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlcnZlcklkIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9IlNlcnZpY2VMZXZlbCIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iU2VydmVyU3RhdGUiIFR5cGVOYW1lPSJ0bnM6U2VydmVyU3RhdGUiIC8+DQog +IDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iRW5k +cG9pbnRVcmxMaXN0RGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTm9PZkVuZHBvaW50VXJsTGlzdCIgVHlwZU5hbWU9Im9wYzpJbnQz +MiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJsTGlzdCIgVHlwZU5hbWU9Im9w +YzpTdHJpbmciIExlbmd0aEZpZWxkPSJOb09mRW5kcG9pbnRVcmxMaXN0IiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9Ik5ldHdvcmtHcm91 +cERhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlNlcnZlclVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb09mTmV0d29ya1BhdGhzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTmV0d29ya1BhdGhzIiBUeXBlTmFtZT0idG5zOkVuZHBvaW50VXJsTGlz +dERhdGFUeXBlIiBMZW5ndGhGaWVsZD0iTm9PZk5ldHdvcmtQYXRocyIgLz4NCiAgPC9vcGM6U3Ry +dWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTYW1wbGluZ0ludGVy +dmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJTYW1wbGluZ0ludGVydmFsIiBUeXBlTmFtZT0ib3BjOkRvdWJs +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1vbml0b3JlZEl0ZW1Db3VudCIgVHlwZU5hbWU9 +Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhNb25pdG9yZWRJdGVtQ291 +bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzYWJs +ZWRNb25pdG9yZWRJdGVtQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZlckRpYWdu +b3N0aWNzU3VtbWFyeURhdGFUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlNlcnZlclZpZXdDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJyZW50U2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1bXVsYXRlZFNlc3Npb25Db3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0 +eVJlamVjdGVkU2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlJlamVjdGVkU2Vzc2lvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlc3Npb25UaW1lb3V0Q291bnQiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvbkFib3J0Q291bnQiIFR5 +cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVudFN1YnNj +cmlwdGlvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5h +bWU9IkN1bXVsYXRlZFN1YnNjcmlwdGlvbkNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbENvdW50IiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNlY3VyaXR5UmVqZWN0ZWRSZXF1 +ZXN0c0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlJlamVjdGVkUmVxdWVzdHNDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iU2VydmVyU3Rh +dHVzRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iU3RhcnRUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iQ3VycmVudFRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJTdGF0ZSIgVHlwZU5hbWU9InRuczpTZXJ2ZXJTdGF0ZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkJ1aWxkSW5mbyIgVHlwZU5hbWU9InRuczpCdWlsZEluZm8iIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWNvbmRzVGlsbFNodXRkb3duIiBUeXBlTmFtZT0ib3Bj +OlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlNodXRkb3duUmVhc29uIiBUeXBlTmFt +ZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9w +YzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5 +cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uSWQi +IFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uTmFt +ZSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRE +ZXNjcmlwdGlvbiIgVHlwZU5hbWU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iU2VydmVyVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkVuZHBvaW50VXJsIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9Ik5vT2ZMb2NhbGVJZHMiIFR5cGVOYW1lPSJvcGM6SW50MzIi +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMb2NhbGVJZHMiIFR5cGVOYW1lPSJvcGM6U3RyaW5n +IiBMZW5ndGhGaWVsZD0iTm9PZkxvY2FsZUlkcyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFj +dHVhbFNlc3Npb25UaW1lb3V0IiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZp +ZWxkIE5hbWU9Ik1heFJlc3BvbnNlTWVzc2FnZVNpemUiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ2xpZW50Q29ubmVjdGlvblRpbWUiIFR5cGVOYW1lPSJv +cGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRMYXN0Q29udGFjdFRp +bWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDdXJy +ZW50U3Vic2NyaXB0aW9uc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IkN1cnJlbnRNb25pdG9yZWRJdGVtc0NvdW50IiBUeXBlTmFtZT0ib3BjOlVJ +bnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRQdWJsaXNoUmVxdWVzdHNJblF1 +ZXVlIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRvdGFs +UmVxdWVzdENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJVbmF1dGhvcml6ZWRSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVhZENvdW50IiBUeXBlTmFtZT0i +dG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0 +b3J5UmVhZENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJXcml0ZUNvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3Vu +dGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJIaXN0b3J5VXBkYXRlQ291bnQi +IFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IkNhbGxDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3JlYXRlTW9uaXRvcmVkSXRlbXNDb3VudCIgVHlwZU5h +bWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +TW9kaWZ5TW9uaXRvcmVkSXRlbXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRh +dGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2V0TW9uaXRvcmluZ01vZGVDb3VudCIg +VHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iU2V0VHJpZ2dlcmluZ0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc0NvdW50 +IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25Db3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291 +bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9u +Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hDb3VudCIg +VHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iUmVwdWJsaXNoQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc0NvdW50IiBU +eXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEZWxldGVTdWJzY3JpcHRpb25zQ291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkFkZE5vZGVzQ291bnQiIFR5cGVO +YW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkFkZFJlZmVyZW5jZXNDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVsZXRlTm9kZXNDb3VudCIgVHlwZU5hbWU9InRu +czpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGVsZXRl +UmVmZXJlbmNlc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJCcm93c2VDb3VudCIgVHlwZU5hbWU9InRuczpTZXJ2aWNl +Q291bnRlckRhdGFUeXBlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQnJvd3NlTmV4dENvdW50 +IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJUcmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc0NvdW50IiBUeXBlTmFtZT0idG5z +OlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJRdWVyeUZp +cnN0Q291bnQiIFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlF1ZXJ5TmV4dENvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3Vu +dGVyRGF0YVR5cGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWdpc3Rlck5vZGVzQ291bnQi +IFR5cGVOYW1lPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9IlVucmVnaXN0ZXJOb2Rlc0NvdW50IiBUeXBlTmFtZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJl +ZFR5cGUgTmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSIgQmFzZVR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZXNzaW9uSWQiIFR5 +cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJDbGllbnRVc2VySWRP +ZlNlc3Npb24iIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +Tm9PZkNsaWVudFVzZXJJZEhpc3RvcnkiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJDbGllbnRVc2VySWRIaXN0b3J5IiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +TGVuZ3RoRmllbGQ9Ik5vT2ZDbGllbnRVc2VySWRIaXN0b3J5IiAvPg0KICAgIDxvcGM6RmllbGQg +TmFtZT0iQXV0aGVudGljYXRpb25NZWNoYW5pc20iIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iRW5jb2RpbmciIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iVHJhbnNwb3J0UHJvdG9jb2wiIFR5cGVOYW1lPSJvcGM6U3Ry +aW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2VjdXJpdHlNb2RlIiBUeXBlTmFtZT0idG5z +Ok1lc3NhZ2VTZWN1cml0eU1vZGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJTZWN1cml0eVBv +bGljeVVyaSIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJD +bGllbnRDZXJ0aWZpY2F0ZSIgVHlwZU5hbWU9Im9wYzpCeXRlU3RyaW5nIiAvPg0KICA8L29wYzpT +dHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlcnZpY2VDb3Vu +dGVyRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6Rmll +bGQgTmFtZT0iVG90YWxDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJFcnJvckNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgPC9vcGM6 +U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJTdGF0dXNSZXN1 +bHQiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +U3RhdHVzQ29kZSIgVHlwZU5hbWU9InVhOlN0YXR1c0NvZGUiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJEaWFnbm9zdGljSW5mbyIgVHlwZU5hbWU9InVhOkRpYWdub3N0aWNJbmZvIiAvPg0KICA8 +L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlN1YnNj +cmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3Qi +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU2Vzc2lvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAv +Pg0KICAgIDxvcGM6RmllbGQgTmFtZT0iU3Vic2NyaXB0aW9uSWQiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUHJpb3JpdHkiIFR5cGVOYW1lPSJvcGM6Qnl0 +ZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbCIgVHlwZU5hbWU9 +Im9wYzpEb3VibGUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhLZWVwQWxpdmVDb3VudCIg +VHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNYXhMaWZldGlt +ZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ik1h +eE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hpbmdFbmFibGVkIiBUeXBlTmFtZT0ib3BjOkJvb2xlYW4i +IC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb2RpZnlDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50 +MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFbmFibGVDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJEaXNhYmxlQ291bnQiIFR5cGVOYW1lPSJv +cGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iUmVwdWJsaXNoUmVxdWVzdENvdW50 +IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlcHVibGlz +aE1lc3NhZ2VSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6 +RmllbGQgTmFtZT0iUmVwdWJsaXNoTWVzc2FnZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVyUmVxdWVzdENvdW50IiBUeXBlTmFtZT0i +b3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRyYW5zZmVycmVkVG9BbHRDbGll +bnRDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJU +cmFuc2ZlcnJlZFRvU2FtZUNsaWVudENvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IlB1Ymxpc2hSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6VUlu +dDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbnNDb3Vu +dCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJFdmVudE5v +dGlmaWNhdGlvbnNDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+DQogICAgPG9wYzpGaWVs +ZCBOYW1lPSJOb3RpZmljYXRpb25zQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iTGF0ZVB1Ymxpc2hSZXF1ZXN0Q291bnQiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iQ3VycmVudEtlZXBBbGl2ZUNvdW50IiBU +eXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkN1cnJlbnRMaWZl +dGltZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IlVuYWNrbm93bGVkZ2VkTWVzc2FnZUNvdW50IiBUeXBlTmFtZT0ib3BjOlVJbnQzMiIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9IkRpc2NhcmRlZE1lc3NhZ2VDb3VudCIgVHlwZU5hbWU9Im9wYzpV +SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJNb25pdG9yZWRJdGVtQ291bnQiIFR5cGVO +YW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRGlzYWJsZWRNb25pdG9y +ZWRJdGVtQ291bnQiIFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTW9uaXRvcmluZ1F1ZXVlT3ZlcmZsb3dDb3VudCIgVHlwZU5hbWU9Im9wYzpVSW50MzIiIC8+ +DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOZXh0U2VxdWVuY2VOdW1iZXIiIFR5cGVOYW1lPSJvcGM6 +VUludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRXZlbnRRdWV1ZU92ZXJGbG93Q291bnQi +IFR5cGVOYW1lPSJvcGM6VUludDMyIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlVmVyYk1hc2siIExl +bmd0aEluQml0cz0iMzIiPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9Ik5vZGVBZGRl +ZCIgVmFsdWU9IjEiIC8+DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTm9kZURlbGV0 +ZWQiIFZhbHVlPSIyIiAvPg0KICAgIDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlJlZmVyZW5j +ZUFkZGVkIiBWYWx1ZT0iNCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJSZWZl +cmVuY2VEZWxldGVkIiBWYWx1ZT0iOCIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1l +PSJEYXRhVHlwZUNoYW5nZWQiIFZhbHVlPSIxNiIgLz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+ +DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFU +eXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +IkFmZmVjdGVkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0i +QWZmZWN0ZWRUeXBlIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iVmVyYiIgVHlwZU5hbWU9Im9wYzpCeXRlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4N +Cg0KICA8b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0 +YVR5cGUiIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iQWZmZWN0ZWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1l +PSJBZmZlY3RlZFR5cGUiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQogIDwvb3BjOlN0cnVjdHVy +ZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUmFuZ2UiIEJhc2VUeXBlPSJ1 +YTpFeHRlbnNpb25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTG93IiBUeXBlTmFtZT0i +b3BjOkRvdWJsZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkhpZ2giIFR5cGVOYW1lPSJvcGM6 +RG91YmxlIiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVjdHVyZWRU +eXBlIE5hbWU9IkVVSW5mb3JtYXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiPg0K +ICAgIDxvcGM6RmllbGQgTmFtZT0iTmFtZXNwYWNlVXJpIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlVuaXRJZCIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4N +CiAgICA8b3BjOkZpZWxkIE5hbWU9IkRpc3BsYXlOYW1lIiBUeXBlTmFtZT0idWE6TG9jYWxpemVk +VGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkRlc2NyaXB0aW9uIiBUeXBlTmFtZT0idWE6 +TG9jYWxpemVkVGV4dCIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpFbnVt +ZXJhdGVkVHlwZSBOYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiIgTGVuZ3RoSW5CaXRzPSIzMiI+ +DQogICAgPG9wYzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iTGluZWFyIiBWYWx1ZT0iMCIgLz4NCiAg +ICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJMb2ciIFZhbHVlPSIxIiAvPg0KICAgIDxvcGM6 +RW51bWVyYXRlZFZhbHVlIE5hbWU9IkxuIiBWYWx1ZT0iMiIgLz4NCiAgPC9vcGM6RW51bWVyYXRl +ZFR5cGU+DQoNCiAgPG9wYzpTdHJ1Y3R1cmVkVHlwZSBOYW1lPSJDb21wbGV4TnVtYmVyVHlwZSIg +QmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJSZWFs +IiBUeXBlTmFtZT0ib3BjOkZsb2F0IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW1hZ2luYXJ5 +IiBUeXBlTmFtZT0ib3BjOkZsb2F0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8 +b3BjOlN0cnVjdHVyZWRUeXBlIE5hbWU9IkRvdWJsZUNvbXBsZXhOdW1iZXJUeXBlIiBCYXNlVHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlJlYWwiIFR5cGVO +YW1lPSJvcGM6RG91YmxlIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW1hZ2luYXJ5IiBUeXBl +TmFtZT0ib3BjOkRvdWJsZSIgLz4NCiAgPC9vcGM6U3RydWN0dXJlZFR5cGU+DQoNCiAgPG9wYzpT +dHJ1Y3R1cmVkVHlwZSBOYW1lPSJBeGlzSW5mb3JtYXRpb24iIEJhc2VUeXBlPSJ1YTpFeHRlbnNp +b25PYmplY3QiPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRW5naW5lZXJpbmdVbml0cyIgVHlwZU5h +bWU9InRuczpFVUluZm9ybWF0aW9uIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iRVVSYW5nZSIg +VHlwZU5hbWU9InRuczpSYW5nZSIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlRpdGxlIiBUeXBl +TmFtZT0idWE6TG9jYWxpemVkVGV4dCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkF4aXNTY2Fs +ZVR5cGUiIFR5cGVOYW1lPSJ0bnM6QXhpc1NjYWxlRW51bWVyYXRpb24iIC8+DQogICAgPG9wYzpG +aWVsZCBOYW1lPSJOb09mQXhpc1N0ZXBzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iQXhpc1N0ZXBzIiBUeXBlTmFtZT0ib3BjOkRvdWJsZSIgTGVuZ3RoRmll +bGQ9Ik5vT2ZBeGlzU3RlcHMiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6 +U3RydWN0dXJlZFR5cGUgTmFtZT0iWFZUeXBlIiBCYXNlVHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0 +Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IlgiIFR5cGVOYW1lPSJvcGM6RG91YmxlIiAvPg0KICAg +IDxvcGM6RmllbGQgTmFtZT0iVmFsdWUiIFR5cGVOYW1lPSJvcGM6RmxvYXQiIC8+DQogIDwvb3Bj +OlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5cGUgTmFtZT0iUHJvZ3JhbURp +YWdub3N0aWNEYXRhVHlwZSIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAgPG9w +YzpGaWVsZCBOYW1lPSJDcmVhdGVTZXNzaW9uSWQiIFR5cGVOYW1lPSJ1YTpOb2RlSWQiIC8+DQog +ICAgPG9wYzpGaWVsZCBOYW1lPSJDcmVhdGVDbGllbnROYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmlu +ZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikludm9jYXRpb25DcmVhdGlvblRpbWUiIFR5cGVO +YW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJMYXN0VHJhbnNpdGlv +blRpbWUiIFR5cGVOYW1lPSJvcGM6RGF0ZVRpbWUiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJM +YXN0TWV0aG9kQ2FsbCIgVHlwZU5hbWU9Im9wYzpTdHJpbmciIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMYXN0TWV0aG9kU2Vzc2lvbklkIiBUeXBlTmFtZT0idWE6Tm9kZUlkIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3VtZW50cyIgVHlwZU5hbWU9Im9w +YzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RJbnB1dEFyZ3VtZW50 +cyIgVHlwZU5hbWU9InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kSW5w +dXRBcmd1bWVudHMiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTGFzdE1ldGhvZE91dHB1 +dEFyZ3VtZW50cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9 +Ikxhc3RNZXRob2RPdXRwdXRBcmd1bWVudHMiIFR5cGVOYW1lPSJ0bnM6QXJndW1lbnQiIExlbmd0 +aEZpZWxkPSJOb09mTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ikxhc3RNZXRob2RDYWxsVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAg +ICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RSZXR1cm5TdGF0dXMiIFR5cGVOYW1lPSJ0bnM6 +U3RhdHVzUmVzdWx0IiAvPg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOlN0cnVj +dHVyZWRUeXBlIE5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIiBCYXNlVHlwZT0idWE6 +RXh0ZW5zaW9uT2JqZWN0Ij4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZVNlc3Npb25JZCIg +VHlwZU5hbWU9InVhOk5vZGVJZCIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9IkNyZWF0ZUNsaWVu +dE5hbWUiIFR5cGVOYW1lPSJvcGM6U3RyaW5nIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iSW52 +b2NhdGlvbkNyZWF0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIgLz4NCiAgICA8b3Bj +OkZpZWxkIE5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgVHlwZU5hbWU9Im9wYzpEYXRlVGltZSIg +Lz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RDYWxsIiBUeXBlTmFtZT0ib3BjOlN0 +cmluZyIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRob2RTZXNzaW9uSWQiIFR5cGVO +YW1lPSJ1YTpOb2RlSWQiIC8+DQogICAgPG9wYzpGaWVsZCBOYW1lPSJOb09mTGFzdE1ldGhvZElu +cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMyIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiBUeXBlTmFtZT0idG5zOkFyZ3VtZW50IiBMZW5n +dGhGaWVsZD0iTm9PZkxhc3RNZXRob2RJbnB1dEFyZ3VtZW50cyIgLz4NCiAgICA8b3BjOkZpZWxk +IE5hbWU9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJndW1lbnRzIiBUeXBlTmFtZT0ib3BjOkludDMy +IiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZE91dHB1dEFyZ3VtZW50cyIgVHlw +ZU5hbWU9InRuczpBcmd1bWVudCIgTGVuZ3RoRmllbGQ9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0QXJn +dW1lbnRzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRob2RJbnB1dFZhbHVl +cyIgVHlwZU5hbWU9Im9wYzpJbnQzMiIgLz4NCiAgICA8b3BjOkZpZWxkIE5hbWU9Ikxhc3RNZXRo +b2RJbnB1dFZhbHVlcyIgVHlwZU5hbWU9InVhOlZhcmlhbnQiIExlbmd0aEZpZWxkPSJOb09mTGFz +dE1ldGhvZElucHV0VmFsdWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFtZT0iTm9PZkxhc3RNZXRo +b2RPdXRwdXRWYWx1ZXMiIFR5cGVOYW1lPSJvcGM6SW50MzIiIC8+DQogICAgPG9wYzpGaWVsZCBO +YW1lPSJMYXN0TWV0aG9kT3V0cHV0VmFsdWVzIiBUeXBlTmFtZT0idWE6VmFyaWFudCIgTGVuZ3Ro +RmllbGQ9Ik5vT2ZMYXN0TWV0aG9kT3V0cHV0VmFsdWVzIiAvPg0KICAgIDxvcGM6RmllbGQgTmFt +ZT0iTGFzdE1ldGhvZENhbGxUaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAvPg0KICAgIDxv +cGM6RmllbGQgTmFtZT0iTGFzdE1ldGhvZFJldHVyblN0YXR1cyIgVHlwZU5hbWU9InVhOlN0YXR1 +c0NvZGUiIC8+DQogIDwvb3BjOlN0cnVjdHVyZWRUeXBlPg0KDQogIDxvcGM6U3RydWN0dXJlZFR5 +cGUgTmFtZT0iQW5ub3RhdGlvbiIgQmFzZVR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCI+DQogICAg +PG9wYzpGaWVsZCBOYW1lPSJNZXNzYWdlIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IlVzZXJOYW1lIiBUeXBlTmFtZT0ib3BjOlN0cmluZyIgLz4NCiAgICA8 +b3BjOkZpZWxkIE5hbWU9IkFubm90YXRpb25UaW1lIiBUeXBlTmFtZT0ib3BjOkRhdGVUaW1lIiAv +Pg0KICA8L29wYzpTdHJ1Y3R1cmVkVHlwZT4NCg0KICA8b3BjOkVudW1lcmF0ZWRUeXBlIE5hbWU9 +IkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdCIgTGVuZ3RoSW5CaXRzPSIzMiI+DQogICAgPG9wYzpF +bnVtZXJhdGVkVmFsdWUgTmFtZT0iQWJzb2x1dGVWYWx1ZSIgVmFsdWU9IjAiIC8+DQogICAgPG9w +YzpFbnVtZXJhdGVkVmFsdWUgTmFtZT0iUGVyY2VudE9mVmFsdWUiIFZhbHVlPSIxIiAvPg0KICAg +IDxvcGM6RW51bWVyYXRlZFZhbHVlIE5hbWU9IlBlcmNlbnRPZlJhbmdlIiBWYWx1ZT0iMiIgLz4N +CiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJQZXJjZW50T2ZFVVJhbmdlIiBWYWx1ZT0i +MyIgLz4NCiAgICA8b3BjOkVudW1lcmF0ZWRWYWx1ZSBOYW1lPSJVbmtub3duIiBWYWx1ZT0iNCIg +Lz4NCiAgPC9vcGM6RW51bWVyYXRlZFR5cGU+DQoNCjwvb3BjOlR5cGVEaWN0aW9uYXJ5Pg== + + + + NamespaceUri + + i=68 + i=7617 + + + http://opcfoundation.org/UA/ + + + + Deprecated + + i=68 + i=7617 + + + true + + + + Union + + i=69 + i=7617 + + + Union + + + + KeyValuePair + + i=69 + i=7617 + + + KeyValuePair + + + + AdditionalParametersType + + i=69 + i=7617 + + + AdditionalParametersType + + + + EphemeralKeyType + + i=69 + i=7617 + + + EphemeralKeyType + + + + EndpointType + + i=69 + i=7617 + + + EndpointType + + + + RationalNumber + + i=69 + i=7617 + + + RationalNumber + + + + Vector + + i=69 + i=7617 + + + Vector + + + + 3DVector + + i=69 + i=7617 + + + ThreeDVector + + + + CartesianCoordinates + + i=69 + i=7617 + + + CartesianCoordinates + + + + 3DCartesianCoordinates + + i=69 + i=7617 + + + ThreeDCartesianCoordinates + + + + Orientation + + i=69 + i=7617 + + + Orientation + + + + 3DOrientation + + i=69 + i=7617 + + + ThreeDOrientation + + + + Frame + + i=69 + i=7617 + + + Frame + + + + 3DFrame + + i=69 + i=7617 + + + ThreeDFrame + + + + IdentityMappingRuleType + + i=69 + i=7617 + + + IdentityMappingRuleType + + + + CurrencyUnitType + + i=69 + i=7617 + + + CurrencyUnitType + + + + TrustListDataType + + i=69 + i=7617 + + + TrustListDataType + + + + TransactionErrorType + + i=69 + i=7617 + + + TransactionErrorType + + + + DataTypeSchemaHeader + + i=69 + i=7617 + + + DataTypeSchemaHeader + + + + DataTypeDescription + + i=69 + i=7617 + + + DataTypeDescription + + + + StructureDescription + + i=69 + i=7617 + + + StructureDescription + + + + EnumDescription + + i=69 + i=7617 + + + EnumDescription + + + + SimpleTypeDescription + + i=69 + i=7617 + + + SimpleTypeDescription + + + + UABinaryFileDataType + + i=69 + i=7617 + + + UABinaryFileDataType + + + + PortableQualifiedName + + i=69 + i=7617 + + + PortableQualifiedName + + + + PortableNodeId + + i=69 + i=7617 + + + PortableNodeId + + + + UnsignedRationalNumber + + i=69 + i=7617 + + + UnsignedRationalNumber + + + + DataSetMetaDataType + + i=69 + i=7617 + + + DataSetMetaDataType + + + + FieldMetaData + + i=69 + i=7617 + + + FieldMetaData + + + + ConfigurationVersionDataType + + i=69 + i=7617 + + + ConfigurationVersionDataType + + + + PublishedDataSetDataType + + i=69 + i=7617 + + + PublishedDataSetDataType + + + + PublishedDataSetSourceDataType + + i=69 + i=7617 + + + PublishedDataSetSourceDataType + + + + PublishedVariableDataType + + i=69 + i=7617 + + + PublishedVariableDataType + + + + PublishedDataItemsDataType + + i=69 + i=7617 + + + PublishedDataItemsDataType + + + + PublishedEventsDataType + + i=69 + i=7617 + + + PublishedEventsDataType + + + + PublishedDataSetCustomSourceDataType + + i=69 + i=7617 + + + PublishedDataSetCustomSourceDataType + + + + DataSetWriterDataType + + i=69 + i=7617 + + + DataSetWriterDataType + + + + DataSetWriterTransportDataType + + i=69 + i=7617 + + + DataSetWriterTransportDataType + + + + DataSetWriterMessageDataType + + i=69 + i=7617 + + + DataSetWriterMessageDataType + + + + PubSubGroupDataType + + i=69 + i=7617 + + + PubSubGroupDataType + + + + WriterGroupDataType + + i=69 + i=7617 + + + WriterGroupDataType + + + + WriterGroupTransportDataType + + i=69 + i=7617 + + + WriterGroupTransportDataType + + + + WriterGroupMessageDataType + + i=69 + i=7617 + + + WriterGroupMessageDataType + + + + PubSubConnectionDataType + + i=69 + i=7617 + + + PubSubConnectionDataType + + + + ConnectionTransportDataType + + i=69 + i=7617 + + + ConnectionTransportDataType + + + + NetworkAddressDataType + + i=69 + i=7617 + + + NetworkAddressDataType + + + + NetworkAddressUrlDataType + + i=69 + i=7617 + + + NetworkAddressUrlDataType + + + + ReaderGroupDataType + + i=69 + i=7617 + + + ReaderGroupDataType + + + + ReaderGroupTransportDataType + + i=69 + i=7617 + + + ReaderGroupTransportDataType + + + + ReaderGroupMessageDataType + + i=69 + i=7617 + + + ReaderGroupMessageDataType + + + + DataSetReaderDataType + + i=69 + i=7617 + + + DataSetReaderDataType + + + + DataSetReaderTransportDataType + + i=69 + i=7617 + + + DataSetReaderTransportDataType + + + + DataSetReaderMessageDataType + + i=69 + i=7617 + + + DataSetReaderMessageDataType + + + + SubscribedDataSetDataType + + i=69 + i=7617 + + + SubscribedDataSetDataType + + + + TargetVariablesDataType + + i=69 + i=7617 + + + TargetVariablesDataType + + + + FieldTargetDataType + + i=69 + i=7617 + + + FieldTargetDataType + + + + SubscribedDataSetMirrorDataType + + i=69 + i=7617 + + + SubscribedDataSetMirrorDataType + + + + PubSubConfigurationDataType + + i=69 + i=7617 + + + PubSubConfigurationDataType + + + + StandaloneSubscribedDataSetRefDataType + + i=69 + i=7617 + + + StandaloneSubscribedDataSetRefDataType + + + + StandaloneSubscribedDataSetDataType + + i=69 + i=7617 + + + StandaloneSubscribedDataSetDataType + + + + SecurityGroupDataType + + i=69 + i=7617 + + + SecurityGroupDataType + + + + PubSubKeyPushTargetDataType + + i=69 + i=7617 + + + PubSubKeyPushTargetDataType + + + + PubSubConfiguration2DataType + + i=69 + i=7617 + + + PubSubConfiguration2DataType + + + + UadpWriterGroupMessageDataType + + i=69 + i=7617 + + + UadpWriterGroupMessageDataType + + + + UadpDataSetWriterMessageDataType + + i=69 + i=7617 + + + UadpDataSetWriterMessageDataType + + + + UadpDataSetReaderMessageDataType + + i=69 + i=7617 + + + UadpDataSetReaderMessageDataType + + + + JsonWriterGroupMessageDataType + + i=69 + i=7617 + + + JsonWriterGroupMessageDataType + + + + JsonDataSetWriterMessageDataType + + i=69 + i=7617 + + + JsonDataSetWriterMessageDataType + + + + JsonDataSetReaderMessageDataType + + i=69 + i=7617 + + + JsonDataSetReaderMessageDataType + + + + QosDataType + + i=69 + i=7617 + + + QosDataType + + + + TransmitQosDataType + + i=69 + i=7617 + + + TransmitQosDataType + + + + TransmitQosPriorityDataType + + i=69 + i=7617 + + + TransmitQosPriorityDataType + + + + ReceiveQosDataType + + i=69 + i=7617 + + + ReceiveQosDataType + + + + ReceiveQosPriorityDataType + + i=69 + i=7617 + + + ReceiveQosPriorityDataType + + + + DatagramConnectionTransportDataType + + i=69 + i=7617 + + + DatagramConnectionTransportDataType + + + + DatagramConnectionTransport2DataType + + i=69 + i=7617 + + + DatagramConnectionTransport2DataType + + + + DatagramWriterGroupTransportDataType + + i=69 + i=7617 + + + DatagramWriterGroupTransportDataType + + + + DatagramWriterGroupTransport2DataType + + i=69 + i=7617 + + + DatagramWriterGroupTransport2DataType + + + + DatagramDataSetReaderTransportDataType + + i=69 + i=7617 + + + DatagramDataSetReaderTransportDataType + + + + BrokerConnectionTransportDataType + + i=69 + i=7617 + + + BrokerConnectionTransportDataType + + + + BrokerWriterGroupTransportDataType + + i=69 + i=7617 + + + BrokerWriterGroupTransportDataType + + + + BrokerDataSetWriterTransportDataType + + i=69 + i=7617 + + + BrokerDataSetWriterTransportDataType + + + + BrokerDataSetReaderTransportDataType + + i=69 + i=7617 + + + BrokerDataSetReaderTransportDataType + + + + PubSubConfigurationRefDataType + + i=69 + i=7617 + + + PubSubConfigurationRefDataType + + + + PubSubConfigurationValueDataType + + i=69 + i=7617 + + + PubSubConfigurationValueDataType + + + + AliasNameDataType + + i=69 + i=7617 + + + AliasNameDataType + + + + UserManagementDataType + + i=69 + i=7617 + + + UserManagementDataType + + + + PriorityMappingEntryType + + i=69 + i=7617 + + + PriorityMappingEntryType + + + + ReferenceDescriptionDataType + + i=69 + i=7617 + + + ReferenceDescriptionDataType + + + + ReferenceListEntryDataType + + i=69 + i=7617 + + + ReferenceListEntryDataType + + + + RolePermissionType + + i=69 + i=7617 + + + RolePermissionType + + + + DataTypeDefinition + + i=69 + i=7617 + + + DataTypeDefinition + + + + StructureField + + i=69 + i=7617 + + + StructureField + + + + StructureDefinition + + i=69 + i=7617 + + + StructureDefinition + + + + EnumDefinition + + i=69 + i=7617 + + + EnumDefinition + + + + Argument + + i=69 + i=7617 + + + Argument + + + + EnumValueType + + i=69 + i=7617 + + + EnumValueType + + + + EnumField + + i=69 + i=7617 + + + EnumField + + + + OptionSet + + i=69 + i=7617 + + + OptionSet + + + + TimeZoneDataType + + i=69 + i=7617 + + + TimeZoneDataType + + + + ApplicationDescription + + i=69 + i=7617 + + + ApplicationDescription + + + + ServerOnNetwork + + i=69 + i=7617 + + + ServerOnNetwork + + + + UserTokenPolicy + + i=69 + i=7617 + + + UserTokenPolicy + + + + EndpointDescription + + i=69 + i=7617 + + + EndpointDescription + + + + RegisteredServer + + i=69 + i=7617 + + + RegisteredServer + + + + DiscoveryConfiguration + + i=69 + i=7617 + + + DiscoveryConfiguration + + + + MdnsDiscoveryConfiguration + + i=69 + i=7617 + + + MdnsDiscoveryConfiguration + + + + SignedSoftwareCertificate + + i=69 + i=7617 + + + SignedSoftwareCertificate + + + + UserIdentityToken + + i=69 + i=7617 + + + UserIdentityToken + + + + AnonymousIdentityToken + + i=69 + i=7617 + + + AnonymousIdentityToken + + + + UserNameIdentityToken + + i=69 + i=7617 + + + UserNameIdentityToken + + + + X509IdentityToken + + i=69 + i=7617 + + + X509IdentityToken + + + + IssuedIdentityToken + + i=69 + i=7617 + + + IssuedIdentityToken + + + + AddNodesItem + + i=69 + i=7617 + + + AddNodesItem + + + + AddReferencesItem + + i=69 + i=7617 + + + AddReferencesItem + + + + DeleteNodesItem + + i=69 + i=7617 + + + DeleteNodesItem + + + + DeleteReferencesItem + + i=69 + i=7617 + + + DeleteReferencesItem + + + + RelativePathElement + + i=69 + i=7617 + + + RelativePathElement + + + + RelativePath + + i=69 + i=7617 + + + RelativePath + + + + EndpointConfiguration + + i=69 + i=7617 + + + EndpointConfiguration + + + + ContentFilterElement + + i=69 + i=7617 + + + ContentFilterElement + + + + ContentFilter + + i=69 + i=7617 + + + ContentFilter + + + + FilterOperand + + i=69 + i=7617 + + + FilterOperand + + + + ElementOperand + + i=69 + i=7617 + + + ElementOperand + + + + LiteralOperand + + i=69 + i=7617 + + + LiteralOperand + + + + AttributeOperand + + i=69 + i=7617 + + + AttributeOperand + + + + SimpleAttributeOperand + + i=69 + i=7617 + + + SimpleAttributeOperand + + + + HistoryEvent + + i=69 + i=7617 + + + HistoryEvent + + + + MonitoringFilter + + i=69 + i=7617 + + + MonitoringFilter + + + + EventFilter + + i=69 + i=7617 + + + EventFilter + + + + AggregateConfiguration + + i=69 + i=7617 + + + AggregateConfiguration + + + + HistoryEventFieldList + + i=69 + i=7617 + + + HistoryEventFieldList + + + + BuildInfo + + i=69 + i=7617 + + + BuildInfo + + + + RedundantServerDataType + + i=69 + i=7617 + + + RedundantServerDataType + + + + EndpointUrlListDataType + + i=69 + i=7617 + + + EndpointUrlListDataType + + + + NetworkGroupDataType + + i=69 + i=7617 + + + NetworkGroupDataType + + + + SamplingIntervalDiagnosticsDataType + + i=69 + i=7617 + + + SamplingIntervalDiagnosticsDataType + + + + ServerDiagnosticsSummaryDataType + + i=69 + i=7617 + + + ServerDiagnosticsSummaryDataType + + + + ServerStatusDataType + + i=69 + i=7617 + + + ServerStatusDataType + + + + SessionDiagnosticsDataType + + i=69 + i=7617 + + + SessionDiagnosticsDataType + + + + SessionSecurityDiagnosticsDataType + + i=69 + i=7617 + + + SessionSecurityDiagnosticsDataType + + + + ServiceCounterDataType + + i=69 + i=7617 + + + ServiceCounterDataType + + + + StatusResult + + i=69 + i=7617 + + + StatusResult + + + + SubscriptionDiagnosticsDataType + + i=69 + i=7617 + + + SubscriptionDiagnosticsDataType + + + + ModelChangeStructureDataType + + i=69 + i=7617 + + + ModelChangeStructureDataType + + + + SemanticChangeStructureDataType + + i=69 + i=7617 + + + SemanticChangeStructureDataType + + + + Range + + i=69 + i=7617 + + + Range + + + + EUInformation + + i=69 + i=7617 + + + EUInformation + + + + ComplexNumberType + + i=69 + i=7617 + + + ComplexNumberType + + + + DoubleComplexNumberType + + i=69 + i=7617 + + + DoubleComplexNumberType + + + + AxisInformation + + i=69 + i=7617 + + + AxisInformation + + + + XVType + + i=69 + i=7617 + + + XVType + + + + ProgramDiagnosticDataType + + i=69 + i=7617 + + + ProgramDiagnosticDataType + + + + ProgramDiagnostic2DataType + + i=69 + i=7617 + + + ProgramDiagnostic2DataType + + + + Annotation + + i=69 + i=7617 + + + Annotation + + + + Default XML + + i=12756 + i=12762 + i=76 + + + + Default XML + + i=14533 + i=14829 + i=76 + + + + Default XML + + i=16313 + i=17542 + i=76 + + + + Default XML + + i=17548 + i=17554 + i=76 + + + + Default XML + + i=15528 + i=16024 + i=76 + + + + Default XML + + i=18806 + i=18860 + i=76 + + + + Default XML + + i=18807 + i=18863 + i=76 + + + + Default XML + + i=18808 + i=18866 + i=76 + + + + Default XML + + i=18809 + i=18869 + i=76 + + + + Default XML + + i=18810 + i=19049 + i=76 + + + + Default XML + + i=18811 + i=19052 + i=76 + + + + Default XML + + i=18812 + i=19055 + i=76 + + + + Default XML + + i=18813 + i=19058 + i=76 + + + + Default XML + + i=18814 + i=19061 + i=76 + + + + Default XML + + i=15634 + i=15730 + i=76 + + + + Default XML + + i=23498 + i=23522 + i=76 + + + + Default XML + + i=12554 + i=12677 + i=76 + + + + Default XML + + i=32285 + i=32387 + i=76 + + + + Default XML + + i=15534 + i=16027 + i=76 + + + + Default XML + + i=14525 + i=14811 + i=76 + + + + Default XML + + i=15487 + i=15591 + i=76 + + + + Default XML + + i=15488 + i=15594 + i=76 + + + + Default XML + + i=15005 + i=15585 + i=76 + + + + Default XML + + i=15006 + i=15588 + i=76 + + + + Default XML + + i=24105 + i=24123 + i=76 + + + + Default XML + + i=24106 + i=24126 + i=76 + + + + Default XML + + i=24107 + i=24129 + i=76 + + + + Default XML + + i=14523 + i=14805 + i=76 + + + + Default XML + + i=14524 + i=14808 + i=76 + + + + Default XML + + i=14593 + i=14832 + i=76 + + + + Default XML + + i=15578 + i=16030 + i=76 + + + + Default XML + + i=15580 + i=16033 + i=76 + + + + Default XML + + i=14273 + i=14320 + i=76 + + + + Default XML + + i=15581 + i=16037 + i=76 + + + + Default XML + + i=15582 + i=16040 + i=76 + + + + Default XML + + i=25269 + i=25549 + i=76 + + + + Default XML + + i=15597 + i=16047 + i=76 + + + + Default XML + + i=15598 + i=16050 + i=76 + + + + Default XML + + i=15605 + i=16053 + i=76 + + + + Default XML + + i=15609 + i=16056 + i=76 + + + + Default XML + + i=15480 + i=21180 + i=76 + + + + Default XML + + i=15611 + i=16062 + i=76 + + + + Default XML + + i=15616 + i=16065 + i=76 + + + + Default XML + + i=15617 + i=16068 + i=76 + + + + Default XML + + i=15618 + i=16071 + i=76 + + + + Default XML + + i=15502 + i=21183 + i=76 + + + + Default XML + + i=15510 + i=21186 + i=76 + + + + Default XML + + i=15520 + i=21189 + i=76 + + + + Default XML + + i=15621 + i=16077 + i=76 + + + + Default XML + + i=15622 + i=16080 + i=76 + + + + Default XML + + i=15623 + i=16083 + i=76 + + + + Default XML + + i=15628 + i=16086 + i=76 + + + + Default XML + + i=15629 + i=16089 + i=76 + + + + Default XML + + i=15630 + i=16092 + i=76 + + + + Default XML + + i=15631 + i=16095 + i=76 + + + + Default XML + + i=14744 + i=14835 + i=76 + + + + Default XML + + i=15635 + i=16098 + i=76 + + + + Default XML + + i=15530 + i=21192 + i=76 + + + + Default XML + + i=23599 + i=23938 + i=76 + + + + Default XML + + i=23600 + i=23941 + i=76 + + + + Default XML + + i=23601 + i=23944 + i=76 + + + + Default XML + + i=25270 + i=25552 + i=76 + + + + Default XML + + i=23602 + i=23947 + i=76 + + + + Default XML + + i=15645 + i=16104 + i=76 + + + + Default XML + + i=15652 + i=16107 + i=76 + + + + Default XML + + i=15653 + i=16110 + i=76 + + + + Default XML + + i=15657 + i=16113 + i=76 + + + + Default XML + + i=15664 + i=16116 + i=76 + + + + Default XML + + i=15665 + i=16119 + i=76 + + + + Default XML + + i=23603 + i=23950 + i=76 + + + + Default XML + + i=23604 + i=23953 + i=76 + + + + Default XML + + i=23605 + i=23956 + i=76 + + + + Default XML + + i=23608 + i=23965 + i=76 + + + + Default XML + + i=23609 + i=23968 + i=76 + + + + Default XML + + i=17467 + i=17473 + i=76 + + + + Default XML + + i=23612 + i=23977 + i=76 + + + + Default XML + + i=15532 + i=21195 + i=76 + + + + Default XML + + i=23613 + i=23980 + i=76 + + + + Default XML + + i=23614 + i=23983 + i=76 + + + + Default XML + + i=15007 + i=15640 + i=76 + + + + Default XML + + i=15667 + i=16125 + i=76 + + + + Default XML + + i=15669 + i=16144 + i=76 + + + + Default XML + + i=15670 + i=16147 + i=76 + + + + Default XML + + i=25519 + i=25555 + i=76 + + + + Default XML + + i=25520 + i=25558 + i=76 + + + + Default XML + + i=23468 + i=23508 + i=76 + + + + Default XML + + i=24281 + i=24297 + i=76 + + + + Default XML + + i=25220 + i=25244 + i=76 + + + + Default XML + + i=32659 + i=32671 + i=76 + + + + Default XML + + i=32660 + i=32674 + i=76 + + + + Default XML + + i=96 + i=16127 + i=76 + + + + Default XML + + i=97 + i=18166 + i=76 + + + + Default XML + + i=101 + i=18169 + i=76 + + + + Default XML + + i=99 + i=18172 + i=76 + + + + Default XML + + i=100 + i=18175 + i=76 + + + + Default XML + + i=296 + i=8285 + i=76 + + + + Default XML + + i=7594 + i=8291 + i=76 + + + + Default XML + + i=102 + i=14826 + i=76 + + + + Default XML + + i=12755 + i=12759 + i=76 + + + + Default XML + + i=8912 + i=8918 + i=76 + + + + Default XML + + i=308 + i=8300 + i=76 + + + + Default XML + + i=12189 + i=12201 + i=76 + + + + Default XML + + i=304 + i=8297 + i=76 + + + + Default XML + + i=312 + i=8303 + i=76 + + + + Default XML + + i=432 + i=8417 + i=76 + + + + Default XML + + i=12890 + i=12894 + i=76 + + + + Default XML + + i=12891 + i=12897 + i=76 + + + + Default XML + + i=344 + i=8333 + i=76 + + + + Default XML + + i=316 + i=8306 + i=76 + + + + Default XML + + i=319 + i=8309 + i=76 + + + + Default XML + + i=322 + i=8312 + i=76 + + + + Default XML + + i=325 + i=8315 + i=76 + + + + Default XML + + i=938 + i=8318 + i=76 + + + + Default XML + + i=376 + i=8363 + i=76 + + + + Default XML + + i=379 + i=8366 + i=76 + + + + Default XML + + i=382 + i=8369 + i=76 + + + + Default XML + + i=385 + i=8372 + i=76 + + + + Default XML + + i=537 + i=12712 + i=76 + + + + Default XML + + i=540 + i=12715 + i=76 + + + + Default XML + + i=331 + i=8321 + i=76 + + + + Default XML + + i=583 + i=8564 + i=76 + + + + Default XML + + i=586 + i=8567 + i=76 + + + + Default XML + + i=589 + i=8570 + i=76 + + + + Default XML + + i=592 + i=8573 + i=76 + + + + Default XML + + i=595 + i=8576 + i=76 + + + + Default XML + + i=598 + i=8579 + i=76 + + + + Default XML + + i=601 + i=8582 + i=76 + + + + Default XML + + i=659 + i=8639 + i=76 + + + + Default XML + + i=719 + i=8702 + i=76 + + + + Default XML + + i=725 + i=8708 + i=76 + + + + Default XML + + i=948 + i=8711 + i=76 + + + + Default XML + + i=920 + i=8807 + i=76 + + + + Default XML + + i=338 + i=8327 + i=76 + + + + Default XML + + i=853 + i=8843 + i=76 + + + + Default XML + + i=11943 + i=11951 + i=76 + + + + Default XML + + i=11944 + i=11954 + i=76 + + + + Default XML + + i=856 + i=8846 + i=76 + + + + Default XML + + i=859 + i=8849 + i=76 + + + + Default XML + + i=862 + i=8852 + i=76 + + + + Default XML + + i=865 + i=8855 + i=76 + + + + Default XML + + i=868 + i=8858 + i=76 + + + + Default XML + + i=871 + i=8861 + i=76 + + + + Default XML + + i=299 + i=8294 + i=76 + + + + Default XML + + i=874 + i=8864 + i=76 + + + + Default XML + + i=877 + i=8867 + i=76 + + + + Default XML + + i=897 + i=8870 + i=76 + + + + Default XML + + i=884 + i=8873 + i=76 + + + + Default XML + + i=887 + i=8876 + i=76 + + + + Default XML + + i=12171 + i=12175 + i=76 + + + + Default XML + + i=12172 + i=12178 + i=76 + + + + Default XML + + i=12079 + i=12083 + i=76 + + + + Default XML + + i=12080 + i=12086 + i=76 + + + + Default XML + + i=894 + i=8882 + i=76 + + + + Default XML + + i=24033 + i=24039 + i=76 + + + + Default XML + + i=891 + i=8879 + i=76 + + + + Opc.Ua + + i=8254 + i=15039 + i=12762 + i=14829 + i=17542 + i=17554 + i=16024 + i=18860 + i=18863 + i=18866 + i=18869 + i=19049 + i=19052 + i=19055 + i=19058 + i=19061 + i=15730 + i=23522 + i=12677 + i=32387 + i=16027 + i=14811 + i=15591 + i=15594 + i=15585 + i=15588 + i=24123 + i=24126 + i=24129 + i=14805 + i=14808 + i=14832 + i=16030 + i=16033 + i=14320 + i=16037 + i=16040 + i=25549 + i=16047 + i=16050 + i=16053 + i=16056 + i=21180 + i=16062 + i=16065 + i=16068 + i=16071 + i=21183 + i=21186 + i=21189 + i=16077 + i=16080 + i=16083 + i=16086 + i=16089 + i=16092 + i=16095 + i=14835 + i=16098 + i=21192 + i=23938 + i=23941 + i=23944 + i=25552 + i=23947 + i=16104 + i=16107 + i=16110 + i=16113 + i=16116 + i=16119 + i=23950 + i=23953 + i=23956 + i=23965 + i=23968 + i=17473 + i=23977 + i=21195 + i=23980 + i=23983 + i=15640 + i=16125 + i=16144 + i=16147 + i=25555 + i=25558 + i=23508 + i=24297 + i=25244 + i=32671 + i=32674 + i=16127 + i=18166 + i=18169 + i=18172 + i=18175 + i=8285 + i=8291 + i=14826 + i=12759 + i=8918 + i=8300 + i=12201 + i=8297 + i=8303 + i=8417 + i=12894 + i=12897 + i=8333 + i=8306 + i=8309 + i=8312 + i=8315 + i=8318 + i=8363 + i=8366 + i=8369 + i=8372 + i=12712 + i=12715 + i=8321 + i=8564 + i=8567 + i=8570 + i=8573 + i=8576 + i=8579 + i=8582 + i=8639 + i=8702 + i=8708 + i=8711 + i=8807 + i=8327 + i=8843 + i=11951 + i=11954 + i=8846 + i=8849 + i=8852 + i=8855 + i=8858 + i=8861 + i=8294 + i=8864 + i=8867 + i=8870 + i=8873 + i=8876 + i=12175 + i=12178 + i=12083 + i=12086 + i=8882 + i=24039 + i=8879 + i=92 + i=72 + + + PHhzOnNjaGVtYQ0KICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi +DQogIHhtbG5zOnVhPSJodHRwOi8vb3BjZm91bmRhdGlvbi5vcmcvVUEvMjAwOC8wMi9UeXBlcy54 +c2QiDQogIHhtbG5zOnRucz0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLzIwMDgvMDIvVHlw +ZXMueHNkIg0KICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGNmb3VuZGF0aW9uLm9yZy9VQS8y +MDA4LzAyL1R5cGVzLnhzZCINCiAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiDQo+DQog +IDx4czphbm5vdGF0aW9uPg0KICAgIDx4czphcHBpbmZvPg0KICAgICAgPHRuczpNb2RlbCBNb2Rl +bFVyaT0iaHR0cDovL29wY2ZvdW5kYXRpb24ub3JnL1VBLyIgVmVyc2lvbj0iMS4wNS4wMiIgUHVi +bGljYXRpb25EYXRlPSIyMDIyLTExLTAxVDAwOjAwOjAwWiIgLz4NCiAgICA8L3hzOmFwcGluZm8+ +DQogIDwveHM6YW5ub3RhdGlvbj4NCiAgDQogIDx4czplbGVtZW50IG5hbWU9IkJvb2xlYW4iIHR5 +cGU9InhzOmJvb2xlYW4iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkJvb2xl +YW4iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJvb2xlYW4i +IHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mQm9vbGVhbiIgdHlwZT0idG5zOkxpc3RPZkJvb2xlYW4iIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iU0J5dGUiIHR5cGU9Inhz +OmJ5dGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlNCeXRlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTQnl0ZSIgdHlwZT0ieHM6Ynl0 +ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTQnl0 +ZSIgdHlwZT0idG5zOkxpc3RPZlNCeXRlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czplbGVtZW50IG5hbWU9IkJ5dGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnl0ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnl0ZSIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJ5dGUiIHR5cGU9 +InRuczpMaXN0T2ZCeXRlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpl +bGVtZW50IG5hbWU9IkludDE2IiB0eXBlPSJ4czpzaG9ydCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mSW50MTYiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkludDE2IiB0eXBlPSJ4czpzaG9ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJbnQxNiIgdHlwZT0idG5zOkxpc3RPZkludDE2IiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IlVJbnQx +NiIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mVUludDE2Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJVSW50MTYiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz +PSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVUludDE2IiB0eXBlPSJ0bnM6TGlzdE9mVUludDE2 +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9Iklu +dDMyIiB0eXBlPSJ4czppbnQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZklu +dDMyIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbnQzMiIg +dHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZkludDMyIiB0eXBlPSJ0bnM6TGlzdE9mSW50MzIiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iVUludDMyIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVUludDMyIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVSW50MzIiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp +c3RPZlVJbnQzMiIgdHlwZT0idG5zOkxpc3RPZlVJbnQzMiIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbnQ2NCIgdHlwZT0ieHM6bG9uZyIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSW50NjQiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkludDY0IiB0eXBlPSJ4czpsb25nIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkludDY0IiB0eXBlPSJ0 +bnM6TGlzdE9mSW50NjQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVUludDY0IiB0eXBlPSJ4czp1bnNpZ25lZExvbmciIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlVJbnQ2NCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVUludDY0IiB0eXBlPSJ4czp1bnNpZ25lZExvbmciIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVUludDY0IiB0eXBlPSJ0 +bnM6TGlzdE9mVUludDY0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpl +bGVtZW50IG5hbWU9IkZsb2F0IiB0eXBlPSJ4czpmbG9hdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mRmxvYXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkZsb2F0IiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGbG9hdCIgdHlwZT0idG5zOkxpc3RPZkZsb2F0IiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkRvdWJs +ZSIgdHlwZT0ieHM6ZG91YmxlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZE +b3VibGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRvdWJs +ZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkRvdWJsZSIgdHlwZT0idG5zOkxpc3RPZkRvdWJsZSIgbmlsbGFibGU9InRy +dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJpbmciIG5pbGxhYmxl +PSJ0cnVlIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZlN0cmluZyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +U3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mU3RyaW5nIiB0eXBlPSJ0bnM6TGlzdE9mU3RyaW5nIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkRhdGVUaW1lIiBu +aWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkRhdGVUaW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEYXRlVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0ZVRpbWUiIHR5cGU9InRuczpMaXN0 +T2ZEYXRlVGltZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iR3VpZCI+DQogICAgPHhzOmFubm90YXRpb24+DQogICAgICA8eHM6YXBwaW5m +bz4NCiAgICAgICAgPElzVmFsdWVUeXBlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQu +Y29tLzIwMDMvMTAvU2VyaWFsaXphdGlvbi8iPnRydWU8L0lzVmFsdWVUeXBlPg0KICAgICAgPC94 +czphcHBpbmZvPg0KICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9IjEiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikd1aWQiIHR5cGU9InRuczpH +dWlkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZHdWlkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJHdWlkIiB0eXBlPSJ0bnM6R3VpZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZHdWlkIiB0eXBlPSJ0bnM6TGlzdE9mR3VpZCIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCeXRlU3RyaW5nIiBu +aWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZCeXRlU3RyaW5nIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJCeXRlU3RyaW5nIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9j +Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp +c3RPZkJ5dGVTdHJpbmciIHR5cGU9InRuczpMaXN0T2ZCeXRlU3RyaW5nIiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZYbWxFbGVt +ZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJYbWxFbGVt +ZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSI+ +DQogICAgICAgIDx4czpjb21wbGV4VHlwZT4NCiAgICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICAgICAgICA8eHM6YW55IG1pbk9jY3Vycz0iMCIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCiAg +ICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPg0KICAgICAg +PC94czplbGVtZW50Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlhtbEVsZW1lbnQiIHR5cGU9InRuczpMaXN0T2ZYbWxF +bGVtZW50IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJOb2RlSWQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IklkZW50aWZpZXIiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +IjEiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0idG5zOk5vZGVJZCIgbmls +bGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mTm9kZUlkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO +b2RlSWQiIHR5cGU9InRuczpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5vZGVJZCIgdHlwZT0idG5zOkxpc3RP +Zk5vZGVJZCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iRXhwYW5kZWROb2RlSWQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IklkZW50aWZpZXIiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9IjEiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV4cGFuZGVkTm9kZUlkIiB0eXBl +PSJ0bnM6RXhwYW5kZWROb2RlSWQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkV4cGFuZGVkTm9kZUlkIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFeHBhbmRlZE5vZGVJZCIgdHlwZT0idG5z +OkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFeHBhbmRlZE5vZGVJZCIgdHlwZT0idG5zOkxpc3RP +ZkV4cGFuZGVkTm9kZUlkIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJTdGF0dXNDb2RlIj4NCiAgICA8eHM6YW5ub3RhdGlvbj4NCiAgICAg +IDx4czphcHBpbmZvPg0KICAgICAgICA8SXNWYWx1ZVR5cGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFz +Lm1pY3Jvc29mdC5jb20vMjAwMy8xMC9TZXJpYWxpemF0aW9uLyI+dHJ1ZTwvSXNWYWx1ZVR5cGU+ +DQogICAgICA8L3hzOmFwcGluZm8+DQogICAgPC94czphbm5vdGF0aW9uPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvZGUiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlwZT0idG5zOlN0YXR1c0NvZGUi +PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3RhdHVzQ29k +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29k +ZSIgdHlwZT0idG5zOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mU3RhdHVzQ29kZSIgdHlwZT0idG5zOkxpc3RPZlN0YXR1c0NvZGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkRpYWdub3N0aWNJbmZvIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTeW1ib2xpY0lkIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5hbWVzcGFjZVVyaSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGUiIHR5cGU9InhzOmludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxpemVkVGV4dCIgdHlwZT0i +eHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRpdGlv +bmFsSW5mbyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJbm5lclN0YXR1c0NvZGUiIHR5cGU9InRuczpTdGF0dXNDb2RlIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbm5lckRpYWdub3N0aWNJbmZvIiB0 +eXBlPSJ0bnM6RGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGlj +SW5mbyIgdHlwZT0idG5zOkRpYWdub3N0aWNJbmZvIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaWFnbm9zdGljSW5mbyI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm8i +IHR5cGU9InRuczpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGlhZ25vc3RpY0luZm8iIHR5cGU9 +InRuczpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTG9jYWxpemVkVGV4dCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlIiB0eXBlPSJ4czpzdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJU +ZXh0IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkxvY2FsaXplZFRleHQiIHR5cGU9InRuczpMb2NhbGl6ZWRUZXh0IiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTG9jYWxpemVkVGV4dCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxpemVkVGV4dCIg +dHlwZT0idG5zOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkxvY2FsaXplZFRleHQiIHR5cGU9InRu +czpMaXN0T2ZMb2NhbGl6ZWRUZXh0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJRdWFsaWZpZWROYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VJbmRleCIgdHlwZT0ieHM6dW5zaWdu +ZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIg +dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1 +YWxpZmllZE5hbWUiIHR5cGU9InRuczpRdWFsaWZpZWROYW1lIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUXVhbGlmaWVkTmFtZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVhbGlmaWVkTmFtZSIgdHlwZT0i +dG5zOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlF1YWxpZmllZE5hbWUiIHR5cGU9InRuczpMaXN0 +T2ZRdWFsaWZpZWROYW1lIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDwhLS0N +CiAgICBTb21lIGVudmlyb25tZW50cyByZXF1aXJlIGEgV1NETC9YU0Qgd2hpY2ggZXhwbGljaXRs +eSBkZWZpbmVzIGFsbCBwb3NzaWJsZSB0eXBlcy4NCiAgICBUaGUgVUEgV1NETC9YU0QgY2FuIGJl +IG1vZGlmaWVkIHRvIHN1cHBvcnQgdGhlc2UgZW52aXJvbm1lbnRzIGJ5IHJlcGxhY2luZyB0aGUN +CiAgICBkZWZpbml0aW9ucyBvZiB0aGUgRXh0ZW5zaW9uT2JqZWN0Qm9keSBhbmQgVmFyaWFudFZh +bHVlIGNvbXBsZXggdHlwZXMgd2l0aCB0aGUNCiAgICBkZWZpbml0aW9ucyBpbiB0aGUgY29tbWVu +dHMgc2hvd24gaGVyZS4gRGV2ZWxvcGVycyB3b3VsZCB0aGVuIGRlZmluZSBzdWJ0eXBlcw0KICAg +IG9mIHRoZSBFeHRlbnNpb25PYmplY3RCb2R5IHR5cGUgd2hpY2ggZXhwbGljaXRseSBkZWNsYXJl +IGEgY2hvaWNlIGJldHdlZW4gYWxsIG9mIHRoZQ0KICAgIGNvbXBsZXggdHlwZXMgdXNlZCBieSB0 +aGUgc3lzdGVtLiBUaGUgRXhhbXBsZUV4dGVuc2lvbk9iamVjdEJvZHkgc3VidHlwZSBpcyBwcm92 +aWRlcw0KICAgIGEgdGVtcGxhdGUgYmFzZWQgb24gYSBmZXcgY29tbW9uIFVBLWRlZmluZWQgY29t +cGxleCB0eXBlcy4NCiAgICAtLT4NCg0KICA8IS0tDQogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkV4dGVuc2lvbk9iamVjdEJvZHkiIC8+DQoNCiAgICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXhh +bXBsZUV4dGVuc2lvbk9iamVjdEJvZHkiPg0KICAgICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAg +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpFeHRlbnNpb25PYmplY3RCb2R5Ij4NCiAgICAg +ICAgICA8eHM6Y2hvaWNlPg0KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXJndW1lbnQi +IHR5cGU9InRuczpBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJJZGVudGl0eVRva2VuIiB0eXBlPSJ0bnM6 +VXNlcklkZW50aXR5VG9rZW4iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyTmFtZUlkZW50aXR5VG9rZW4iIHR5cGU9InRu +czpVc2VyTmFtZUlkZW50aXR5VG9rZW4iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgICAgPC94czpjaG9pY2U+DQogICAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgICAg +PC94czpjb21wbGV4Q29udGVudD4NCiAgICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogICAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkV4dGVuc2lvbk9iamVjdCI+DQogICAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IlR5cGVJZCIgdHlwZT0idG5zOkV4cGFuZGVkTm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJCb2R5IiBtaW5PY2N1cnM9IjAiIHR5cGU9InRuczpFeHRlbnNpb25PYmplY3RCb2R5IiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgPC94czpjb21wbGV4 +VHlwZT4NCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb25PYmplY3QiIHR5cGU9InRuczpF +eHRlbnNpb25PYmplY3QiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIC0tPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJFeHRlbnNpb25PYmplY3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlR5cGVJZCIgdHlwZT0idG5zOk5vZGVJZCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJvZHkiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KICAgICAgICA8eHM6Y29tcGxleFR5cGU+DQogICAg +ICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgICAgPHhzOmFueSBtaW5PY2N1cnM9IjAiIHBy +b2Nlc3NDb250ZW50cz0ibGF4Ii8+DQogICAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgICAg +PC94czpjb21wbGV4VHlwZT4NCiAgICAgIDwveHM6ZWxlbWVudD4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb25PYmpl +Y3QiIHR5cGU9InRuczpFeHRlbnNpb25PYmplY3QiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFeHRlbnNpb25PYmplY3QiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbk9iamVjdCIgdHlwZT0idG5z +OkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXh0ZW5zaW9uT2JqZWN0IiB0eXBlPSJ0bnM6TGlz +dE9mRXh0ZW5zaW9uT2JqZWN0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDwh +LS0NCiAgICBTb21lIFdTREwvWE1MIGNvbXBpbGVycyBoYXZlIGlzc3VlcyB3aXRoIHRoZSB4czpj +aG9pY2UgY29uc3RydWN0LiBGb3IgdGhhdCByZWFzb24NCiAgICB0aGUgZGVmYXVsdCBkZWNsYXJh +dGlvbiBvZiBhIFZhcmlhbnQgdXNlcyB4czphbnkgY29uc3RydWN0LiBUaGUgc2NoZW1hIGFjdXR1 +YWxseQ0KICAgIGRlZmluZWQgYnkgdGhlIHNwZWNpZmljYXRpb24gaXMgcHJvdmlkZWQgYnkgdGhl +IE1hdHJpeCBhbmQgVmFyaWFudFZhbHVlIGNvbXBsZXggdHlwZXMNCiAgICBzaG93biBpbiBjb21t +ZW50cyBiZWxvdy4gQXBwbGljYXRpb24gZGV2ZWxvcGVycyBjYW4gcmVwbGFjZSB0aGUgVmFyaWFu +dFZhbHVlIGRlY2xhcmF0aW9uDQogICAgd2l0aCB0aGUgc3BlY2lmaWMgZGVjbGFyYXRpb24gaWYg +dGhleSBoYXZlIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgdGhhdCBjYW4gaGFuZGxlDQogICAg +dGhlIHhzOmNob2ljZSBjb25zdHJ1Y3QgaW4gYSByZWFzb25hYmxlIHdheS4NCiAgICAtLT4NCg0K +ICA8IS0tDQogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1hdHJpeCI+DQogICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpbWVuc2lvbnMiIHR5cGU9InRuczpM +aXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCiAg +ICAgICAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgICAgICAgIDx4czpj +aG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJCb29sZWFuIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IlNCeXRlIiB0eXBlPSJ4czpieXRlIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGUiIHR5cGU9InhzOnVu +c2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJJbnQxNiIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVUludDE2IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkludDMyIiB0eXBl +PSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVUludDMyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbnQ2NCIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVSW50NjQiIHR5cGU9Inhz +OnVuc2lnbmVkTG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJGbG9hdCIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RyaW5nIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0ZVRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikd1aWQiIHR5cGU9InRuczpHdWlkIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGVTdHJpbmciIHR5cGU9 +InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJYbWxFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCiAg +ICAgICAgICAgICAgICA8eHM6Y29tcGxleFR5cGU+DQogICAgICAgICAgICAgICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgICAgICAgICAgICAgIDx4czphbnkgbWluT2NjdXJzPSIwIiBwcm9jZXNz +Q29udGVudHM9ImxheCIgLz4NCiAgICAgICAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg +ICAgICAgICAgICAgPC94czpjb21wbGV4VHlwZT4NCiAgICAgICAgICAgICAgPC94czplbGVtZW50 +Pg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ0bnM6 +U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJOb2RlSWQiIHR5cGU9InRuczpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhwYW5kZWROb2RlSWQiIHR5cGU9InRuczpFeHBhbmRl +ZE5vZGVJZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJRdWFsaWZpZWROYW1lIiB0eXBlPSJ0bnM6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGl6ZWRUZXh0IiB0eXBlPSJ0 +bnM6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJFeHRlbnNpb25PYmplY3QiIHR5cGU9InRuczpFeHRlbnNpb25PYmplY3QiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFyaWFudCIg +dHlwZT0idG5zOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICAgIDwveHM6Y2hv +aWNlPg0KICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+DQogICAgICAgIDwveHM6ZWxlbWVudD4N +CiAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgPC94czpjb21wbGV4VHlwZT4NCiAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNYXRyaXgiIHR5cGU9InRuczpNYXRyaXgiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +DQogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhbnRWYWx1ZSI+DQogICAgICA8eHM6Y2hv +aWNlPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCb29sZWFuIiB0eXBlPSJ4czpib29sZWFu +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IlNCeXRlIiB0eXBl +PSJ4czpieXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5 +dGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJJbnQxNiIgdHlwZT0ieHM6c2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVUludDE2IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkludDMyIiB0eXBlPSJ4 +czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVUludDMy +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJbnQ2NCIgdHlwZT0ieHM6bG9uZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJVSW50NjQiIHR5cGU9InhzOnVuc2lnbmVkTG9uZyIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGbG9hdCIgdHlwZT0ieHM6Zmxv +YXQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlIiB0 +eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRGF0ZVRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikd1aWQiIHR5cGU9InRuczpHdWlkIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ5dGVTdHJpbmciIHR5cGU9 +InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJYbWxFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCiAgICAgICAg +ICA8eHM6Y29tcGxleFR5cGU+DQogICAgICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +ICAgIDx4czphbnkgbWluT2NjdXJzPSIwIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4NCiAgICAg +ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAgICAgPC94czpjb21wbGV4VHlwZT4NCiAgICAg +ICAgPC94czplbGVtZW50Pg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0 +eXBlPSJ0bnM6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJOb2RlSWQiIHR5cGU9InRuczpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhwYW5kZWROb2RlSWQiIHR5cGU9InRuczpFeHBhbmRlZE5v +ZGVJZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJRdWFsaWZp +ZWROYW1lIiB0eXBlPSJ0bnM6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGl6ZWRUZXh0IiB0eXBlPSJ0bnM6TG9jYWxpemVkVGV4 +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFeHRlbnNpb25P +YmplY3QiIHR5cGU9InRuczpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQm9vbGVhbiIgdHlwZT0idG5zOkxpc3RPZkJvb2xl +YW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU0J5 +dGUiIHR5cGU9InRuczpMaXN0T2ZTQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZCeXRlIiB0eXBlPSJ0bnM6TGlzdE9mQnl0ZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJbnQxNiIgdHlwZT0idG5z +Okxpc3RPZkludDE2IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlVJbnQxNiIgdHlwZT0idG5zOkxpc3RPZlVJbnQxNiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJbnQzMiIgdHlwZT0idG5zOkxpc3RPZklu +dDMyIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVJ +bnQzMiIgdHlwZT0idG5zOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJbnQ2NCIgdHlwZT0idG5zOkxpc3RPZkludDY0IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVJbnQ2NCIgdHlw +ZT0idG5zOkxpc3RPZlVJbnQ2NCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZGbG9hdCIgdHlwZT0idG5zOkxpc3RPZkZsb2F0IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRvdWJsZSIgdHlwZT0idG5zOkxp +c3RPZkRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZTdHJpbmciIHR5cGU9InRuczpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0ZVRpbWUiIHR5cGU9InRuczpMaXN0T2ZE +YXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZHdWlkIiB0eXBlPSJ0bnM6TGlzdE9mR3VpZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZCeXRlU3RyaW5nIiB0eXBlPSJ0bnM6TGlzdE9mQnl0ZVN0 +cmluZyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZY +bWxFbGVtZW50IiB0eXBlPSJ0bnM6TGlzdE9mWG1sRWxlbWVudCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNDb2RlIiB0eXBlPSJ0bnM6TGlz +dE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZOb2RlSWQiIHR5cGU9InRuczpMaXN0T2ZOb2RlSWQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXhwYW5kZWROb2RlSWQiIHR5cGU9InRu +czpMaXN0T2ZFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZRdWFsaWZpZWROYW1lIiB0eXBlPSJ0bnM6TGlzdE9mUXVhbGlmaWVk +TmFtZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZM +b2NhbGl6ZWRUZXh0IiB0eXBlPSJ0bnM6TGlzdE9mTG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFeHRlbnNpb25PYmplY3QiIHR5 +cGU9InRuczpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVmFyaWFudCIgdHlwZT0idG5zOkxpc3RPZlZhcmlhbnQi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF0cml4IiB0eXBl +PSJ0bnM6TWF0cml4IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8L3hzOmNob2ljZT4NCiAgICA8 +L3hzOmNvbXBsZXhUeXBlPg0KDQogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhbnQiPg0K +ICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlw +ZT0idG5zOlZhcmlhbnRWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDwveHM6c2VxdWVuY2U+DQogICAgPC94czpjb21wbGV4VHlwZT4NCiAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJWYXJpYW50IiB0eXBlPSJ0bnM6VmFyaWFudCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgLS0+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhcmlhbnQiPg0KICAgIDx4czphbm5v +dGF0aW9uPg0KICAgICAgPHhzOmFwcGluZm8+DQogICAgICAgIDxJc1ZhbHVlVHlwZSB4bWxucz0i +aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS8yMDAzLzEwL1NlcmlhbGl6YXRpb24vIj50cnVl +PC9Jc1ZhbHVlVHlwZT4NCiAgICAgIDwveHM6YXBwaW5mbz4NCiAgICA8L3hzOmFubm90YXRpb24+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KICAgICAgICA8eHM6Y29tcGxleFR5cGU+DQogICAg +ICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgICAgPHhzOmFueSBtaW5PY2N1cnM9IjAiIHBy +b2Nlc3NDb250ZW50cz0ibGF4IiAvPg0KICAgICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAg +IDwveHM6Y29tcGxleFR5cGU+DQogICAgICA8L3hzOmVsZW1lbnQ+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVmFyaWFudCIgdHlw +ZT0idG5zOlZhcmlhbnQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZWYXJpYW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJWYXJpYW50IiB0eXBlPSJ0bnM6VmFyaWFudCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZWYXJpYW50IiB0eXBlPSJ0bnM6TGlzdE9mVmFy +aWFudCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iRGF0YVZhbHVlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJWYWx1ZSIgdHlwZT0idG5zOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InRuczpTdGF0dXNDb2RlIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb3VyY2VUaW1lc3RhbXAiIHR5cGU9 +InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +b3VyY2VQaWNvc2Vjb25kcyIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyVGltZXN0YW1wIiB0eXBlPSJ4czpkYXRl +VGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyUGlj +b3NlY29uZHMiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJE +YXRhVmFsdWUiIHR5cGU9InRuczpEYXRhVmFsdWUiIG5pbGxhYmxlPSJ0cnVlIi8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFWYWx1ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVZhbHVlIiB0eXBlPSJ0bnM6RGF0YVZhbHVlIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZEYXRhVmFsdWUiIHR5cGU9InRuczpMaXN0T2ZEYXRhVmFsdWUiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW52b2tlU2VydmljZVJl +cXVlc3QiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbmlsbGFibGU9InRydWUiIC8+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikludm9rZVNlcnZpY2VSZXNwb25zZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5 +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbWFnZUJNUCIgdHlw +ZT0ieHM6YmFzZTY0QmluYXJ5IiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IkltYWdlR0lGIiB0 +eXBlPSJ4czpiYXNlNjRCaW5hcnkiIC8+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW1hZ2VKUEci +IHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJbWFnZVBO +RyIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IkF1ZGlv +RGF0YVR5cGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iVW5pb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVbmlvbiIgdHlwZT0idG5zOlVu +aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVbmlvbiI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVW5pb24iIHR5cGU9InRuczpVbmlv +biIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mVW5pb24iIHR5cGU9InRuczpMaXN0T2ZVbmlvbiIgbmlsbGFibGU9InRydWUi +PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVcmlTdHJpbmciIHR5cGU9Inhz +OnN0cmluZyIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCaXRGaWVsZE1hc2tEYXRhVHlwZSIg +dHlwZT0ieHM6dW5zaWduZWRMb25nIiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IlNlbWFudGlj +VmVyc2lvblN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJLZXlWYWx1ZVBhaXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IktleSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJp +YW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iS2V5VmFsdWVQYWlyIiB0eXBlPSJ0bnM6S2V5VmFs +dWVQYWlyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZLZXlWYWx1ZVBhaXIi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IktleVZhbHVlUGFp +ciIgdHlwZT0idG5zOktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mS2V5VmFsdWVQYWlyIiB0eXBlPSJ0 +bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGRpdGlvbmFsUGFyYW1ldGVyc1R5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBhcmFtZXRlcnMiIHR5cGU9InRu +czpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iQWRkaXRpb25hbFBhcmFtZXRlcnNUeXBlIiB0eXBlPSJ0bnM6QWRkaXRpb25hbFBhcmFtZXRl +cnNUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFcGhlbWVyYWxLZXlUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaWNLZXkiIHR5 +cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNpZ25hdHVyZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVwaGVtZXJhbEtleVR5cGUiIHR5 +cGU9InRuczpFcGhlbWVyYWxLZXlUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJF +bmRwb2ludFR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpN +ZXNzYWdlU2VjdXJpdHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZWN1cml0eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmls +ZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkVuZHBvaW50VHlwZSIgdHlwZT0idG5zOkVuZHBvaW50VHlwZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGlzdE9mRW5kcG9pbnRUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFR5cGUiIHR5cGU9InRuczpFbmRwb2ludFR5 +cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZkVuZHBvaW50VHlwZSIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50VHlwZSIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIYW5k +bGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IlRyaW1t +ZWRTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +UmF0aW9uYWxOdW1iZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik51bWVyYXRvciIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEZW5vbWluYXRvciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJSYXRpb25hbE51bWJlciIgdHlwZT0idG5zOlJhdGlvbmFsTnVtYmVyIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSYXRpb25hbE51bWJlciI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmF0aW9uYWxOdW1iZXIiIHR5 +cGU9InRuczpSYXRpb25hbE51bWJlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRu +czpMaXN0T2ZSYXRpb25hbE51bWJlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmVjdG9yIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +VmVjdG9yIiB0eXBlPSJ0bnM6VmVjdG9yIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZWZWN0b3IiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlZlY3RvciIgdHlwZT0idG5zOlZlY3RvciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVmVjdG9yIiB0eXBlPSJ0bnM6TGlz +dE9mVmVjdG9yIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJUaHJlZURWZWN0b3IiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0i +ZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VmVjdG9yIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlgiIHR5cGU9InhzOmRv +dWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlkiIHR5 +cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IloiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNl +cXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVEVmVjdG9yIiB0 +eXBlPSJ0bnM6VGhyZWVEVmVjdG9yIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZUaHJlZURWZWN0b3IiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlRocmVlRFZlY3RvciIgdHlwZT0idG5zOlRocmVlRFZlY3RvciIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVE +VmVjdG9yIiB0eXBlPSJ0bnM6TGlzdE9mVGhyZWVEVmVjdG9yIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRl +cyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBlPSJ0 +bnM6Q2FydGVzaWFuQ29vcmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZkNhcnRlc2lhbkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkNhcnRlc2lhbkNv +b3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkxpc3RP +ZkNhcnRlc2lhbkNvb3JkaW5hdGVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpDYXJ0ZXNpYW5Db29yZGluYXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJYIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJZIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJaIiB0eXBlPSJ4czpk +b3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwv +eHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiB0eXBl +PSJ0bnM6VGhyZWVEQ2FydGVzaWFuQ29vcmRpbmF0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURDYXJ0ZXNpYW5Db29yZGluYXRlcyIg +dHlwZT0idG5zOlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVzIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURDYXJ0 +ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOkxpc3RPZlRocmVlRENhcnRlc2lhbkNvb3JkaW5h +dGVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJPcmllbnRhdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9yaWVudGF0aW9uIiB0 +eXBlPSJ0bnM6T3JpZW50YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +Zk9yaWVudGF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJPcmllbnRhdGlvbiIgdHlwZT0idG5zOk9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZPcmllbnRhdGlv +biIgdHlwZT0idG5zOkxpc3RPZk9yaWVudGF0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURPcmllbnRhdGlvbiI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpPcmllbnRhdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlRocmVlRE9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50 +YXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRocmVlRE9yaWVudGF0 +aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURP +cmllbnRhdGlvbiIgdHlwZT0idG5zOlRocmVlRE9yaWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUaHJlZURP +cmllbnRhdGlvbiIgdHlwZT0idG5zOkxpc3RPZlRocmVlRE9yaWVudGF0aW9uIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGcmFtZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkZyYW1lIiB0eXBlPSJ0bnM6RnJhbWUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkZyYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJGcmFtZSIgdHlwZT0idG5zOkZyYW1lIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGcmFt +ZSIgdHlwZT0idG5zOkxpc3RPZkZyYW1lIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUaHJlZURGcmFtZSI+DQogICAgPHhzOmNvbXBsZXhD +b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGcmFt +ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJD +YXJ0ZXNpYW5Db29yZGluYXRlcyIgdHlwZT0idG5zOlRocmVlRENhcnRlc2lhbkNvb3JkaW5hdGVz +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik9yaWVudGF0aW9uIiB0eXBlPSJ0bnM6VGhyZWVET3JpZW50YXRpb24iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUaHJlZURGcmFtZSIgdHlwZT0idG5zOlRocmVlREZy +YW1lIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaHJlZURGcmFtZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGhyZWVERnJhbWUiIHR5 +cGU9InRuczpUaHJlZURGcmFtZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGhyZWVERnJhbWUiIHR5cGU9InRuczpMaXN0 +T2ZUaHJlZURGcmFtZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2lt +cGxlVHlwZSAgbmFtZT0iT3BlbkZpbGVNb2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0i +eHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhZF8xIiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXcml0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJFcmFzZUV4aXN0aW5nXzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IkFwcGVuZF84IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlbkZpbGVNb2RlIiB0eXBlPSJ0bnM6T3BlbkZpbGVN +b2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZPcGVuRmlsZU1vZGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wZW5GaWxlTW9kZSIg +dHlwZT0idG5zOk9wZW5GaWxlTW9kZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZPcGVuRmlsZU1vZGUiIHR5cGU9InRuczpMaXN0T2ZPcGVuRmlsZU1v +ZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5h +bWU9IklkZW50aXR5Q3JpdGVyaWFUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6 +c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlck5hbWVfMSIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVGh1bWJwcmludF8yIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJSb2xlXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Ikdyb3VwSWRfNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5vbnltb3VzXzUi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhlbnRpY2F0ZWRVc2VyXzYiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uXzciIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9Ilg1MDlTdWJqZWN0XzgiIC8+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGl0eUNy +aXRlcmlhVHlwZSIgdHlwZT0idG5zOklkZW50aXR5Q3JpdGVyaWFUeXBlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlDcml0ZXJpYVR5cGUiIHR5 +cGU9InRuczpJZGVudGl0eUNyaXRlcmlhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJZGVudGl0eUNyaXRlcmlhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZklkZW50aXR5Q3JpdGVyaWFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJJZGVudGl0eU1hcHBpbmdSdWxlVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JpdGVyaWFUeXBlIiB0eXBl +PSJ0bnM6SWRlbnRpdHlDcml0ZXJpYVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkNyaXRlcmlhIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIHR5cGU9InRuczpJ +ZGVudGl0eU1hcHBpbmdSdWxlVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBlPSJ0bnM6SWRlbnRp +dHlNYXBwaW5nUnVsZVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZklkZW50aXR5TWFwcGluZ1J1bGVUeXBlIiB0eXBl +PSJ0bnM6TGlzdE9mSWRlbnRpdHlNYXBwaW5nUnVsZVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkN1cnJlbmN5VW5pdFR5cGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bWVyaWNDb2RlIiB0 +eXBlPSJ4czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RXhwb25lbnQiIHR5cGU9InhzOmJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkFscGhhYmV0aWNDb2RlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW5jeSIgdHlw +ZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJDdXJyZW5jeVVuaXRUeXBlIiB0eXBlPSJ0bnM6Q3VycmVuY3lVbml0VHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ3VycmVuY3lVbml0VHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lVbml0VHlwZSIgdHlwZT0i +dG5zOkN1cnJlbmN5VW5pdFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkN1cnJlbmN5VW5pdFR5cGUiIHR5cGU9InRu +czpMaXN0T2ZDdXJyZW5jeVVuaXRUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJBbGFybU1hc2siPg0KICAgIDx4czpyZXN0cmljdGlv +biBiYXNlPSJ4czp1bnNpZ25lZFNob3J0Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hz +OnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFsYXJtTWFzayIgdHlwZT0idG5zOkFs +YXJtTWFzayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQWxhcm1NYXNrIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBbGFybU1hc2siIHR5 +cGU9InRuczpBbGFybU1hc2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mQWxhcm1NYXNrIiB0eXBlPSJ0bnM6TGlzdE9mQWxhcm1NYXNrIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJUcnVzdExp +c3RWYWxpZGF0aW9uT3B0aW9ucyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2ln +bmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlRydXN0TGlzdFZhbGlkYXRpb25PcHRpb25zIiB0eXBlPSJ0bnM6VHJ1 +c3RMaXN0VmFsaWRhdGlvbk9wdGlvbnMiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlRy +dXN0TGlzdE1hc2tzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJUcnVzdGVkQ2VydGlmaWNhdGVzXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IlRydXN0ZWRDcmxzXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Iklzc3VlckNlcnRpZmljYXRlc180IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJ +c3N1ZXJDcmxzXzgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFsbF8xNSIgLz4N +CiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlRydXN0TGlzdE1hc2tzIiB0eXBlPSJ0bnM6VHJ1c3RMaXN0TWFza3MiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRydXN0TGlzdERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTcGVjaWZpZWRMaXN0cyIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRydXN0 +ZWRDZXJ0aWZpY2F0ZXMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcnVzdGVkQ3JscyIg +dHlwZT0idWE6TGlzdE9mQnl0ZVN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Iklzc3VlckNlcnRpZmljYXRlcyIgdHlwZT0idWE6 +TGlzdE9mQnl0ZVN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Iklzc3VlckNybHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHJ1c3RMaXN0RGF0YVR5cGUi +IHR5cGU9InRuczpUcnVzdExpc3REYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mVHJ1c3RMaXN0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRydXN0TGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6VHJ1c3RMaXN0RGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZlRydXN0TGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVHJ1c3RM +aXN0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlRyYW5zYWN0aW9uRXJyb3JUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXJyb3Ii +IHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1lc3NhZ2UiIHR5cGU9InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNhY3Rpb25FcnJvclR5cGUiIHR5cGU9InRuczpUcmFu +c2FjdGlvbkVycm9yVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHJh +bnNhY3Rpb25FcnJvclR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlRyYW5zYWN0aW9uRXJyb3JUeXBlIiB0eXBlPSJ0bnM6VHJhbnNhY3Rpb25FcnJvclR5 +cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZlRyYW5zYWN0aW9uRXJyb3JUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVHJhbnNh +Y3Rpb25FcnJvclR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkRlY2ltYWxEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2NhbGUiIHR5cGU9InhzOnNob3J0IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5 +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlY2ltYWxEYXRhVHlwZSIg +dHlwZT0idG5zOkRlY2ltYWxEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +RGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik5hbWVzcGFjZXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZURh +dGFUeXBlcyIgdHlwZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bURhdGFU +eXBlcyIgdHlwZT0idG5zOkxpc3RPZkVudW1EZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNpbXBsZURhdGFUeXBlcyIg +dHlwZT0idG5zOkxpc3RPZlNpbXBsZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZVNjaGVtYUhlYWRlciIgdHlwZT0idG5zOkRhdGFU +eXBlU2NoZW1hSGVhZGVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEYXRh +VHlwZVNjaGVtYUhlYWRlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YVR5cGVTY2hlbWFIZWFkZXIiIHR5cGU9InRuczpEYXRhVHlwZVNjaGVtYUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mRGF0YVR5cGVTY2hlbWFIZWFkZXIiIHR5cGU9InRuczpMaXN0T2ZEYXRhVHlw +ZVNjaGVtYUhlYWRlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGF0YVR5cGVEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFt +ZSIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhVHlwZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6RGF0YVR5cGVEZXNjcmlwdGlv +biIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVR5cGVEZXNjcmlwdGlv +biI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVE +ZXNjcmlwdGlvbiIgdHlwZT0idG5zOkRhdGFUeXBlRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFU +eXBlRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZEYXRhVHlwZURlc2NyaXB0aW9uIiBuaWxs +YWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1 +Y3R1cmVEZXNjcmlwdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlwZURlc2NyaXB0aW9uIj4NCiAg +ICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdHVy +ZURlZmluaXRpb24iIHR5cGU9InRuczpTdHJ1Y3R1cmVEZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlRGVzY3JpcHRpb24iIHR5cGU9InRuczpTdHJ1 +Y3R1cmVEZXNjcmlwdGlvbiIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Ry +dWN0dXJlRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlN0cnVjdHVyZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVzY3JpcHRp +b24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZlN0cnVjdHVyZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mU3RydWN0 +dXJlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkVudW1EZXNjcmlwdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50 +IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhVHlwZURl +c2NyaXB0aW9uIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkVudW1EZWZpbml0aW9uIiB0eXBlPSJ0bnM6RW51bURlZmluaXRpb24iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVp +bHRJblR5cGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 +Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW51bURl +c2NyaXB0aW9uIiB0eXBlPSJ0bnM6RW51bURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZFbnVtRGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkVudW1EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkVudW1EZXNj +cmlwdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mRW51bURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRW51bURl +c2NyaXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJTaW1wbGVUeXBlRGVzY3JpcHRpb24iPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5cGVE +ZXNjcmlwdGlvbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJCYXNlRGF0YVR5cGUiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCdWlsdEluVHlwZSIg +dHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2Vx +dWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTaW1wbGVUeXBlRGVzY3Jp +cHRpb24iIHR5cGU9InRuczpTaW1wbGVUeXBlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZlNpbXBsZVR5cGVEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2ltcGxlVHlwZURlc2NyaXB0aW9uIiB0eXBl +PSJ0bnM6U2ltcGxlVHlwZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRp +b24iIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVUeXBlRGVzY3JpcHRpb24iIG5pbGxhYmxlPSJ0cnVl +Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVBQmluYXJ5RmlsZURh +dGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4 +czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlU2NoZW1hSGVhZGVyIj4NCiAgICAgICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlNjaGVtYUxvY2F0aW9uIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRmlsZUhlYWRlciIgdHlwZT0idG5zOkxpc3RPZktleVZhbHVl +UGFpciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJCb2R5IiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBs +ZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJVQUJp +bmFyeUZpbGVEYXRhVHlwZSIgdHlwZT0idG5zOlVBQmluYXJ5RmlsZURhdGFUeXBlIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVQUJpbmFyeUZpbGVEYXRhVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVUFCaW5hcnlGaWxlRGF0YVR5 +cGUiIHR5cGU9InRuczpVQUJpbmFyeUZpbGVEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVUFCaW5hcnlGaWxl +RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZVQUJpbmFyeUZpbGVEYXRhVHlwZSIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUG9ydGFibGVR +dWFsaWZpZWROYW1lIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJOYW1lc3BhY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQb3J0YWJsZVF1YWxpZmllZE5h +bWUiIHR5cGU9InRuczpQb3J0YWJsZVF1YWxpZmllZE5hbWUiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ikxpc3RPZlBvcnRhYmxlUXVhbGlmaWVkTmFtZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUG9ydGFibGVRdWFsaWZpZWROYW1lIiB0eXBlPSJ0 +bnM6UG9ydGFibGVRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3Vu +ZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZQb3J0YWJsZVF1YWxpZmllZE5hbWUi +IHR5cGU9InRuczpMaXN0T2ZQb3J0YWJsZVF1YWxpZmllZE5hbWUiIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlBvcnRhYmxlTm9kZUlkIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmki +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IklkZW50aWZpZXIiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQb3J0YWJsZU5vZGVJZCIgdHlwZT0idG5zOlBv +cnRhYmxlTm9kZUlkIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQb3J0YWJs +ZU5vZGVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUG9y +dGFibGVOb2RlSWQiIHR5cGU9InRuczpQb3J0YWJsZU5vZGVJZCIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUG9ydGFibGVO +b2RlSWQiIHR5cGU9InRuczpMaXN0T2ZQb3J0YWJsZU5vZGVJZCIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVW5zaWduZWRSYXRpb25hbE51 +bWJlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTnVtZXJh +dG9yIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGVub21pbmF0b3IiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVW5zaWduZWRSYXRpb25hbE51bWJlciIgdHlwZT0idG5zOlVuc2lnbmVkUmF0 +aW9uYWxOdW1iZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlVuc2lnbmVk +UmF0aW9uYWxOdW1iZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlVuc2lnbmVkUmF0aW9uYWxOdW1iZXIiIHR5cGU9InRuczpVbnNpZ25lZFJhdGlvbmFsTnVt +YmVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZVbnNpZ25lZFJhdGlvbmFsTnVtYmVyIiB0eXBlPSJ0bnM6TGlzdE9mVW5z +aWduZWRSYXRpb25hbE51bWJlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6c2ltcGxlVHlwZSAgbmFtZT0iUHViU3ViU3RhdGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBi +YXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmxlZF8w +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQYXVzZWRfMSIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW9uYWxfMiIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iRXJyb3JfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUHJl +T3BlcmF0aW9uYWxfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlB1YlN1YlN0YXRlIiB0eXBlPSJ0bnM6UHViU3ViU3Rh +dGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1YlN1YlN0YXRlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJTdGF0ZSIgdHlw +ZT0idG5zOlB1YlN1YlN0YXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9Ikxpc3RPZlB1YlN1YlN0YXRlIiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViU3RhdGUiIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRh +dGFTZXRNZXRhRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2Ui +Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5cGVTY2hlbWFIZWFkZXIiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIg +dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0 +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkZpZWxkcyIgdHlwZT0idG5zOkxpc3RPZkZpZWxkTWV0YURhdGEiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNl +dENsYXNzSWQiIHR5cGU9InVhOkd1aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbiIgdHlwZT0idG5zOkNvbmZpZ3VyYXRp +b25WZXJzaW9uRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBs +ZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRh +U2V0TWV0YURhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldE1ldGFEYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldE1ldGFEYXRhVHlwZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1ldGFEYXRhVHlwZSIg +dHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRNZXRhRGF0YVR5 +cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0TWV0YURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJGaWVsZE1ldGFEYXRhIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpZWxkRmxh +Z3MiIHR5cGU9InRuczpEYXRhU2V0RmllbGRGbGFncyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iQnVpbHRJblR5cGUiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5cGU9InVh +Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlZhbHVlUmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5cGU9InVhOkxpc3RPZlVJbnQz +MiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik1heFN0cmluZ0xlbmd0aCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRGaWVsZElkIiB0eXBlPSJ1YTpHdWlk +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9wZXJ0aWVzIiB0 +eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkZpZWxkTWV0YURhdGEiIHR5cGU9InRuczpGaWVsZE1ldGFEYXRhIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZGaWVsZE1ldGFEYXRhIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZE1ldGFEYXRhIiB0eXBlPSJ0bnM6 +RmllbGRNZXRhRGF0YSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRmllbGRNZXRhRGF0YSIgdHlwZT0idG5zOkxpc3RPZkZp +ZWxkTWV0YURhdGEiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBs +ZVR5cGUgIG5hbWU9IkRhdGFTZXRGaWVsZEZsYWdzIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFz +ZT0ieHM6dW5zaWduZWRTaG9ydCI+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRGbGFncyIgdHlwZT0idG5z +OkRhdGFTZXRGaWVsZEZsYWdzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb25maWd1 +cmF0aW9uVmVyc2lvbkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJNYWpvclZlcnNpb24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNaW5vclZlcnNpb24iIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29uZmlndXJhdGlvblZlcnNpb25EYXRh +VHlwZSIgdHlwZT0idG5zOkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbmZpZ3VyYXRpb25WZXJzaW9uRGF0YVR5cGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbmZpZ3VyYXRpb25W +ZXJzaW9uRGF0YVR5cGUiIHR5cGU9InRuczpDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZDb25maWd1cmF0aW9uVmVyc2lvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQ29u +ZmlndXJhdGlvblZlcnNpb25EYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaGVkRGF0YVNldERhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhU2V0Rm9sZGVyIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0TWV0 +YURhdGEiIHR5cGU9InRuczpEYXRhU2V0TWV0YURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXh0ZW5zaW9uRmllbGRzIiB0 +eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFNvdXJjZSIgdHlwZT0idWE6RXh0 +ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlB1Ymxp +c2hlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHVibGlzaGVkRGF0YVNldERhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNo +ZWREYXRhU2V0RGF0YVR5cGUiIHR5cGU9InRuczpQdWJsaXNoZWREYXRhU2V0RGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlB1Ymxpc2hlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hl +ZERhdGFTZXREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIiB0eXBlPSJ0 +bnM6UHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJMaXN0T2ZQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VE +YXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mUHVibGlzaGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlz +aGVkRGF0YVNldFNvdXJjZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWRWYXJpYWJs +ZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0ludGVydmFs +SGludCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEZWFkYmFuZFR5cGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFZhbHVlIiB0eXBlPSJ4czpkb3Vi +bGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4UmFuZ2Ui +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlN1YnN0aXR1dGVWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWV0YURhdGFQcm9wZXJ0aWVz +IiB0eXBlPSJ1YTpMaXN0T2ZRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIHR5cGU9InRuczpQdWJsaXNo +ZWRWYXJpYWJsZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQ +dWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWRWYXJpYWJsZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlz +aGVkVmFyaWFibGVEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIg +dHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZFZhcmlhYmxlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVl +Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFJ +dGVtc0RhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAg +ICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlB1Ymxpc2hlZERhdGFTZXRTb3VyY2VEYXRhVHlw +ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ +dWJsaXNoZWREYXRhIiB0eXBlPSJ0bnM6TGlzdE9mUHVibGlzaGVkVmFyaWFibGVEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4N +CiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFU +eXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YUl0ZW1zRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZWREYXRhSXRlbXNE +YXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZERhdGFJdGVtc0RhdGFUeXBlIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZQ +dWJsaXNoZWREYXRhSXRlbXNEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1Ymxpc2hlZERhdGFJ +dGVtc0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJQdWJsaXNoZWRFdmVudHNEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhD +b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpQdWJs +aXNoZWREYXRhU2V0U291cmNlRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnROb3RpZmllciIgdHlwZT0idWE6Tm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNlbGVjdGVkRmllbGRzIiB0eXBlPSJ0bnM6TGlzdE9mU2ltcGxlQXR0cmlidXRlT3BlcmFu +ZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJGaWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVyIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl +bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiIHR5cGU9InRuczpQdWJs +aXNoZWRFdmVudHNEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9m +UHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVk +RXZlbnRzRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1Ymxpc2hlZEV2ZW50c0RhdGFUeXBlIiB0eXBlPSJ0 +bnM6TGlzdE9mUHVibGlzaGVkRXZlbnRzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVs +ZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRDdXN0b21T +b3VyY2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpQdWJsaXNoZWREYXRhU2V0U291cmNlRGF0YVR5 +cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +Q3ljbGljRGF0YVNldCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 +Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlz +aGVkRGF0YVNldEN1c3RvbVNvdXJjZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHVibGlzaGVkRGF0YVNl +dEN1c3RvbVNvdXJjZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZQdWJsaXNoZWREYXRhU2V0Q3VzdG9tU291cmNlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRDdXN0b21Tb3VyY2VE +YXRhVHlwZSIgdHlwZT0idG5zOlB1Ymxpc2hlZERhdGFTZXRDdXN0b21Tb3VyY2VEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mUHVibGlzaGVkRGF0YVNldEN1c3RvbVNvdXJjZURhdGFUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mUHVibGlzaGVkRGF0YVNldEN1c3RvbVNvdXJjZURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRhU2V0RmllbGRD +b250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4N +CiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6RGF0YVNldEZpZWxkQ29u +dGVudE1hc2siIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRGaWVs +ZENvbnRlbnRNYXNrIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRN +YXNrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRh +dGFTZXRGaWVsZENvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldEZpZWxkQ29udGVu +dE1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5hYmxlZCIgdHlwZT0i +eHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0 +YVNldFdyaXRlcklkIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5z +OkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJLZXlGcmFtZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE5hbWUiIHR5cGU9InhzOnN0 +cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFTZXRXcml0ZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQ +YWlyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3Nh +Z2VTZXR0aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFT +ZXRXcml0ZXJEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0 +YVNldFdyaXRlckRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9Ikxpc3RPZkRhdGFTZXRXcml0ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRh +dGFTZXRXcml0ZXJEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBl +PSJ0bnM6RGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJUcmFuc3Bv +cnREYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0 +YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIg +dHlwZT0idG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRXcml0ZXJNZXNzYWdl +RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldFdy +aXRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViR3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5h +YmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5k +cG9pbnREZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik1heE5ldHdvcmtNZXNzYWdlU2l6ZSIgdHlwZT0ieHM6dW5zaWdu +ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikdyb3VwUHJv +cGVydGllcyIgdHlwZT0idG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3Vi +R3JvdXBEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3Vi +R3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHViU3ViR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZlB1YlN1Ykdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZQdWJTdWJHcm91cERh +dGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4 +ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOlB1YlN1Ykdyb3VwRGF0 +YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iV3JpdGVyR3JvdXBJZCIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0i +eHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +S2VlcEFsaXZlVGltZSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJpb3JpdHkiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlw +ZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlRyYW5zcG9ydFNldHRpbmdzIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TWVzc2FnZVNldHRpbmdzIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldFdy +aXRlcnMiIHR5cGU9InRuczpMaXN0T2ZEYXRhU2V0V3JpdGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hz +OmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZXJHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6V3Jp +dGVyR3JvdXBEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mV3Jp +dGVyR3JvdXBEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iV3JpdGVyR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwRGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZldyaXRlckdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZXcml0ZXJHcm91 +cERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdy +b3VwVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +ZldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IldyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRu +czpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cFRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlw +ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJX +cml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOldyaXRlckdyb3VwTWVzc2FnZURh +dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZXJHcm91cE1l +c3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpXcml0ZXJHcm91cE1lc3Nh +Z2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRu +czpMaXN0T2ZXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoZXJJZCIgdHlwZT0idWE6VmFyaWFu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJv +ZmlsZVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgdHlwZT0idWE6RXh0ZW5zaW9uT2Jq +ZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iQ29ubmVjdGlvblByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJUcmFuc3BvcnRTZXR0aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVyR3Jv +dXBzIiB0eXBlPSJ0bnM6TGlzdE9mV3JpdGVyR3JvdXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwcyIg +dHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHVi +U3ViQ29ubmVjdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZQdWJTdWJDb25uZWN0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlB1YlN1YkNvbm5lY3Rpb25EYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1 +YkNvbm5lY3Rpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29ubmVjdGlvbkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uVHJhbnNw +b3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb25uZWN0aW9uVHJhbnNwb3J0 +RGF0YVR5cGUiIHR5cGU9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlvblRy +YW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6Q29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZDb25u +ZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiIHR5 +cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3 +b3JrQWRkcmVzc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJlc3NEYXRhVHlwZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmV0d29ya0FkZHJlc3NEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya0FkZHJl +c3NEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtBZGRyZXNzRGF0YVR5cGUiIG1pbk9jY3Vycz0i +MCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5l +dHdvcmtBZGRyZXNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZOZXR3b3JrQWRkcmVzc0RhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJOZXR3b3JrQWRkcmVzc1VybERhdGFUeXBlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQg +bWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5ldHdvcmtBZGRy +ZXNzRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJOZXR3b3JrQWRkcmVzc1VybERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29ya0FkZHJl +c3NVcmxEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmV0d29y +a0FkZHJlc3NVcmxEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iTmV0d29ya0FkZHJlc3NVcmxEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtBZGRy +ZXNzVXJsRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk5ldHdvcmtBZGRyZXNzVXJsRGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZOZXR3b3JrQWRkcmVzc1VybERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBl +Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRl +bnNpb24gYmFzZT0idG5zOlB1YlN1Ykdyb3VwRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9 +InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlU2V0dGluZ3MiIHR5cGU9InVhOkV4dGVu +c2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVycyIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRS +ZWFkZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdy +b3VwRGF0YVR5cGUiIHR5cGU9InRuczpSZWFkZXJHcm91cERhdGFUeXBlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cERhdGFUeXBlIiB0eXBl +PSJ0bnM6UmVhZGVyR3JvdXBEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBEYXRhVHlwZSIg +dHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlYWRlckdyb3VwVHJhbnNwb3J0 +RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cFRyYW5zcG9ydERh +dGFUeXBlIiB0eXBlPSJ0bnM6UmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVhZGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZGVyR3JvdXBU +cmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZlJlYWRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZS +ZWFkZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBl +PSJ0bnM6UmVhZGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIg +dHlwZT0idG5zOlJlYWRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWFkZXJHcm91 +cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlYWRlckdyb3VwTWVzc2FnZURhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuYWJsZWQiIHR5cGU9Inhz +OmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxp +c2hlcklkIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJXcml0ZXJHcm91cElkIiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0V3JpdGVySWQiIHR5cGU9 +InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFTZXRNZXRhRGF0YSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRh +U2V0RmllbGRDb250ZW50TWFzayIgdHlwZT0idG5zOkRhdGFTZXRGaWVsZENvbnRlbnRNYXNrIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlUmVjZWl2ZVRp +bWVvdXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iS2V5RnJhbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkhlYWRlckxheW91dFVyaSIgdHlwZT0ieHM6 +c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlHcm91cElkIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eUtleVNlcnZpY2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5k +cG9pbnREZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlz +dE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0U2V0dGluZ3MiIHR5cGU9InVhOkV4dGVuc2lvbk9i +amVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1lc3NhZ2VTZXR0aW5ncyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2Ny +aWJlZERhdGFTZXQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpEYXRh +U2V0UmVhZGVyRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRh +dGFTZXRSZWFkZXJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iRGF0YVNldFJlYWRlckRhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlckRh +dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0UmVhZGVyRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZE +YXRhU2V0UmVhZGVyRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlw +ZT0idG5zOkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyVHJhbnNw +b3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1p +bk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ikxpc3RPZkRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRh +dGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlw +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUi +IHR5cGU9InRuczpEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZEYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0UmVhZGVyTWVzc2Fn +ZURhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2Nj +dXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlz +dE9mRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZkRhdGFTZXRS +ZWFkZXJNZXNzYWdlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiB0eXBlPSJ0bnM6U3Vi +c2NyaWJlZERhdGFTZXREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlN1 +YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0RGF0YVR5 +cGUiIHR5cGU9InRuczpMaXN0T2ZTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUYXJnZXRWYXJp +YWJsZXNEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4N +CiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdl +dFZhcmlhYmxlcyIgdHlwZT0idG5zOkxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgdHlwZT0i +dG5zOlRhcmdldFZhcmlhYmxlc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUiIHR5cGU9InRuczpU +YXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGFyZ2V0VmFyaWFibGVzRGF0YVR5cGUi +IHR5cGU9InRuczpMaXN0T2ZUYXJnZXRWYXJpYWJsZXNEYXRhVHlwZSIgbmlsbGFibGU9InRydWUi +PjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmllbGRUYXJnZXREYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNl +dEZpZWxkSWQiIHR5cGU9InVhOkd1aWQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlY2VpdmVySW5kZXhSYW5nZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9k +ZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IldyaXRlSW5kZXhSYW5n +ZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6T3Zl +cnJpZGVWYWx1ZUhhbmRsaW5nIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJPdmVycmlkZVZhbHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iRmllbGRUYXJnZXREYXRhVHlwZSIgdHlwZT0idG5zOkZpZWxkVGFyZ2V0RGF0YVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkZpZWxkVGFyZ2V0RGF0YVR5cGUiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpZWxkVGFyZ2V0RGF0 +YVR5cGUiIHR5cGU9InRuczpGaWVsZFRhcmdldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZGaWVsZFRhcmdl +dERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRmllbGRUYXJnZXREYXRhVHlwZSIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iT3ZlcnJpZGVW +YWx1ZUhhbmRsaW5nIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iTGFzdFVzYWJsZVZhbHVlXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9Ik92ZXJyaWRlVmFsdWVfMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8 +L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik92ZXJyaWRlVmFsdWVIYW5kbGlu +ZyIgdHlwZT0idG5zOk92ZXJyaWRlVmFsdWVIYW5kbGluZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdmVycmlkZVZhbHVlSGFuZGxpbmciIHR5cGU9InRu +czpPdmVycmlkZVZhbHVlSGFuZGxpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mT3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiB0eXBlPSJ0bnM6TGlzdE9m +T3ZlcnJpZGVWYWx1ZUhhbmRsaW5nIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFUeXBlIj4N +CiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNp +b24gYmFzZT0idG5zOlN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyZW50Tm9kZU5hbWUiIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSb2xlUGVybWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZSb2xlUGVy +bWlzc2lvblR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwv +eHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250 +ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpYmVk +RGF0YVNldE1pcnJvckRhdGFUeXBlIiB0eXBlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXRNaXJyb3JE +YXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaWJlZERh +dGFTZXRNaXJyb3JEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXRNaXJyb3JEYXRhVHlwZSIgdHlwZT0idG5zOlN1YnNj +cmliZWREYXRhU2V0TWlycm9yRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJv +dW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmliZWREYXRhU2V0TWly +cm9yRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTdWJzY3JpYmVkRGF0YVNldE1pcnJvckRhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJQdWJTdWJDb25maWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlB1Ymxpc2hlZERhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9m +UHVibGlzaGVkRGF0YVNldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlvbnMiIHR5cGU9InRuczpMaXN0T2ZQ +dWJTdWJDb25uZWN0aW9uRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmFibGVkIiB0eXBlPSJ4czpib29sZWFuIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6 +UHViU3ViQ29uZmlndXJhdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZQdWJTdWJDb25maWd1cmF0aW9uRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgdHlw +ZT0idG5zOlB1YlN1YkNvbmZpZ3VyYXRpb25EYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmln +dXJhdGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29uZmlndXJhdGlvbkRhdGFU +eXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJTdGFuZGFsb25lU3Vic2NyaWJlZERhdGFTZXRSZWZEYXRhVHlwZSI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXROYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFuZGFsb25lU3Vic2NyaWJlZERhdGFT +ZXRSZWZEYXRhVHlwZSIgdHlwZT0idG5zOlN0YW5kYWxvbmVTdWJzY3JpYmVkRGF0YVNldFJlZkRh +dGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTdGFuZGFsb25lU3Vi +c2NyaWJlZERhdGFTZXRSZWZEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RhbmRhbG9uZVN1YnNjcmliZWREYXRhU2V0UmVmRGF0YVR5cGUiIHR5 +cGU9InRuczpTdGFuZGFsb25lU3Vic2NyaWJlZERhdGFTZXRSZWZEYXRhVHlwZSIgbWluT2NjdXJz +PSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpz +ZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9m +U3RhbmRhbG9uZVN1YnNjcmliZWREYXRhU2V0UmVmRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZT +dGFuZGFsb25lU3Vic2NyaWJlZERhdGFTZXRSZWZEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU3RhbmRhbG9uZVN1YnNjcmli +ZWREYXRhU2V0RGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2Ui +Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6U3Vic2NyaWJlZERhdGFTZXREYXRhVHlw +ZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJO +YW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldEZvbGRlciIgdHlwZT0idWE6TGlzdE9m +U3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkRhdGFTZXRNZXRhRGF0YSIgdHlwZT0idG5zOkRhdGFTZXRNZXRhRGF0YVR5 +cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAg +ICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0YW5kYWxvbmVTdWJzY3JpYmVkRGF0YVNl +dERhdGFUeXBlIiB0eXBlPSJ0bnM6U3RhbmRhbG9uZVN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0YW5kYWxvbmVTdWJzY3JpYmVk +RGF0YVNldERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTdGFuZGFsb25lU3Vic2NyaWJlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOlN0YW5k +YWxvbmVTdWJzY3JpYmVkRGF0YVNldERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGFuZGFsb25lU3Vic2Ny +aWJlZERhdGFTZXREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlN0YW5kYWxvbmVTdWJzY3JpYmVk +RGF0YVNldERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJTZWN1cml0eUdyb3VwRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3Vy +aXR5R3JvdXBGb2xkZXIiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IktleUxpZmV0aW1lIiB0eXBl +PSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNl +Y3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhGdXR1cmVLZXlDb3VudCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik1heFBhc3RLZXlDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5R3JvdXBJZCIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUm9sZVBlcm1pc3Npb25zIiB0eXBlPSJ0bnM6TGlzdE9mUm9sZVBlcm1pc3Npb25UeXBl +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iR3JvdXBQcm9wZXJ0aWVzIiB0eXBlPSJ0bnM6TGlzdE9mS2V5VmFsdWVQYWlyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5R3JvdXBEYXRhVHlwZSIgdHlw +ZT0idG5zOlNlY3VyaXR5R3JvdXBEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mU2VjdXJpdHlHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eUdyb3VwRGF0YVR5cGUiIHR5cGU9InRuczpTZWN1 +cml0eUdyb3VwRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlNlY3VyaXR5R3JvdXBEYXRhVHlwZSIgdHlwZT0i +dG5zOkxpc3RPZlNlY3VyaXR5R3JvdXBEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHViU3ViS2V5UHVzaFRhcmdldERhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNh +dGlvblVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVzaFRhcmdldEZvbGRlciIgdHlwZT0idWE6TGlz +dE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5UG9saWN5 +VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VyVG9rZW5UeXBlIiB0eXBlPSJ0bnM6VXNlclRva2Vu +UG9saWN5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVxdWVzdGVkS2V5Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldHJ5SW50ZXJ2YWwiIHR5cGU9 +InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVz +aFRhcmdldFByb3BlcnRpZXMiIHR5cGU9InRuczpMaXN0T2ZLZXlWYWx1ZVBhaXIiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 +eUdyb3VwcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlB1YlN1YktleVB1c2hUYXJnZXREYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1 +YktleVB1c2hUYXJnZXREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mUHViU3ViS2V5UHVzaFRhcmdldERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJLZXlQdXNoVGFyZ2V0RGF0YVR5cGUiIHR5cGU9InRu +czpQdWJTdWJLZXlQdXNoVGFyZ2V0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1 +bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1YlN1YktleVB1c2hUYXJn +ZXREYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YktleVB1c2hUYXJnZXREYXRhVHlwZSIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +UHViU3ViQ29uZmlndXJhdGlvbjJEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p +eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpQdWJTdWJDb25maWd1 +cmF0aW9uRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iU3Vic2NyaWJlZERhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mU3RhbmRhbG9u +ZVN1YnNjcmliZWREYXRhU2V0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldENsYXNzZXMiIHR5cGU9InRu +czpMaXN0T2ZEYXRhU2V0TWV0YURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlZmF1bHRTZWN1cml0eUtleVNlcnZp +Y2VzIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eUdy +b3VwcyIgdHlwZT0idG5zOkxpc3RPZlNlY3VyaXR5R3JvdXBEYXRhVHlwZSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJL +ZXlQdXNoVGFyZ2V0cyIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YktleVB1c2hUYXJnZXREYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDb25maWd1cmF0aW9uVmVyc2lvbiIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb25maWd1cmF0aW9uUHJv +cGVydGllcyIgdHlwZT0idG5zOkxpc3RPZktleVZhbHVlUGFpciIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlB1YlN1YkNvbmZpZ3VyYXRpb24yRGF0YVR5cGUiIHR5cGU9InRuczpQ +dWJTdWJDb25maWd1cmF0aW9uMkRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZQdWJTdWJDb25maWd1cmF0aW9uMkRhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJTdWJDb25maWd1cmF0aW9uMkRhdGFUeXBlIiB0 +eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJhdGlvbjJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHViU3ViQ29u +ZmlndXJhdGlvbjJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlB1YlN1YkNvbmZpZ3VyYXRpb24y +RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IkRhdGFTZXRPcmRlcmluZ1R5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNl +PSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlZmluZWRfMCIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQXNjZW5kaW5nV3JpdGVySWRfMSIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQXNjZW5kaW5nV3JpdGVySWRTaW5nbGVfMiIg +Lz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkRhdGFTZXRPcmRlcmluZ1R5cGUiIHR5cGU9InRuczpEYXRhU2V0T3JkZXJpbmdU +eXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEYXRhU2V0T3JkZXJpbmdU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +T3JkZXJpbmdUeXBlIiB0eXBlPSJ0bnM6RGF0YVNldE9yZGVyaW5nVHlwZSIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhU2V0T3JkZXJpbmdUeXBl +IiB0eXBlPSJ0bnM6TGlzdE9mRGF0YVNldE9yZGVyaW5nVHlwZSIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVWFkcE5ldHdvcmtNZXNzYWdl +Q29udGVudE1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+ +DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBOZXR3 +b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0 +T2ZVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcE5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9 +InRuczpVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVYWRwTmV0d29ya01lc3NhZ2VDb250ZW50TWFz +ayIgdHlwZT0idG5zOkxpc3RPZlVhZHBOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJVYWRwV3Jp +dGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0i +ZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6V3JpdGVyR3JvdXBNZXNzYWdl +RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iR3JvdXBWZXJzaW9uIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRPcmRlcmluZyIgdHlwZT0idG5z +OkRhdGFTZXRPcmRlcmluZ1R5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJOZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6VWFkcE5ldHdv +cmtNZXNzYWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTYW1wbGluZ09mZnNldCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGluZ09mZnNldCIgdHlwZT0i +dWE6TGlzdE9mRG91YmxlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4 +Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcFdy +aXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6VWFkcFdyaXRlckdyb3VwTWVzc2Fn +ZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZVYWRwV3JpdGVy +R3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlVhZHBXcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlVhZHBX +cml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVWFkcFdyaXRlckdyb3VwTWVzc2Fn +ZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcFdyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBl +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1l +PSJVYWRwRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJh +c2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBs +ZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNr +IiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVYWRwRGF0YVNldE1lc3Nh +Z2VDb250ZW50TWFzayIgdHlwZT0idG5zOlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBt +aW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlVhZHBEYXRh +U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6TGlzdE9mVWFkcERhdGFTZXRNZXNzYWdl +Q29udGVudE1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICA8eHM6 +Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0i +dG5zOkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIg +dHlwZT0idG5zOlVhZHBEYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29uZmlndXJlZFNpemUiIHR5cGU9InhzOnVu +c2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJOZXR3b3JrTWVzc2FnZU51bWJlciIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRPZmZzZXQiIHR5cGU9 +InhzOnVuc2lnbmVkU2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5j +ZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVhZHBEYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6VWFkcERhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlVhZHBEYXRhU2V0V3JpdGVyTWVz +c2FnZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlVhZHBEYXRhU2V0 +V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVYWRwRGF0YVNldFdyaXRlck1lc3NhZ2VE +YXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlVhZHBEYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBl +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250 +ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0 +UmVhZGVyTWVzc2FnZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9Ikdyb3VwVmVyc2lvbiIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOZXR3b3JrTWVzc2Fn +ZU51bWJlciIgdHlwZT0ieHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFTZXRPZmZzZXQiIHR5cGU9InhzOnVuc2lnbmVkU2hv +cnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU2V0 +Q2xhc3NJZCIgdHlwZT0idWE6R3VpZCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwTmV0 +d29ya01lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpVYWRwRGF0 +YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVjZWl2ZU9mZnNldCIgdHlw +ZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHJvY2Vzc2luZ09mZnNldCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNv +bXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJV +YWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOlVhZHBEYXRhU2V0UmVh +ZGVyTWVzc2FnZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZV +YWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVWFkcERhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIHR5 +cGU9InRuczpVYWRwRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVWFkcERh +dGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZVYWRwRGF0YVNldFJl +YWRlck1lc3NhZ2VEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8 +eHM6c2ltcGxlVHlwZSAgbmFtZT0iSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siPg0KICAg +IDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+DQogICAgPC94czpyZXN0cmlj +dGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uTmV0d29y +a01lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOkpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRN +YXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZKc29uTmV0d29ya01lc3Nh +Z2VDb250ZW50TWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iSnNvbk5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpKc29uTmV0d29ya01l +c3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJMaXN0T2ZKc29uTmV0d29ya01lc3NhZ2VDb250ZW50TWFzayIgdHlwZT0idG5zOkxpc3RP +Zkpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJKc29uV3JpdGVyR3JvdXBNZXNzYWdlRGF0 +YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhz +OmV4dGVuc2lvbiBiYXNlPSJ0bnM6V3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiPg0KICAgICAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV0d29ya01lc3Nh +Z2VDb250ZW50TWFzayIgdHlwZT0idG5zOkpzb25OZXR3b3JrTWVzc2FnZUNvbnRlbnRNYXNrIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJKc29uV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRu +czpKc29uV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ikxpc3RPZkpzb25Xcml0ZXJHcm91cE1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbldyaXRlckdyb3VwTWVzc2FnZURh +dGFUeXBlIiB0eXBlPSJ0bnM6SnNvbldyaXRlckdyb3VwTWVzc2FnZURhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZKc29uV3JpdGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZKc29uV3Jp +dGVyR3JvdXBNZXNzYWdlRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIj4N +CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVz +dHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRh +dGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpKc29uRGF0YVNldE1lc3NhZ2VDb250 +ZW50TWFzayIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbkRhdGFTZXRN +ZXNzYWdlQ29udGVudE1hc2siPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ikpzb25EYXRhU2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFT +ZXRNZXNzYWdlQ29udGVudE1hc2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mSnNvbkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpM +aXN0T2ZKc29uRGF0YVNldE1lc3NhZ2VDb250ZW50TWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSnNvbkRhdGFTZXRXcml0ZXJNZXNz +YWdlRGF0YVR5cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAg +ICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSI+ +DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRh +U2V0TWVzc2FnZUNvbnRlbnRNYXNrIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRNZXNzYWdlQ29udGVu +dE1hc2siIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwv +eHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBl +IiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRXcml0ZXJNZXNzYWdlRGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBl +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJKc29uRGF0YVNl +dFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlwZT0idG5zOkpzb25EYXRhU2V0V3JpdGVyTWVzc2Fn +ZURhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJMaXN0T2ZKc29uRGF0YVNldFdyaXRlck1lc3NhZ2VEYXRhVHlwZSIgdHlw +ZT0idG5zOkxpc3RPZkpzb25EYXRhU2V0V3JpdGVyTWVzc2FnZURhdGFUeXBlIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJKc29uRGF0YVNl +dFJlYWRlck1lc3NhZ2VEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0UmVhZGVyTWVzc2Fn +ZURhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik5ldHdvcmtNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpKc29uTmV0d29ya01l +c3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFTZXRNZXNzYWdlQ29udGVudE1hc2siIHR5cGU9InRuczpKc29uRGF0YVNldE1l +c3NhZ2VDb250ZW50TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNl +Pg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSnNvbkRhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiIHR5cGU9InRuczpKc29uRGF0YVNldFJlYWRlck1lc3NhZ2VEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSnNvbkRhdGFTZXRSZWFkZXJNZXNz +YWdlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ikpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURhdGFUeXBlIiB0eXBlPSJ0bnM6SnNvbkRhdGFTZXRS +ZWFkZXJNZXNzYWdlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkpzb25EYXRhU2V0UmVhZGVyTWVzc2FnZURh +dGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mSnNvbkRhdGFTZXRSZWFkZXJNZXNzYWdlRGF0YVR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlFvc0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUW9zRGF0YVR5cGUiIHR5cGU9 +InRuczpRb3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUW9z +RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlFv +c0RhdGFUeXBlIiB0eXBlPSJ0bnM6UW9zRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz +PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlFvc0RhdGFUeXBlIiB0 +eXBlPSJ0bnM6TGlzdE9mUW9zRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zbWl0UW9zRGF0YVR5cGUiPg0KICAgIDx4 +czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl +PSJ0bnM6UW9zRGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc21pdFFvc0Rh +dGFUeXBlIiB0eXBlPSJ0bnM6VHJhbnNtaXRRb3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mVHJhbnNtaXRRb3NEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNtaXRRb3NEYXRhVHlwZSIgdHlwZT0idG5z +OlRyYW5zbWl0UW9zRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlRyYW5zbWl0UW9zRGF0YVR5cGUiIHR5cGU9 +InRuczpMaXN0T2ZUcmFuc21pdFFvc0RhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc21pdFFvc1ByaW9yaXR5RGF0YVR5 +cGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4 +dGVuc2lvbiBiYXNlPSJ0bnM6VHJhbnNtaXRRb3NEYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eUxhYmVsIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUcmFuc21pdFFvc1By +aW9yaXR5RGF0YVR5cGUiIHR5cGU9InRuczpUcmFuc21pdFFvc1ByaW9yaXR5RGF0YVR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlRyYW5zbWl0UW9zUHJpb3JpdHlEYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNt +aXRRb3NQcmlvcml0eURhdGFUeXBlIiB0eXBlPSJ0bnM6VHJhbnNtaXRRb3NQcmlvcml0eURhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZUcmFuc21pdFFvc1ByaW9yaXR5RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0 +T2ZUcmFuc21pdFFvc1ByaW9yaXR5RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1l +bnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlY2VpdmVRb3NEYXRhVHlwZSI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpRb3NEYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlY2VpdmVRb3NE +YXRhVHlwZSIgdHlwZT0idG5zOlJlY2VpdmVRb3NEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mUmVjZWl2ZVFvc0RhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWNlaXZlUW9zRGF0YVR5cGUiIHR5cGU9InRuczpS +ZWNlaXZlUW9zRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlJlY2VpdmVRb3NEYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZlJlY2VpdmVRb3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVjZWl2ZVFvc1ByaW9yaXR5RGF0YVR5cGUiPg0K +ICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lv +biBiYXNlPSJ0bnM6UmVjZWl2ZVFvc0RhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlByaW9yaXR5TGFiZWwiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5j +ZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlY2VpdmVRb3NQcmlvcml0eURh +dGFUeXBlIiB0eXBlPSJ0bnM6UmVjZWl2ZVFvc1ByaW9yaXR5RGF0YVR5cGUiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlY2VpdmVRb3NQcmlvcml0eURhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWNlaXZlUW9zUHJpb3Jp +dHlEYXRhVHlwZSIgdHlwZT0idG5zOlJlY2VpdmVRb3NQcmlvcml0eURhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZSZWNlaXZlUW9zUHJpb3JpdHlEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlY2VpdmVRb3NQ +cmlvcml0eURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJEYXRhZ3JhbUNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQog +ICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9u +IGJhc2U9InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5QWRkcmVzcyIgdHlw +ZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpj +b21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +RGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpEYXRhZ3JhbUNv +bm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9y +dERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVl +Ij48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGFncmFtQ29ubmVj +dGlvblRyYW5zcG9ydDJEYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJm +YWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhZ3JhbUNvbm5lY3Rpb25U +cmFuc3BvcnREYXRhVHlwZSI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlBbm5vdW5jZVJhdGUiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5 +TWF4TWVzc2FnZVNpemUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUW9zQ2F0ZWdvcnkiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJEYXRhZ3JhbVFvcyIgdHlwZT0idWE6TGlzdE9mRXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAg +PC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0MkRh +dGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Db25uZWN0aW9uVHJhbnNwb3J0MkRhdGFUeXBlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEYXRhZ3JhbUNvbm5lY3Rpb25UcmFu +c3BvcnQyRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFncmFtQ29ubmVjdGlvblRyYW5zcG9ydDJEYXRhVHlwZSIgdHlwZT0idG5zOkRhdGFn +cmFtQ29ubmVjdGlvblRyYW5zcG9ydDJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGF0YWdyYW1Db25uZWN0 +aW9uVHJhbnNwb3J0MkRhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YWdyYW1Db25uZWN0aW9u +VHJhbnNwb3J0MkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUi +Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu +c2lvbiBiYXNlPSJ0bnM6V3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSI+DQogICAgICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlUmVwZWF0Q291 +bnQiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VSZXBlYXREZWxheSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lv +bj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9 +InRuczpEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlw +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWdyYW1X +cml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Xcml0ZXJHcm91 +cFRyYW5zcG9ydERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0 +RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0RGF0 +YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IkRhdGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnQyRGF0YVR5cGUiPg0KICAgIDx4czpj +b21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0 +bnM6RGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZHJlc3MiIHR5cGU9InVhOkV4 +dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJRb3NDYXRlZ29yeSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRh +dGFncmFtUW9zIiB0eXBlPSJ1YTpMaXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5 +QW5ub3VuY2VSYXRlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRvcGljIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhZ3JhbVdyaXRlckdyb3VwVHJhbnNwb3J0MkRh +dGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydDJEYXRhVHlwZSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0YWdyYW1Xcml0ZXJHcm91cFRy +YW5zcG9ydDJEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YWdyYW1Xcml0ZXJHcm91cFRyYW5zcG9ydDJEYXRhVHlwZSIgdHlwZT0idG5zOkRh +dGFncmFtV3JpdGVyR3JvdXBUcmFuc3BvcnQyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtV3Jp +dGVyR3JvdXBUcmFuc3BvcnQyRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZEYXRhZ3JhbVdyaXRl +ckdyb3VwVHJhbnNwb3J0MkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhZ3JhbURhdGFTZXRSZWFkZXJUcmFuc3BvcnRE +YXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 +eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkcmVz +cyIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlFvc0NhdGVnb3J5IiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGF0YWdyYW1Rb3MiIHR5cGU9InVhOkxpc3RPZkV4dGVuc2lvbk9iamVjdCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJUb3BpYyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAg +PC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGF0YWdyYW1EYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpE +YXRhZ3JhbURhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mRGF0YWdyYW1EYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFncmFtRGF0 +YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6RGF0YWdyYW1EYXRhU2V0UmVh +ZGVyVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGFncmFtRGF0YVNldFJlYWRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRGF0YWdyYW1EYXRhU2V0UmVhZGVyVHJhbnNw +b3J0RGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzb3VyY2VVcmkiIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJBdXRoZW50aWNhdGlvblByb2ZpbGVVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAg +IDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRh +VHlwZSIgdHlwZT0idG5zOkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJva2VyQ29ubmVjdGlvblRyYW5zcG9ydERh +dGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9r +ZXJDb25uZWN0aW9uVHJhbnNwb3J0RGF0YVR5cGUiIHR5cGU9InRuczpCcm9rZXJDb25uZWN0aW9u +VHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRh +VHlwZSIgdHlwZT0idG5zOkxpc3RPZkJyb2tlckNvbm5lY3Rpb25UcmFuc3BvcnREYXRhVHlwZSIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0i +QnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJh +c2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFNwZWNpZmll +ZF8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCZXN0RWZmb3J0XzEiIC8+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkF0TGVhc3RPbmNlXzIiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IkF0TW9zdE9uY2VfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iRXhhY3RseU9uY2VfNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hz +OnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb2tlclRyYW5zcG9ydFF1YWxpdHlP +ZlNlcnZpY2UiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZT +ZXJ2aWNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9r +ZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiB0eXBlPSJ0bnM6QnJva2VyVHJhbnNwb3J0UXVh +bGl0eU9mU2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiB0eXBlPSJ0bnM6TGlzdE9m +QnJva2VyVHJhbnNwb3J0UXVhbGl0eU9mU2VydmljZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQnJva2VyV3JpdGVyR3JvdXBUcmFuc3Bv +cnREYXRhVHlwZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAg +ICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpXcml0ZXJHcm91cFRyYW5zcG9ydERhdGFUeXBlIj4N +CiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlF1ZXVl +TmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc291cmNlVXJpIiB0eXBlPSJ4czpzdHJpbmci +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iQXV0aGVudGljYXRpb25Qcm9maWxlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVx +dWVzdGVkRGVsaXZlcnlHdWFyYW50ZWUiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5 +T2ZTZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg +ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERh +dGFUeXBlIiB0eXBlPSJ0bnM6QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJva2VyV3JpdGVyR3JvdXBUcmFuc3Bv +cnREYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +QnJva2VyV3JpdGVyR3JvdXBUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlcldyaXRl +ckdyb3VwVHJhbnNwb3J0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5k +ZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkJyb2tlcldyaXRlckdyb3VwVHJhbnNw +b3J0RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZCcm9rZXJXcml0ZXJHcm91cFRyYW5zcG9ydERh +dGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4czpj +b21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0 +bnM6RGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlF1ZXVlTmFtZSIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlc291cmNlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRpb25Q +cm9maWxlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkRGVsaXZlcnlHdWFyYW50 +ZWUiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWV0YURhdGFRdWV1ZU5hbWUiIHR5 +cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRhRGF0YVVwZGF0ZVRpbWUiIHR5cGU9InhzOmRvdWJsZSIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRl +bnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iQnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiB0 +eXBlPSJ0bnM6QnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9ydERhdGFUeXBlIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCcm9rZXJEYXRhU2V0V3JpdGVyVHJhbnNwb3J0RGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb2tl +ckRhdGFTZXRXcml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlckRhdGFTZXRX +cml0ZXJUcmFuc3BvcnREYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnJva2VyRGF0YVNldFdyaXRlclRyYW5z +cG9ydERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mQnJva2VyRGF0YVNldFdyaXRlclRyYW5zcG9y +dERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJCcm9rZXJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUiPg0KICAgIDx4 +czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl +PSJ0bnM6RGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlF1ZXVlTmFtZSIgdHlwZT0ieHM6c3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc291cmNlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRp +b25Qcm9maWxlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkRGVsaXZlcnlHdWFy +YW50ZWUiIHR5cGU9InRuczpCcm9rZXJUcmFuc3BvcnRRdWFsaXR5T2ZTZXJ2aWNlIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWV0YURhdGFRdWV1ZU5hbWUi +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl +eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb2tl +ckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5zOkJyb2tlckRhdGFTZXRS +ZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlz +dE9mQnJva2VyRGF0YVNldFJlYWRlclRyYW5zcG9ydERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm9rZXJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0 +RGF0YVR5cGUiIHR5cGU9InRuczpCcm9rZXJEYXRhU2V0UmVhZGVyVHJhbnNwb3J0RGF0YVR5cGUi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgdHlwZT0idG5z +Okxpc3RPZkJyb2tlckRhdGFTZXRSZWFkZXJUcmFuc3BvcnREYXRhVHlwZSIgbmlsbGFibGU9InRy +dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUHViU3ViQ29uZmln +dXJhdGlvblJlZk1hc2siPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZElu +dCI+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJQdWJTdWJDb25maWd1cmF0aW9uUmVmTWFzayIgdHlwZT0idG5zOlB1YlN1YkNv +bmZpZ3VyYXRpb25SZWZNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQ +dWJTdWJDb25maWd1cmF0aW9uUmVmTWFzayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUHViU3ViQ29uZmlndXJhdGlvblJlZk1hc2siIHR5cGU9InRuczpQdWJT +dWJDb25maWd1cmF0aW9uUmVmTWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJMaXN0T2ZQdWJTdWJDb25maWd1cmF0aW9uUmVmTWFzayIgdHlwZT0idG5zOkxp +c3RPZlB1YlN1YkNvbmZpZ3VyYXRpb25SZWZNYXNrIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJTdWJDb25maWd1cmF0aW9uUmVmRGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbmZp +Z3VyYXRpb25NYXNrIiB0eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJhdGlvblJlZk1hc2siIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1lbnRJbmRleCIgdHlwZT0i +eHM6dW5zaWduZWRTaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29ubmVjdGlvbkluZGV4IiB0eXBlPSJ4czp1bnNpZ25lZFNob3J0IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJHcm91cEluZGV4IiB0eXBlPSJ4czp1bnNpZ25l +ZFNob3J0IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViQ29uZmlndXJhdGlvblJlZkRhdGFU +eXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJhdGlvblJlZkRhdGFUeXBlIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQdWJTdWJDb25maWd1cmF0aW9uUmVmRGF0YVR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1YlN1YkNvbmZp +Z3VyYXRpb25SZWZEYXRhVHlwZSIgdHlwZT0idG5zOlB1YlN1YkNvbmZpZ3VyYXRpb25SZWZEYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmlndXJhdGlvblJlZkRhdGFUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mUHViU3ViQ29uZmlndXJhdGlvblJlZkRhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94 +czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJTdWJDb25maWd1cmF0aW9u +VmFsdWVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29uZmlndXJhdGlvbkVsZW1lbnQiIHR5cGU9InRuczpQdWJTdWJDb25maWd1cmF0aW9uUmVm +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGlmaWVyIiB0eXBlPSJ1YTpW +YXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViQ29uZmlndXJhdGlvblZhbHVlRGF0 +YVR5cGUiIHR5cGU9InRuczpQdWJTdWJDb25maWd1cmF0aW9uVmFsdWVEYXRhVHlwZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHViU3ViQ29uZmlndXJhdGlvblZhbHVlRGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlB1YlN1 +YkNvbmZpZ3VyYXRpb25WYWx1ZURhdGFUeXBlIiB0eXBlPSJ0bnM6UHViU3ViQ29uZmlndXJhdGlv +blZhbHVlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlB1YlN1YkNvbmZpZ3VyYXRpb25WYWx1ZURhdGFUeXBl +IiB0eXBlPSJ0bnM6TGlzdE9mUHViU3ViQ29uZmlndXJhdGlvblZhbHVlRGF0YVR5cGUiIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkRpYWdu +b3N0aWNzTGV2ZWwiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNpY18wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJBZHZhbmNlZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJ +bmZvXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxvZ18zIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJ1Z180IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+ +DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY3NMZXZl +bCIgdHlwZT0idG5zOkRpYWdub3N0aWNzTGV2ZWwiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZkRpYWdub3N0aWNzTGV2ZWwiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNzTGV2ZWwiIHR5cGU9InRuczpEaWFnbm9zdGljc0xl +dmVsIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRp +YWdub3N0aWNzTGV2ZWwiIHR5cGU9InRuczpMaXN0T2ZEaWFnbm9zdGljc0xldmVsIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQdWJTdWJE +aWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNhdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJh +c2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9u +XzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVycm9yXzEiIC8+DQogICAgPC94 +czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQ +dWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNhdGlvbiIgdHlwZT0idG5zOlB1YlN1YkRp +YWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNhdGlvbiI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHViU3ViRGlhZ25vc3RpY3ND +b3VudGVyQ2xhc3NpZmljYXRpb24iIHR5cGU9InRuczpQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJD +bGFzc2lmaWNhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJMaXN0T2ZQdWJTdWJEaWFnbm9zdGljc0NvdW50ZXJDbGFzc2lmaWNhdGlvbiIgdHlwZT0idG5z +Okxpc3RPZlB1YlN1YkRpYWdub3N0aWNzQ291bnRlckNsYXNzaWZpY2F0aW9uIiBuaWxsYWJsZT0i +dHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBbGlhc05hbWVE +YXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWxp +YXNOYW1lIiB0eXBlPSJ1YTpRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlZE5vZGVzIiB0eXBlPSJ1 +YTpMaXN0T2ZFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBbGlhc05hbWVEYXRhVHlwZSIgdHlwZT0idG5zOkFsaWFzTmFtZURhdGFUeXBlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBbGlhc05hbWVEYXRhVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWxpYXNOYW1lRGF0YVR5cGUi +IHR5cGU9InRuczpBbGlhc05hbWVEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQWxpYXNOYW1lRGF0YVR5cGUi +IHR5cGU9InRuczpMaXN0T2ZBbGlhc05hbWVEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6 +ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUGFzc3dvcmRPcHRpb25zTWFzayI+ +DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8L3hzOnJl +c3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlBhc3N3 +b3JkT3B0aW9uc01hc2siIHR5cGU9InRuczpQYXNzd29yZE9wdGlvbnNNYXNrIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQYXNzd29yZE9wdGlvbnNNYXNrIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYXNzd29yZE9wdGlvbnNNYXNrIiB0 +eXBlPSJ0bnM6UGFzc3dvcmRPcHRpb25zTWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZQYXNzd29yZE9wdGlvbnNNYXNrIiB0eXBlPSJ0bnM6TGlz +dE9mUGFzc3dvcmRPcHRpb25zTWFzayIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVXNlckNvbmZpZ3VyYXRpb25NYXNrIj4NCiAgICA8eHM6 +cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+ +DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlckNvbmZpZ3VyYXRp +b25NYXNrIiB0eXBlPSJ0bnM6VXNlckNvbmZpZ3VyYXRpb25NYXNrIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZVc2VyQ29uZmlndXJhdGlvbk1hc2siPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJDb25maWd1cmF0aW9uTWFzayIgdHlw +ZT0idG5zOlVzZXJDb25maWd1cmF0aW9uTWFzayIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZVc2VyQ29uZmlndXJhdGlvbk1hc2siIHR5cGU9InRuczpM +aXN0T2ZVc2VyQ29uZmlndXJhdGlvbk1hc2siIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVzZXJNYW5hZ2VtZW50RGF0YVR5cGUiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJVc2VyQ29uZmlndXJhdGlvbiIgdHlwZT0idG5zOlVzZXJDb25maWd1cmF0aW9u +TWFzayIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRp +b24iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJVc2VyTWFuYWdlbWVudERhdGFUeXBlIiB0eXBlPSJ0bnM6VXNlck1hbmFnZW1lbnREYXRhVHlw +ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVXNlck1hbmFnZW1lbnREYXRh +VHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlck1h +bmFnZW1lbnREYXRhVHlwZSIgdHlwZT0idG5zOlVzZXJNYW5hZ2VtZW50RGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxp +c3RPZlVzZXJNYW5hZ2VtZW50RGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZVc2VyTWFuYWdlbWVu +dERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50 +IG5hbWU9IkVuY29kZWRUaWNrZXQiIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8eHM6c2ltcGxl +VHlwZSAgbmFtZT0iRHVwbGV4Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5n +Ij4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRnVsbF8wIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJIYWxmXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlVua25vd25fMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkR1cGxleCIgdHlwZT0idG5zOkR1cGxleCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRHVwbGV4Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEdXBsZXgiIHR5cGU9InRuczpEdXBsZXgiIG1pbk9jY3Vy +cz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRHVwbGV4IiB0eXBlPSJ0 +bnM6TGlzdE9mRHVwbGV4IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpz +aW1wbGVUeXBlICBuYW1lPSJJbnRlcmZhY2VBZG1pblN0YXR1cyI+DQogICAgPHhzOnJlc3RyaWN0 +aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVwXzAi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRvd25fMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZ18yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQog +IDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW50ZXJmYWNlQWRtaW5TdGF0 +dXMiIHR5cGU9InRuczpJbnRlcmZhY2VBZG1pblN0YXR1cyIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mSW50ZXJmYWNlQWRtaW5TdGF0dXMiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkludGVyZmFjZUFkbWluU3RhdHVzIiB0eXBlPSJ0bnM6 +SW50ZXJmYWNlQWRtaW5TdGF0dXMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mSW50ZXJmYWNlQWRtaW5TdGF0dXMiIHR5cGU9InRuczpMaXN0T2ZJbnRl +cmZhY2VBZG1pblN0YXR1cyIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6 +c2ltcGxlVHlwZSAgbmFtZT0iSW50ZXJmYWNlT3BlclN0YXR1cyI+DQogICAgPHhzOnJlc3RyaWN0 +aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVwXzAi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRvd25fMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZ18yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJVbmtub3duXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRvcm1hbnRf +NCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm90UHJlc2VudF81IiAvPg0KICAg +ICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dlckxheWVyRG93bl82IiAvPg0KICAgIDwveHM6 +cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW50 +ZXJmYWNlT3BlclN0YXR1cyIgdHlwZT0idG5zOkludGVyZmFjZU9wZXJTdGF0dXMiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkludGVyZmFjZU9wZXJTdGF0dXMiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkludGVyZmFjZU9wZXJTdGF0dXMi +IHR5cGU9InRuczpJbnRlcmZhY2VPcGVyU3RhdHVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkludGVyZmFjZU9wZXJTdGF0dXMiIHR5cGU9InRuczpM +aXN0T2ZJbnRlcmZhY2VPcGVyU3RhdHVzIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0K +DQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJOZWdvdGlhdGlvblN0YXR1cyI+DQogICAgPHhzOnJl +c3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IkluUHJvZ3Jlc3NfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGVf +MSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkXzIiIC8+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVua25vd25fMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iTm9OZWdvdGlhdGlvbl80IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTmVnb3RpYXRpb25TdGF0dXMiIHR5 +cGU9InRuczpOZWdvdGlhdGlvblN0YXR1cyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mTmVnb3RpYXRpb25TdGF0dXMiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik5lZ290aWF0aW9uU3RhdHVzIiB0eXBlPSJ0bnM6TmVnb3RpYXRpb25TdGF0 +dXMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mTmVn +b3RpYXRpb25TdGF0dXMiIHR5cGU9InRuczpMaXN0T2ZOZWdvdGlhdGlvblN0YXR1cyIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVHNuRmFp +bHVyZUNvZGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb0ZhaWx1cmVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iSW5zdWZmaWNpZW50QmFuZHdpZHRoXzEiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9Ikluc3VmZmljaWVudFJlc291cmNlc18yIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJJbnN1ZmZpY2llbnRUcmFmZmljQ2xhc3NCYW5kd2lkdGhfMyIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyZWFtSWRJblVzZV80IiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJTdHJlYW1EZXN0aW5hdGlvbkFkZHJlc3NJblVzZV81IiAvPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJlYW1QcmVlbXB0ZWRCeUhpZ2hlclJhbmtf +NiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZW5jeUhhc0NoYW5nZWRfNyIg +Lz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRWdyZXNzUG9ydE5vdEF2YkNhcGFibGVf +OCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlRGlmZmVyZW50RGVzdGluYXRp +b25BZGRyZXNzXzkiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik91dE9mTXNycFJl +c291cmNlc18xMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0T2ZNbXJwUmVz +b3VyY2VzXzExIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5ub3RTdG9yZURl +c3RpbmF0aW9uQWRkcmVzc18xMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUHJp +b3JpdHlJc05vdEFuU3JjQ2xhc3NfMTMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Ik1heEZyYW1lU2l6ZVRvb0xhcmdlXzE0IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJNYXhGYW5JblBvcnRzTGltaXRSZWFjaGVkXzE1IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJGaXJzdFZhbHVlQ2hhbmdlZEZvclN0cmVhbUlkXzE2IiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJWbGFuQmxvY2tlZE9uRWdyZXNzXzE3IiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJWbGFuVGFnZ2luZ0Rpc2FibGVkT25FZ3Jlc3NfMTgiIC8+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNyQ2xhc3NQcmlvcml0eU1pc21hdGNoXzE5IiAvPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGZWF0dXJlTm90UHJvcGFnYXRlZF8yMCIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4TGF0ZW5jeUV4Y2VlZGVkXzIxIiAvPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCcmlkZ2VEb2VzTm90UHJvdmlkZU5ldHdvcmtJ +ZF8yMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyZWFtVHJhbnNmb3JtTm90 +U3VwcG9ydGVkXzIzIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJlYW1JZFR5 +cGVOb3RTdXBwb3J0ZWRfMjQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZlYXR1 +cmVOb3RTdXBwb3J0ZWRfMjUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUc25GYWlsdXJlQ29kZSIgdHlwZT0idG5zOlRz +bkZhaWx1cmVDb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUc25GYWls +dXJlQ29kZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHNu +RmFpbHVyZUNvZGUiIHR5cGU9InRuczpUc25GYWlsdXJlQ29kZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUc25GYWlsdXJlQ29kZSIgdHlwZT0idG5z +Okxpc3RPZlRzbkZhaWx1cmVDb2RlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpzaW1wbGVUeXBlICBuYW1lPSJUc25TdHJlYW1TdGF0ZSI+DQogICAgPHhzOnJlc3RyaWN0 +aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2Fi +bGVkXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpZ3VyaW5nXzEiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWR5XzIiIC8+DQogICAgICA8eHM6ZW51 +bWVyYXRpb24gdmFsdWU9Ik9wZXJhdGlvbmFsXzMiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IkVycm9yXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJUc25TdHJlYW1TdGF0ZSIgdHlwZT0idG5zOlRzblN0 +cmVhbVN0YXRlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUc25TdHJlYW1T +dGF0ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHNuU3Ry +ZWFtU3RhdGUiIHR5cGU9InRuczpUc25TdHJlYW1TdGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUc25TdHJlYW1TdGF0ZSIgdHlwZT0idG5zOkxp +c3RPZlRzblN0cmVhbVN0YXRlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpzaW1wbGVUeXBlICBuYW1lPSJUc25UYWxrZXJTdGF0dXMiPg0KICAgIDx4czpyZXN0cmljdGlv +biBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOb25lXzAi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWR5XzEiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IkZhaWxlZF8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQog +IDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHNuVGFsa2VyU3RhdHVzIiB0 +eXBlPSJ0bnM6VHNuVGFsa2VyU3RhdHVzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZUc25UYWxrZXJTdGF0dXMiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlRzblRhbGtlclN0YXR1cyIgdHlwZT0idG5zOlRzblRhbGtlclN0YXR1cyIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZUc25UYWxrZXJT +dGF0dXMiIHR5cGU9InRuczpMaXN0T2ZUc25UYWxrZXJTdGF0dXMiIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlRzbkxpc3RlbmVyU3RhdHVz +Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJS +ZWFkeV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWFsRmFpbGVkXzIi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZhaWxlZF8zIiAvPg0KICAgIDwveHM6 +cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHNu +TGlzdGVuZXJTdGF0dXMiIHR5cGU9InRuczpUc25MaXN0ZW5lclN0YXR1cyIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHNuTGlzdGVuZXJTdGF0dXMiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRzbkxpc3RlbmVyU3RhdHVzIiB0eXBlPSJ0 +bnM6VHNuTGlzdGVuZXJTdGF0dXMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlzdE9mVHNuTGlzdGVuZXJTdGF0dXMiIHR5cGU9InRuczpMaXN0T2ZUc25MaXN0 +ZW5lclN0YXR1cyIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iUHJpb3JpdHlNYXBwaW5nRW50cnlUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXBwaW5nVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQ +cmlvcml0eUxhYmVsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eVZhbHVlX1BDUCIgdHlwZT0i +eHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJQcmlvcml0eVZhbHVlX0RTQ1AiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iUHJpb3JpdHlNYXBwaW5nRW50cnlUeXBlIiB0eXBlPSJ0bnM6UHJpb3JpdHlNYXBw +aW5nRW50cnlUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQcmlvcml0 +eU1hcHBpbmdFbnRyeVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlByaW9yaXR5TWFwcGluZ0VudHJ5VHlwZSIgdHlwZT0idG5zOlByaW9yaXR5TWFwcGlu +Z0VudHJ5VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mUHJpb3JpdHlNYXBwaW5nRW50cnlUeXBlIiB0eXBlPSJ0bnM6 +TGlzdE9mUHJpb3JpdHlNYXBwaW5nRW50cnlUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVt +ZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVuY2VEZXNjcmlwdGlvbkRhdGFU +eXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTb3VyY2VO +b2RlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJ +c0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlRhcmdldE5vZGUiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29t +cGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZURlc2NyaXB0aW9uRGF0YVR5 +cGUiIHR5cGU9InRuczpSZWZlcmVuY2VEZXNjcmlwdGlvbkRhdGFUeXBlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWZlcmVuY2VEZXNjcmlwdGlvbkRhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VEZXNjcmlw +dGlvbkRhdGFUeXBlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb25EYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mUmVmZXJlbmNlRGVzY3JpcHRpb25EYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlZmVy +ZW5jZURlc2NyaXB0aW9uRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZmVyZW5jZUxpc3RFbnRyeURhdGFUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlIiB0 +eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldE5vZGUiIHR5cGU9InVhOkV4cGFu +ZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5j +ZUxpc3RFbnRyeURhdGFUeXBlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlTGlzdEVudHJ5RGF0YVR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlZmVyZW5jZUxpc3RFbnRyeURh +dGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZl +cmVuY2VMaXN0RW50cnlEYXRhVHlwZSIgdHlwZT0idG5zOlJlZmVyZW5jZUxpc3RFbnRyeURhdGFU +eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZSZWZlcmVuY2VMaXN0RW50cnlEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RP +ZlJlZmVyZW5jZUxpc3RFbnRyeURhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJJZFR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlv +biBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1lcmlj +XzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmluZ18xIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHdWlkXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9Ik9wYXF1ZV8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSWRUeXBlIiB0eXBlPSJ0bnM6SWRUeXBlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZJZFR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklkVHlwZSIgdHlwZT0idG5zOklkVHlwZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJZFR5cGUiIHR5 +cGU9InRuczpMaXN0T2ZJZFR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOnNpbXBsZVR5cGUgIG5hbWU9Ik5vZGVDbGFzcyI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJh +c2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVuc3BlY2lmaWVk +XzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9iamVjdF8xIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJNZXRob2RfNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT2Jq +ZWN0VHlwZV84IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZVR5cGVf +MTYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVR5cGVfMzIiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlXzY0IiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJWaWV3XzEyOCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0K +ICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik5vZGVDbGFzcyIgdHlwZT0i +dG5zOk5vZGVDbGFzcyIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iUGVybWlzc2lvblR5 +cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+DQogICAgPC94 +czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQ +ZXJtaXNzaW9uVHlwZSIgdHlwZT0idG5zOlBlcm1pc3Npb25UeXBlIiAvPg0KDQogIDx4czpzaW1w +bGVUeXBlICBuYW1lPSJBY2Nlc3NMZXZlbFR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNl +PSJ4czp1bnNpZ25lZEJ5dGUiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxl +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWxUeXBlIiB0eXBlPSJ0bnM6QWNj +ZXNzTGV2ZWxUeXBlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJBY2Nlc3NMZXZlbEV4 +VHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkSW50Ij4NCiAgICA8 +L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkFjY2Vzc0xldmVsRXhUeXBlIiB0eXBlPSJ0bnM6QWNjZXNzTGV2ZWxFeFR5cGUiIC8+DQoNCiAg +PHhzOnNpbXBsZVR5cGUgIG5hbWU9IkV2ZW50Tm90aWZpZXJUeXBlIj4NCiAgICA8eHM6cmVzdHJp +Y3Rpb24gYmFzZT0ieHM6dW5zaWduZWRCeXRlIj4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8 +L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50Tm90aWZpZXJUeXBlIiB0 +eXBlPSJ0bnM6RXZlbnROb3RpZmllclR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlJvbGVQZXJtaXNzaW9uVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUm9sZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJtaXNzaW9ucyIgdHlwZT0idG5z +OlBlcm1pc3Npb25UeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUm9sZVBlcm1pc3Npb25UeXBl +IiB0eXBlPSJ0bnM6Um9sZVBlcm1pc3Npb25UeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSb2xlUGVybWlzc2lvblR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJvbGVQZXJtaXNzaW9uVHlwZSIgdHlwZT0idG5zOlJvbGVQZXJt +aXNzaW9uVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mUm9sZVBlcm1pc3Npb25UeXBlIiB0eXBlPSJ0bnM6TGlzdE9m +Um9sZVBlcm1pc3Npb25UeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJEYXRhVHlwZURlZmluaXRpb24iIHR5cGU9InRuczpEYXRhVHlwZURlZmluaXRpb24i +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGFUeXBlRGVmaW5pdGlvbiI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVEZWZp +bml0aW9uIiB0eXBlPSJ0bnM6RGF0YVR5cGVEZWZpbml0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRhVHlwZURl +ZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZEYXRhVHlwZURlZmluaXRpb24iIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlN0cnVjdHVyZVR5 +cGUiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJTdHJ1Y3R1cmVfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2 +YWx1ZT0iU3RydWN0dXJlV2l0aE9wdGlvbmFsRmllbGRzXzEiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IlVuaW9uXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0 +cnVjdHVyZVdpdGhTdWJ0eXBlZFZhbHVlc18zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJVbmlvbldpdGhTdWJ0eXBlZFZhbHVlc180IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+ +DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlVHlwZSIg +dHlwZT0idG5zOlN0cnVjdHVyZVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN0 +cnVjdHVyZUZpZWxkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVk +VGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZVJhbmsiIHR5cGU9InhzOmlu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNp +b25zIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhTdHJpbmdMZW5ndGgiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc09w +dGlvbmFsIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU3RydWN0dXJl +RmllbGQiIHR5cGU9InRuczpTdHJ1Y3R1cmVGaWVsZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iTGlzdE9mU3RydWN0dXJlRmllbGQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6U3RydWN0dXJlRmllbGQi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZlN0cnVjdHVyZUZpZWxkIiB0eXBlPSJ0bnM6TGlzdE9mU3RydWN0dXJlRmllbGQi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlN0cnVjdHVyZURlZmluaXRpb24iPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFs +c2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RGF0YVR5cGVEZWZpbml0aW9uIj4N +CiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlZmF1 +bHRFbmNvZGluZ0lkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQmFzZURhdGFUeXBlIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlVHlwZSIgdHlwZT0idG5zOlN0cnVjdHVyZVR5cGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZHMiIHR5cGU9 +InRuczpMaXN0T2ZTdHJ1Y3R1cmVGaWVsZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwv +eHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlN0cnVjdHVyZURlZmluaXRpb24iIHR5cGU9InRuczpTdHJ1Y3R1cmVEZWZpbml0aW9uIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVEZWZpbml0aW9uIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVEZWZp +bml0aW9uIiB0eXBlPSJ0bnM6U3RydWN0dXJlRGVmaW5pdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU3RydWN0dXJl +RGVmaW5pdGlvbiIgdHlwZT0idG5zOkxpc3RPZlN0cnVjdHVyZURlZmluaXRpb24iIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkVudW1EZWZp +bml0aW9uIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4 +czpleHRlbnNpb24gYmFzZT0idG5zOkRhdGFUeXBlRGVmaW5pdGlvbiI+DQogICAgICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWVsZHMiIHR5cGU9InRuczpM +aXN0T2ZFbnVtRmllbGQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRGVm +aW5pdGlvbiIgdHlwZT0idG5zOkVudW1EZWZpbml0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJMaXN0T2ZFbnVtRGVmaW5pdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRW51bURlZmluaXRpb24iIHR5cGU9InRuczpFbnVtRGVmaW5pdGlv +biIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTGlzdE9mRW51bURlZmluaXRpb24iIHR5cGU9InRuczpMaXN0T2ZFbnVtRGVmaW5pdGlv +biIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTm9kZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9k +ZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQ2xhc3MiIHR5cGU9InRuczpOb2RlQ2xhc3MiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5hbWUiIHR5cGU9 +InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVNYXNrIiB0eXBlPSJ4 +czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +VXNlcldyaXRlTWFzayIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJvbGVQZXJtaXNzaW9ucyIgdHlwZT0idG5zOkxpc3RPZlJv +bGVQZXJtaXNzaW9uVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlVzZXJSb2xlUGVybWlzc2lvbnMiIHR5cGU9InRuczpMaXN0T2ZS +b2xlUGVybWlzc2lvblR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NSZXN0cmljdGlvbnMiIHR5cGU9InhzOnVuc2lnbmVk +U2hvcnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5j +ZXMiIHR5cGU9InRuczpMaXN0T2ZSZWZlcmVuY2VOb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ik5vZGUiIHR5cGU9InRuczpOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZOb2RlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJOb2RlIiB0eXBlPSJ0bnM6Tm9kZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9 +InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mTm9kZSIgdHlwZT0idG5z +Okxpc3RPZk5vZGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikluc3RhbmNlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNp +b24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iSW5zdGFuY2VOb2RlIiB0eXBlPSJ0bnM6SW5zdGFuY2VOb2RlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250 +ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb2RlIj4N +CiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94 +czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHlwZU5vZGUiIHR5cGU9InRuczpUeXBlTm9kZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0Tm9kZSI+DQogICAgPHhzOmNvbXBsZXhD +b250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpJbnN0 +YW5jZU5vZGUiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRXZlbnROb3RpZmllciIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJPYmplY3ROb2RlIiB0eXBlPSJ0bnM6T2JqZWN0Tm9kZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iT2JqZWN0VHlwZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhl +ZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VHlwZU5vZGUiPg0KICAg +ICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFj +dCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVl +bmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT2JqZWN0VHlwZU5vZGUiIHR5 +cGU9InRuczpPYmplY3RUeXBlTm9kZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmFy +aWFibGVOb2RlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAgICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBl +IiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5 +cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbCIgdHlwZT0ieHM6dW5zaWduZWRC +eXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlckFj +Y2Vzc0xldmVsIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNaW5pbXVtU2FtcGxpbmdJbnRlcnZhbCIgdHlwZT0ieHM6 +ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlz +dG9yaXppbmciIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBY2Nlc3NMZXZlbEV4IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNp +b24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iVmFyaWFibGVOb2RlIiB0eXBlPSJ0bnM6VmFyaWFibGVOb2RlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWYXJpYWJsZVR5cGVOb2RlIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +OlR5cGVOb2RlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpWYXJpYW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGUiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1 +ZVJhbmsiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkFycmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Iklz +QWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlZhcmlhYmxlVHlw +ZU5vZGUiIHR5cGU9InRuczpWYXJpYWJsZVR5cGVOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJSZWZlcmVuY2VUeXBlTm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVk +PSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpUeXBlTm9kZSI+DQogICAg +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0Fic3RyYWN0 +IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iU3ltbWV0cmljIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52ZXJzZU5hbWUiIHR5cGU9InVhOkxvY2FsaXpl +ZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2Vx +dWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlTm9k +ZSIgdHlwZT0idG5zOlJlZmVyZW5jZVR5cGVOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJNZXRob2ROb2RlIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N +CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOkluc3RhbmNlTm9kZSI+DQogICAgICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFeGVjdXRhYmxlIiB0eXBl +PSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVXNlckV4ZWN1dGFibGUiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29t +cGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1l +dGhvZE5vZGUiIHR5cGU9InRuczpNZXRob2ROb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJWaWV3Tm9kZSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQog +ICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpJbnN0YW5jZU5vZGUiPg0KICAgICAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGFpbnNOb0xvb3BzIiB0 +eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iRXZlbnROb3RpZmllciIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJWaWV3Tm9kZSIgdHlwZT0idG5zOlZpZXdOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJEYXRhVHlwZU5vZGUiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFs +c2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VHlwZU5vZGUiPg0KICAgICAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFjdCIgdHlw +ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRhdGFUeXBlRGVmaW5pdGlvbiIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAg +PC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVR5cGVOb2RlIiB0eXBlPSJ0bnM6RGF0YVR5 +cGVOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVuY2VOb2RlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQi +IHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IklzSW52ZXJzZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0SWQiIHR5cGU9InVhOkV4cGFu +ZGVkTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5j +ZU5vZGUiIHR5cGU9InRuczpSZWZlcmVuY2VOb2RlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJMaXN0T2ZSZWZlcmVuY2VOb2RlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VOb2RlIiB0eXBlPSJ0bnM6UmVmZXJlbmNlTm9kZSIgbWlu +T2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TGlzdE9mUmVmZXJlbmNlTm9kZSIgdHlwZT0idG5zOkxpc3RPZlJlZmVyZW5jZU5vZGUiIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFyZ3Vt +ZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWVSYW5rIiB0 +eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFy +cmF5RGltZW5zaW9ucyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9 +InVhOkxvY2FsaXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +QXJndW1lbnQiIHR5cGU9InRuczpBcmd1bWVudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iTGlzdE9mQXJndW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkFyZ3VtZW50IiB0eXBlPSJ0bnM6QXJndW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkFyZ3VtZW50IiB0 +eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkVudW1WYWx1ZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ4czpsb25nIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6 +TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVudW1WYWx1ZVR5cGUiIHR5cGU9InRu +czpFbnVtVmFsdWVUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFbnVt +VmFsdWVUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF +bnVtVmFsdWVUeXBlIiB0eXBlPSJ0bnM6RW51bVZhbHVlVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhP +Y2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRW51bVZhbHVl +VHlwZSIgdHlwZT0idG5zOkxpc3RPZkVudW1WYWx1ZVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkVudW1GaWVsZCI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpFbnVtVmFsdWVUeXBlIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkVudW1GaWVsZCIgdHlwZT0idG5zOkVudW1GaWVsZCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW51bUZpZWxkIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbnVtRmllbGQiIHR5cGU9InRuczpFbnVtRmllbGQi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZkVudW1GaWVsZCIgdHlwZT0idG5zOkxpc3RPZkVudW1GaWVsZCIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT3B0aW9uU2V0 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlw +ZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsaWRCaXRzIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT3B0aW9uU2V0IiB0eXBlPSJ0bnM6 +T3B0aW9uU2V0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZPcHRpb25TZXQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik9wdGlvblNldCIg +dHlwZT0idG5zOk9wdGlvblNldCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mT3B0aW9uU2V0IiB0eXBlPSJ0bnM6TGlzdE9m +T3B0aW9uU2V0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czplbGVtZW50 +IG5hbWU9Ik5vcm1hbGl6ZWRTdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJEZWNpbWFsU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRHVyYXRpb25TdHJpbmciIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJUaW1lU3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGF0ZVN0cmluZyIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KDQogIDx4czplbGVt +ZW50IG5hbWU9IkR1cmF0aW9uIiB0eXBlPSJ4czpkb3VibGUiIC8+DQoNCiAgPHhzOmVsZW1lbnQg +bmFtZT0iVXRjVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIC8+DQoNCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTG9jYWxlSWQiIHR5cGU9InhzOnN0cmluZyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iVGltZVpvbmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iT2Zmc2V0IiB0eXBlPSJ4czpzaG9ydCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRGF5bGlnaHRTYXZpbmdJbk9mZnNldCIgdHlwZT0ieHM6Ym9vbGVh +biIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlRpbWVab25lRGF0YVR5cGUiIHR5cGU9InRuczpUaW1l +Wm9uZURhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUaW1lWm9u +ZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJU +aW1lWm9uZURhdGFUeXBlIiB0eXBlPSJ0bnM6VGltZVpvbmVEYXRhVHlwZSIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVGlt +ZVpvbmVEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlRpbWVab25lRGF0YVR5cGUiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iSW5kZXgiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IkludGVnZXJJZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IkFwcGxpY2F0 +aW9uVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8 +eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZlcl8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJDbGllbnRfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xpZW50 +QW5kU2VydmVyXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdmVyeVNl +cnZlcl8zIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iQXBwbGljYXRpb25UeXBlIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25U +eXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBcHBsaWNhdGlvbkRlc2NyaXB0aW9u +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlv +blVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvZHVjdFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXBw +bGljYXRpb25OYW1lIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXBwbGljYXRpb25UeXBlIiB0 +eXBlPSJ0bnM6QXBwbGljYXRpb25UeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJHYXRld2F5U2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlQ +cm9maWxlVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaXNjb3ZlcnlVcmxzIiB0eXBlPSJ1YTpMaXN0 +T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQXBwbGljYXRp +b25EZXNjcmlwdGlvbiIgdHlwZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFwcGxpY2F0aW9uRGVzY3Jp +cHRpb24iIHR5cGU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBcHBsaWNh +dGlvbkRlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mQXBwbGljYXRpb25EZXNjcmlwdGlvbiIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +UmVxdWVzdEhlYWRlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQXV0aGVudGljYXRpb25Ub2tlbiIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1wIiB0eXBl +PSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVxdWVzdEhhbmRsZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJldHVybkRpYWdub3N0aWNzIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXVkaXRFbnRy +eUlkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lb3V0SGludCIgdHlwZT0ieHM6dW5zaWduZWRJbnQi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZGl0aW9uYWxIZWFk +ZXIiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVzcG9uc2VIZWFkZXIiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcCIgdHlwZT0ieHM6ZGF0ZVRpbWUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIYW5kbGUi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2aWNlUmVzdWx0IiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlRGlhZ25vc3RpY3MiIHR5cGU9InVh +OkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU3RyaW5nVGFibGUiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFk +ZGl0aW9uYWxIZWFkZXIiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNl +SGVhZGVyIiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9IlZlcnNpb25UaW1lIiB0eXBlPSJ4czp1 +bnNpZ25lZEludCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2VydmljZUZhdWx0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRl +ciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlNlcnZpY2VGYXVsdCIgdHlwZT0idG5zOlNlcnZpY2VGYXVsdCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VSZXF1ZXN0VHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXJpc1ZlcnNpb24iIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJOYW1lc3BhY2VVcmlzIiB0eXBlPSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmlzIiB0eXBl +PSJ1YTpMaXN0T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNl +cnZpY2VJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNz +aW9ubGVzc0ludm9rZVJlcXVlc3RUeXBlIiB0eXBlPSJ0bnM6U2Vzc2lvbmxlc3NJbnZva2VSZXF1 +ZXN0VHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2Vzc2lvbmxlc3NJbnZva2VS +ZXNwb25zZVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ik5hbWVzcGFjZVVyaXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclVyaXMiIHR5cGU9 +InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlNlcnZpY2VJZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9ubGVzc0ludm9rZVJlc3BvbnNlVHlwZSIgdHlwZT0idG5z +OlNlc3Npb25sZXNzSW52b2tlUmVzcG9uc2VUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJGaW5kU2VydmVyc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5k +cG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlwZT0idWE6TGlzdE9mU3Ry +aW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iU2VydmVyVXJpcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzUmVxdWVzdCIgdHlwZT0idG5zOkZpbmRT +ZXJ2ZXJzUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmluZFNlcnZlcnNS +ZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVz +cG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlcnMiIHR5cGU9InRu +czpMaXN0T2ZBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzUmVzcG9uc2UiIHR5cGU9InRuczpGaW5kU2VydmVyc1Jl +c3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXJ2ZXJPbk5ldHdvcmsiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlY29yZElkIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2VydmVyTmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzY292ZXJ5VXJsIiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXJ2ZXJDYXBhYmlsaXRpZXMiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRu +czpTZXJ2ZXJPbk5ldHdvcmsiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlNl +cnZlck9uTmV0d29yayI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2VydmVyT25OZXR3b3JrIiB0eXBlPSJ0bnM6U2VydmVyT25OZXR3b3JrIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZT +ZXJ2ZXJPbk5ldHdvcmsiIHR5cGU9InRuczpMaXN0T2ZTZXJ2ZXJPbk5ldHdvcmsiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkZpbmRTZXJ2 +ZXJzT25OZXR3b3JrUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydGlu +Z1JlY29yZElkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVjb3Jkc1RvUmV0dXJuIiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2FwYWJp +bGl0eUZpbHRlciIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkZpbmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCIgdHlwZT0idG5zOkZp +bmRTZXJ2ZXJzT25OZXR3b3JrUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +RmluZFNlcnZlcnNPbk5ldHdvcmtSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ikxhc3RDb3VudGVyUmVzZXRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVycyIgdHlwZT0idG5zOkxpc3RPZlNl +cnZlck9uTmV0d29yayIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJGaW5k +U2VydmVyc09uTmV0d29ya1Jlc3BvbnNlIiB0eXBlPSJ0bnM6RmluZFNlcnZlcnNPbk5ldHdvcmtS +ZXNwb25zZSIgLz4NCg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBcHBsaWNhdGlvbkluc3RhbmNlQ2Vy +dGlmaWNhdGUiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAg +bmFtZT0iTWVzc2FnZVNlY3VyaXR5TW9kZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9Inhz +OnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkludmFsaWRfMCIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJTaWduXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25B +bmRFbmNyeXB0XzMiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlU2VjdXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVz +c2FnZVNlY3VyaXR5TW9kZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVXNlclRva2Vu +VHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IkFub255bW91c18wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJVc2VyTmFtZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0 +aWZpY2F0ZV8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZWRUb2tlbl8z +IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVXNlclRva2VuVHlwZSIgdHlwZT0idG5zOlVzZXJUb2tlblR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVzZXJUb2tlblBvbGljeSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUG9saWN5SWQiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlRva2VuVHlwZSIgdHlwZT0idG5zOlVzZXJUb2tlblR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Iklzc3VlZFRva2VuVHlwZSIgdHlwZT0ieHM6c3RyaW5nIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +SXNzdWVyRW5kcG9pbnRVcmwiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5UG9saWN5VXJpIiB0 +eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVXNl +clRva2VuUG9saWN5IiB0eXBlPSJ0bnM6VXNlclRva2VuUG9saWN5IiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJMaXN0T2ZVc2VyVG9rZW5Qb2xpY3kiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJUb2tlblBvbGljeSIgdHlwZT0idG5zOlVzZXJU +b2tlblBvbGljeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iTGlzdE9mVXNlclRva2VuUG9saWN5IiB0eXBlPSJ0bnM6TGlzdE9mVXNl +clRva2VuUG9saWN5IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJFbmRwb2ludERlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vy +dmVyIiB0eXBlPSJ0bnM6QXBwbGljYXRpb25EZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlckNlcnRpZmljYXRl +IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0eU1vZGUiIHR5cGU9InRuczpNZXNzYWdl +U2VjdXJpdHlNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZWN1cml0eVBvbGljeVVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcklkZW50aXR5VG9rZW5zIiB0 +eXBlPSJ0bnM6TGlzdE9mVXNlclRva2VuUG9saWN5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UHJvZmlsZVVyaSIgdHlw +ZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlMZXZlbCIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnREZXNjcmlwdGlvbiIgdHlwZT0idG5zOkVuZHBvaW50 +RGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50 +RGVzY3JpcHRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkVuZHBvaW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpFbmRwb2ludERlc2NyaXB0aW9uIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZFbmRwb2ludERlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnREZXNjcmlw +dGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iR2V0RW5kcG9pbnRzUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJF +bmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTG9jYWxlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZT +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJQcm9maWxlVXJpcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5 +cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkdldEVuZHBvaW50c1JlcXVlc3QiIHR5cGU9InRuczpH +ZXRFbmRwb2ludHNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHZXRFbmRw +b2ludHNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50cyIg +dHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iR2V0RW5kcG9pbnRzUmVzcG9uc2UiIHR5cGU9InRuczpHZXRFbmRw +b2ludHNSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJlZFNl +cnZlciI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVy +VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcm9kdWN0VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2 +ZXJOYW1lcyIgdHlwZT0idWE6TGlzdE9mTG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclR5cGUiIHR5cGU9 +InRuczpBcHBsaWNhdGlvblR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkdhdGV3YXlTZXJ2ZXJVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpc2NvdmVyeVVybHMi +IHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFwaG9yZUZpbGVQYXRoIiB0eXBlPSJ4czpzdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJJc09ubGluZSIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJl +Z2lzdGVyZWRTZXJ2ZXIiIHR5cGU9InRuczpSZWdpc3RlcmVkU2VydmVyIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWdpc3RlcmVkU2VydmVyIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdpc3RlcmVkU2VydmVyIiB0eXBlPSJ0bnM6 +UmVnaXN0ZXJlZFNlcnZlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVnaXN0ZXJlZFNlcnZlciIgdHlwZT0idG5zOkxp +c3RPZlJlZ2lzdGVyZWRTZXJ2ZXIiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2VydmVyUmVxdWVzdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5z +OlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXIiIHR5cGU9InRuczpSZWdpc3RlcmVkU2VydmVyIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIg +dHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iUmVnaXN0ZXJTZXJ2ZXJSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWdpc3RlclNlcnZlclJl +c3BvbnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXJSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iRGlzY292ZXJ5Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkRpc2NvdmVyeUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpEaXNjb3ZlcnlDb25maWd1 +cmF0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJNZG5zRGlzY292ZXJ5Q29uZmln +dXJhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8 +eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpEaXNjb3ZlcnlDb25maWd1cmF0aW9uIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1kbnNTZXJ2ZXJOYW1l +IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2FwYWJpbGl0aWVzIiB0eXBlPSJ1YTpMaXN0 +T2ZTdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6 +c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50 +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNZG5zRGlzY292ZXJ5 +Q29uZmlndXJhdGlvbiIgdHlwZT0idG5zOk1kbnNEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3RlclNlcnZlcjJSZXF1ZXN0Ij4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBl +PSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlciIgdHlwZT0idG5zOlJlZ2lzdGVyZWRTZXJ2ZXIi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaXNjb3ZlcnlDb25maWd1cmF0aW9uIiB0eXBlPSJ1YTpMaXN0T2ZFeHRlbnNpb25PYmplY3Qi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJTZXJ2ZXIyUmVx +dWVzdCIgdHlwZT0idG5zOlJlZ2lzdGVyU2VydmVyMlJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3Bv +bnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ29uZmlndXJhdGlvblJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0Nv +ZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyU2VydmVyMlJlc3BvbnNl +IiB0eXBlPSJ0bnM6UmVnaXN0ZXJTZXJ2ZXIyUmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9IlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9u +IGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3VlXzAi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJlbmV3XzEiIC8+DQogICAgPC94czpy +ZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1 +cml0eVRva2VuUmVxdWVzdFR5cGUiIHR5cGU9InRuczpTZWN1cml0eVRva2VuUmVxdWVzdFR5cGUi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNoYW5uZWxTZWN1cml0eVRva2VuIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDaGFubmVsSWQiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJUb2tlbklkIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlZEF0IiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZExpZmV0aW1lIiB0eXBlPSJ4 +czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNoYW5uZWxTZWN1cml0eVRva2Vu +IiB0eXBlPSJ0bnM6Q2hhbm5lbFNlY3VyaXR5VG9rZW4iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9Ik9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFk +ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJDbGllbnRQcm90b2NvbFZlcnNpb24iIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0VHlwZSIgdHlwZT0idG5z +OlNlY3VyaXR5VG9rZW5SZXF1ZXN0VHlwZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2VjdXJpdHlNb2RlIiB0eXBlPSJ0bnM6TWVzc2FnZVNlY3VyaXR5TW9kZSIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2xpZW50Tm9uY2UiIHR5 +cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZExpZmV0aW1lIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCIgdHlw +ZT0idG5zOk9wZW5TZWN1cmVDaGFubmVsUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iT3BlblNlY3VyZUNoYW5uZWxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlclByb3RvY29sVmVyc2lvbiIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5VG9rZW4iIHR5cGU9 +InRuczpDaGFubmVsU2VjdXJpdHlUb2tlbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlck5vbmNlIiB0eXBlPSJ4czpiYXNlNjRC +aW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlblNlY3VyZUNo +YW5uZWxSZXNwb25zZSIgdHlwZT0idG5zOk9wZW5TZWN1cmVDaGFubmVsUmVzcG9uc2UiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5 +cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IkNsb3NlU2VjdXJlQ2hhbm5lbFJlcXVlc3QiIHR5cGU9InRuczpDbG9zZVNlY3VyZUNoYW5u +ZWxSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDbG9zZVNlY3VyZUNoYW5u +ZWxSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDbG9zZVNlY3VyZUNoYW5uZWxSZXNwb25zZSIgdHlwZT0i +dG5zOkNsb3NlU2VjdXJlQ2hhbm5lbFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDZXJ0aWZpY2F0ZURhdGEiIHR5cGU9InhzOmJhc2U2NEJpbmFy +eSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlNpZ25hdHVyZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIHR5cGU9InRuczpT +aWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduZWRTb2Z0d2FyZUNlcnRpZmljYXRlIiB0eXBlPSJ0bnM6 +U2lnbmVkU29mdHdhcmVDZXJ0aWZpY2F0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2lnbmVkU29mdHdhcmVDZXJ0aWZp +Y2F0ZSIgdHlwZT0idG5zOkxpc3RPZlNpZ25lZFNvZnR3YXJlQ2VydGlmaWNhdGUiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkF1dGhl +bnRpY2F0aW9uVG9rZW4iIHR5cGU9InVhOk5vZGVJZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iU2lnbmF0dXJlRGF0YSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTaWduYXR1cmUiIHR5cGU9Inhz +OmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTaWdu +YXR1cmVEYXRhIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iQ3JlYXRlU2Vzc2lvblJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ2xpZW50RGVzY3JpcHRpb24iIHR5cGU9InRuczpBcHBsaWNhdGlvbkRlc2NyaXB0aW9uIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +U2VydmVyVXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2ludFVybCIgdHlwZT0ieHM6c3RyaW5n +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2Vzc2lvbk5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudE5vbmNlIiB0eXBlPSJ4czpi +YXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0ZSIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVxdWVzdGVkU2Vzc2lvblRpbWVvdXQiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVzcG9uc2VNZXNzYWdlU2l6ZSIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8 +L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVTZXNzaW9uUmVxdWVz +dCIgdHlwZT0idG5zOkNyZWF0ZVNlc3Npb25SZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJDcmVhdGVTZXNzaW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFk +ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZXNzaW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uVG9rZW4iIHR5 +cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJldmlzZWRTZXNzaW9uVGltZW91dCIgdHlwZT0ieHM6ZG91YmxlIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJOb25jZSIgdHlw +ZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyQ2VydGlmaWNhdGUiIHR5cGU9InhzOmJhc2U2NEJp +bmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlNlcnZlckVuZHBvaW50cyIgdHlwZT0idG5zOkxpc3RPZkVuZHBvaW50RGVzY3JpcHRp +b24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTZXJ2ZXJTb2Z0d2FyZUNlcnRpZmljYXRlcyIgdHlwZT0idG5zOkxpc3RPZlNpZ25lZFNv +ZnR3YXJlQ2VydGlmaWNhdGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJTaWduYXR1cmUiIHR5cGU9InRuczpTaWduYXR1cmVE +YXRhIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iTWF4UmVxdWVzdE1lc3NhZ2VTaXplIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25SZXNwb25zZSIgdHlwZT0idG5zOkNyZWF0ZVNl +c3Npb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVXNlcklkZW50aXR5 +VG9rZW4iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlBvbGlj +eUlkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iVXNlcklkZW50aXR5VG9rZW4iIHR5cGU9InRuczpVc2VySWRlbnRpdHlUb2tlbiIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQW5vbnltb3VzSWRlbnRpdHlUb2tlbiI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpVc2VySWRlbnRpdHlUb2tlbiI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAg +PC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENv +bnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFub255bW91 +c0lkZW50aXR5VG9rZW4iIHR5cGU9InRuczpBbm9ueW1vdXNJZGVudGl0eVRva2VuIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJVc2VyTmFtZUlkZW50aXR5VG9rZW4iPg0KICAgIDx4czpj +b21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0 +bnM6VXNlcklkZW50aXR5VG9rZW4iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iVXNlck5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYXNzd29y +ZCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuY3J5cHRpb25BbGdvcml0aG0iIHR5cGU9 +InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94 +czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRl +bnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lSWRl +bnRpdHlUb2tlbiIgdHlwZT0idG5zOlVzZXJOYW1lSWRlbnRpdHlUb2tlbiIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iWDUwOUlkZW50aXR5VG9rZW4iPg0KICAgIDx4czpjb21wbGV4Q29u +dGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6VXNlcklk +ZW50aXR5VG9rZW4iPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ2VydGlmaWNhdGVEYXRhIiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8 +L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJYNTA5SWRlbnRpdHlUb2tlbiIgdHlwZT0idG5zOlg1 +MDlJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJJc3N1ZWRJZGVu +dGl0eVRva2VuIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOlVzZXJJZGVudGl0eVRva2VuIj4NCiAgICAgICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRva2VuRGF0YSIgdHlwZT0i +eHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkVuY3J5cHRpb25BbGdvcml0aG0iIHR5cGU9InhzOnN0cmlu +ZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5j +ZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Iklzc3VlZElkZW50aXR5VG9rZW4i +IHR5cGU9InRuczpJc3N1ZWRJZGVudGl0eVRva2VuIiAvPg0KDQogIDx4czplbGVtZW50IG5hbWU9 +IlJzYUVuY3J5cHRlZFNlY3JldCIgdHlwZT0idWE6VmFyaWFudCIgLz4NCg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJFY2NFbmNyeXB0ZWRTZWNyZXQiIHR5cGU9InVhOlZhcmlhbnQiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IkFjdGl2YXRlU2Vzc2lvblJlcXVlc3QiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpS +ZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iQ2xpZW50U2lnbmF0dXJlIiB0eXBlPSJ0bnM6U2lnbmF0dXJlRGF0YSIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkNsaWVudFNvZnR3YXJlQ2VydGlmaWNhdGVzIiB0eXBlPSJ0bnM6TGlzdE9mU2lnbmVkU29mdHdh +cmVDZXJ0aWZpY2F0ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkxvY2FsZUlkcyIgdHlwZT0idWE6TGlzdE9mU3RyaW5nIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlcklk +ZW50aXR5VG9rZW4iIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJUb2tlblNpZ25hdHVy +ZSIgdHlwZT0idG5zOlNpZ25hdHVyZURhdGEiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iQWN0aXZhdGVTZXNzaW9uUmVxdWVzdCIgdHlwZT0idG5zOkFjdGl2YXRlU2Vzc2lv +blJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFjdGl2YXRlU2Vzc2lvblJl +c3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNw +b25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyTm9uY2UiIHR5cGU9 +InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJE +aWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxl +eFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkFjdGl2YXRlU2Vzc2lvblJlc3BvbnNlIiB0eXBl +PSJ0bnM6QWN0aXZhdGVTZXNzaW9uUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IkNsb3NlU2Vzc2lvblJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVs +ZXRlU3Vic2NyaXB0aW9ucyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkNsb3NlU2Vzc2lvblJlcXVlc3QiIHR5cGU9InRuczpDbG9zZVNlc3Npb25SZXF1ZXN0IiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDbG9zZVNlc3Npb25SZXNwb25zZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9 +InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJDbG9zZVNlc3Npb25SZXNwb25zZSIgdHlwZT0idG5zOkNsb3NlU2Vzc2lvblJlc3BvbnNlIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJDYW5jZWxSZXF1ZXN0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6 +UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlcXVlc3RIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iQ2FuY2VsUmVxdWVzdCIgdHlwZT0idG5zOkNhbmNlbFJlcXVlc3Qi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNhbmNlbFJlc3BvbnNlIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0i +dG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FuY2VsQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FuY2VsUmVzcG9uc2UiIHR5cGU9InRuczpDYW5jZWxSZXNw +b25zZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTm9kZUF0dHJpYnV0ZXNNYXNrIj4N +CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBY2Nl +c3NMZXZlbF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJheURpbWVuc2lv +bnNfMiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQnJvd3NlTmFtZV80IiAvPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluc05vTG9vcHNfOCIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVR5cGVfMTYiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IkRlc2NyaXB0aW9uXzMyIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJEaXNwbGF5TmFtZV82NCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRXZl +bnROb3RpZmllcl8xMjgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZWN1dGFi +bGVfMjU2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJIaXN0b3JpemluZ181MTIi +IC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkludmVyc2VOYW1lXzEwMjQiIC8+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IklzQWJzdHJhY3RfMjA0OCIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVNhbXBsaW5nSW50ZXJ2YWxfNDA5NiIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9kZUNsYXNzXzgxOTIiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9Ik5vZGVJZF8xNjM4NCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iU3ltbWV0cmljXzMyNzY4IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJVc2VyQWNjZXNzTGV2ZWxfNjU1MzYiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +IlVzZXJFeGVjdXRhYmxlXzEzMTA3MiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0i +VXNlcldyaXRlTWFza18yNjIxNDQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZh +bHVlUmFua181MjQyODgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldyaXRlTWFz +a18xMDQ4NTc2IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZV8yMDk3MTUy +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhVHlwZURlZmluaXRpb25fNDE5 +NDMwNCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUm9sZVBlcm1pc3Npb25zXzgz +ODg2MDgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2Vzc1Jlc3RyaWN0aW9u +c18xNjc3NzIxNiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsXzMzNTU0NDMx +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlTm9kZV8yNjUwMTIyMCIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT2JqZWN0XzI2NTAxMzQ4IiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RUeXBlXzI2NTAzMjY4IiAvPg0KICAgICAgPHhz +OmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYWJsZV8yNjU3MTM4MyIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iVmFyaWFibGVUeXBlXzI4NjAwNDM4IiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJNZXRob2RfMjY2MzI1NDgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IlJlZmVyZW5jZVR5cGVfMjY1MzcwNjAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9IlZpZXdfMjY1MDEzNTYiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpz +aW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQXR0cmlidXRlc01hc2siIHR5cGU9 +InRuczpOb2RlQXR0cmlidXRlc01hc2siIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5v +ZGVBdHRyaWJ1dGVzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTcGVjaWZpZWRBdHRyaWJ1dGVzIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlzcGxheU5hbWUiIHR5cGU9InVhOkxvY2Fs +aXplZFRleHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IldyaXRlTWFz +ayIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlVzZXJXcml0ZU1hc2siIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTm9kZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpOb2RlQXR0cmlidXRlcyIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0QXR0cmlidXRlcyI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJFdmVudE5vdGlmaWVyIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9u +Pg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ik9iamVjdEF0dHJpYnV0ZXMiIHR5cGU9InRuczpPYmplY3RBdHRyaWJ1dGVz +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJWYXJpYWJsZUF0dHJpYnV0ZXMiPg0KICAg +IDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBi +YXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFsdWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhVHlwZSIgdHlwZT0idWE6Tm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlZhbHVlUmFuayIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQXJyYXlEaW1lbnNpb25zIiB0eXBlPSJ1YTpMaXN0T2ZV +SW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQWNjZXNzTGV2ZWwiIHR5cGU9InhzOnVuc2lnbmVkQnl0ZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJBY2Nlc3NMZXZlbCIgdHlw +ZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iTWluaW11bVNhbXBsaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3Rvcml6aW5nIiB0eXBl +PSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQog +ICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJWYXJpYWJsZUF0dHJpYnV0ZXMiIHR5cGU9 +InRuczpWYXJpYWJsZUF0dHJpYnV0ZXMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1l +dGhvZEF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0K +ICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgICAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXhlY3V0YWJsZSIgdHlw +ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5h +bWU9IlVzZXJFeGVjdXRhYmxlIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNv +bXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJN +ZXRob2RBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6TWV0aG9kQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0VHlwZUF0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4 +Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9k +ZUF0dHJpYnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpj +b21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +T2JqZWN0VHlwZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpPYmplY3RUeXBlQXR0cmlidXRlcyIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVmFyaWFibGVUeXBlQXR0cmlidXRlcyI+DQogICAg +PHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJh +c2U9InRuczpOb2RlQXR0cmlidXRlcyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlIiB0eXBlPSJ1YTpOb2Rl +SWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVmFsdWVSYW5rIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheURpbWVuc2lvbnMiIHR5cGU9InVhOkxpc3RPZlVJ +bnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJJc0Fic3RyYWN0IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz +OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJWYXJpYWJsZVR5cGVBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6VmFyaWFibGVUeXBlQXR0cmlidXRl +cyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZUF0dHJpYnV0ZXMi +Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu +c2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNBYnN0cmFjdCIgdHlwZT0ieHM6Ym9vbGVhbiIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN5bW1ldHJpYyIg +dHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkludmVyc2VOYW1lIiB0eXBlPSJ1YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpl +eHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUF0dHJpYnV0ZXMiIHR5cGU9InRuczpS +ZWZlcmVuY2VUeXBlQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0 +YVR5cGVBdHRyaWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N +CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IklzQWJzdHJhY3QiIHR5 +cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4N +CiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRhdGFUeXBlQXR0cmlidXRlcyIgdHlw +ZT0idG5zOkRhdGFUeXBlQXR0cmlidXRlcyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +Vmlld0F0dHJpYnV0ZXMiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0K +ICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6Tm9kZUF0dHJpYnV0ZXMiPg0KICAgICAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGFpbnNOb0xvb3Bz +IiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iRXZlbnROb3RpZmllciIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAg +ICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJWaWV3QXR0cmlidXRlcyIgdHlwZT0idG5zOlZpZXdBdHRyaWJ1dGVzIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJHZW5lcmljQXR0cmlidXRlVmFsdWUiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlkIiB0eXBlPSJ4czp1 +bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVmFs +dWUiIHR5cGU9InVhOlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJHZW5lcmljQXR0cmli +dXRlVmFsdWUiIHR5cGU9InRuczpHZW5lcmljQXR0cmlidXRlVmFsdWUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iR2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiB0 +eXBlPSJ0bnM6R2VuZXJpY0F0dHJpYnV0ZVZhbHVlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZHZW5lcmljQXR0cmlidXRl +VmFsdWUiIHR5cGU9InRuczpMaXN0T2ZHZW5lcmljQXR0cmlidXRlVmFsdWUiIG5pbGxhYmxlPSJ0 +cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdlbmVyaWNBdHRy +aWJ1dGVzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4 +czpleHRlbnNpb24gYmFzZT0idG5zOk5vZGVBdHRyaWJ1dGVzIj4NCiAgICAgICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZVZhbHVlcyIgdHlwZT0i +dG5zOkxpc3RPZkdlbmVyaWNBdHRyaWJ1dGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IkdlbmVyaWNBdHRyaWJ1dGVzIiB0eXBlPSJ0bnM6R2VuZXJpY0F0dHJpYnV0ZXMi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFkZE5vZGVzSXRlbSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyZW50Tm9kZUlkIiB0eXBlPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVz +dGVkTmV3Tm9kZUlkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5hbWUiIHR5cGU9 +InVhOlF1YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlQ2xhc3MiIHR5cGU9InRuczpOb2RlQ2xhc3MiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVBdHRyaWJ1dGVzIiB0eXBl +PSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUeXBlRGVmaW5pdGlvbiIgdHlwZT0idWE6RXhwYW5kZWRO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkTm9kZXNJdGVt +IiB0eXBlPSJ0bnM6QWRkTm9kZXNJdGVtIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJM +aXN0T2ZBZGROb2Rlc0l0ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkFkZE5vZGVzSXRlbSIgdHlwZT0idG5zOkFkZE5vZGVzSXRlbSIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQWRk +Tm9kZXNJdGVtIiB0eXBlPSJ0bnM6TGlzdE9mQWRkTm9kZXNJdGVtIiBuaWxsYWJsZT0idHJ1ZSI+ +PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGROb2Rlc1Jlc3VsdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIg +dHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iQWRkZWROb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJBZGROb2Rlc1Jlc3VsdCIgdHlwZT0idG5zOkFkZE5vZGVzUmVzdWx0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBZGROb2Rlc1Jlc3VsdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkTm9kZXNSZXN1bHQi +IHR5cGU9InRuczpBZGROb2Rlc1Jlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91 +bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQWRkTm9kZXNSZXN1bHQiIHR5cGU9 +InRuczpMaXN0T2ZBZGROb2Rlc1Jlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkTm9kZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6 +UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5vZGVzVG9BZGQiIHR5cGU9InRuczpMaXN0T2ZBZGROb2Rlc0l0ZW0i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQWRkTm9kZXNSZXF1ZXN0IiB0 +eXBlPSJ0bnM6QWRkTm9kZXNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJB +ZGROb2Rlc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIg +dHlwZT0idG5zOkxpc3RPZkFkZE5vZGVzUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1 +YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJBZGROb2Rlc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6QWRkTm9kZXNSZXNwb25zZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWRkUmVmZXJlbmNlc0l0ZW0iPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNvdXJjZU5vZGVJZCIgdHlwZT0idWE6Tm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9 +InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRh +cmdldFNlcnZlclVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Tm9kZUlkIiB0eXBlPSJ1YTpF +eHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRhcmdldE5vZGVDbGFzcyIgdHlwZT0idG5zOk5vZGVDbGFzcyIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6QWRkUmVmZXJl +bmNlc0l0ZW0iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFkZFJlZmVyZW5j +ZXNJdGVtIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRS +ZWZlcmVuY2VzSXRlbSIgdHlwZT0idG5zOkFkZFJlZmVyZW5jZXNJdGVtIiBtaW5PY2N1cnM9IjAi +IG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBZGRS +ZWZlcmVuY2VzSXRlbSIgdHlwZT0idG5zOkxpc3RPZkFkZFJlZmVyZW5jZXNJdGVtIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGRSZWZl +cmVuY2VzUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VzVG9B +ZGQiIHR5cGU9InRuczpMaXN0T2ZBZGRSZWZlcmVuY2VzSXRlbSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRSZWZlcmVuY2VzUmVxdWVzdCIgdHlwZT0idG5zOkFkZFJl +ZmVyZW5jZXNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZGRSZWZlcmVu +Y2VzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBl +PSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZE +aWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZGRS +ZWZlcmVuY2VzUmVzcG9uc2UiIHR5cGU9InRuczpBZGRSZWZlcmVuY2VzUmVzcG9uc2UiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRlbGV0ZU5vZGVzSXRlbSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJE +ZWxldGVUYXJnZXRSZWZlcmVuY2VzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iRGVsZXRlTm9kZXNJdGVtIiB0eXBlPSJ0bnM6RGVsZXRlTm9kZXNJdGVtIiAvPg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEZWxldGVOb2Rlc0l0ZW0iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZU5vZGVzSXRlbSIgdHlwZT0i +dG5zOkRlbGV0ZU5vZGVzSXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGVsZXRlTm9kZXNJdGVtIiB0eXBlPSJ0bnM6 +TGlzdE9mRGVsZXRlTm9kZXNJdGVtIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQog +IDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVOb2Rlc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpS +ZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iTm9kZXNUb0RlbGV0ZSIgdHlwZT0idG5zOkxpc3RPZkRlbGV0ZU5vZGVz +SXRlbSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVOb2Rlc1Jl +cXVlc3QiIHR5cGU9InRuczpEZWxldGVOb2Rlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkRlbGV0ZU5vZGVzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFk +ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9z +IiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJEZWxldGVOb2Rlc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6RGVsZXRlTm9kZXNS +ZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVsZXRlUmVmZXJlbmNlc0l0 +ZW0iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNvdXJjZU5v +ZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJJc0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlRhcmdldE5vZGVJZCIgdHlwZT0idWE6RXhwYW5kZWROb2RlSWQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJE +ZWxldGVCaWRpcmVjdGlvbmFsIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIHR5cGU9InRuczpEZWxldGVSZWZlcmVuY2VzSXRlbSIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGVsZXRlUmVmZXJlbmNlc0l0ZW0i +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZVJlZmVy +ZW5jZXNJdGVtIiB0eXBlPSJ0bnM6RGVsZXRlUmVmZXJlbmNlc0l0ZW0iIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkRlbGV0 +ZVJlZmVyZW5jZXNJdGVtIiB0eXBlPSJ0bnM6TGlzdE9mRGVsZXRlUmVmZXJlbmNlc0l0ZW0iIG5p +bGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRl +bGV0ZVJlZmVyZW5jZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVy +ZW5jZXNUb0RlbGV0ZSIgdHlwZT0idG5zOkxpc3RPZkRlbGV0ZVJlZmVyZW5jZXNJdGVtIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNSZXF1ZXN0 +IiB0eXBlPSJ0bnM6RGVsZXRlUmVmZXJlbmNlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGlj +SW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IkRlbGV0ZVJlZmVyZW5jZXNSZXNwb25zZSIgdHlwZT0idG5zOkRl +bGV0ZVJlZmVyZW5jZXNSZXNwb25zZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iQXR0 +cmlidXRlV3JpdGVNYXNrIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJ +bnQiPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iQXR0cmlidXRlV3JpdGVNYXNrIiB0eXBlPSJ0bnM6QXR0cmlidXRlV3JpdGVN +YXNrIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJCcm93c2VEaXJlY3Rpb24iPg0KICAg +IDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJGb3J3YXJkXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkludmVy +c2VfMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQm90aF8yIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZhbGlkXzMiIC8+DQogICAgPC94czpyZXN0cmljdGlv +bj4NCiAgPC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VEaXJlY3Rp +b24iIHR5cGU9InRuczpCcm93c2VEaXJlY3Rpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IlZpZXdEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iVmlld0lkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXAiIHR5cGU9InhzOmRh +dGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3VmVy +c2lvbiIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJWaWV3RGVz +Y3JpcHRpb24iIHR5cGU9InRuczpWaWV3RGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IkJyb3dzZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZURpcmVjdGlv +biIgdHlwZT0idG5zOkJyb3dzZURpcmVjdGlvbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmNsdWRl +U3VidHlwZXMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik5vZGVDbGFzc01hc2siIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRNYXNrIiB0eXBlPSJ4czp1 +bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZURlc2NyaXB0aW9uIiB0eXBl +PSJ0bnM6QnJvd3NlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxp +c3RPZkJyb3dzZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJCcm93c2VEZXNjcmlwdGlvbiIgdHlwZT0idG5zOkJyb3dzZURlc2NyaXB0aW9u +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJMaXN0T2ZCcm93c2VEZXNjcmlwdGlvbiIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZURlc2Ny +aXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpzaW1wbGVUeXBl +ICBuYW1lPSJCcm93c2VSZXN1bHRNYXNrIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6 +c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VUeXBlSWRfMSIgLz4NCiAgICAgIDx4czpl +bnVtZXJhdGlvbiB2YWx1ZT0iSXNGb3J3YXJkXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24g +dmFsdWU9Ik5vZGVDbGFzc180IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCcm93 +c2VOYW1lXzgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BsYXlOYW1lXzE2 +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlRGVmaW5pdGlvbl8zMiIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsXzYzIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VUeXBlSW5mb18zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJUYXJnZXRJbmZvXzYwIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwv +eHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUmVzdWx0TWFzayIgdHlw +ZT0idG5zOkJyb3dzZVJlc3VsdE1hc2siIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJl +ZmVyZW5jZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWZlcmVuY2VUeXBlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklzRm9yd2FyZCIgdHlw +ZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +Tm9kZUlkIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZU5hbWUiIHR5cGU9InVhOlF1 +YWxpZmllZE5hbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVD +bGFzcyIgdHlwZT0idG5zOk5vZGVDbGFzcyIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iVHlwZURlZmluaXRpb24iIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlkIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6 +Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZURlc2NyaXB0aW9uIiB0 +eXBlPSJ0bnM6UmVmZXJlbmNlRGVzY3JpcHRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZlJlZmVyZW5jZURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlJlZmVy +ZW5jZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWZlcmVuY2VEZXNjcmlwdGlvbiIgdHlwZT0idG5z +Okxpc3RPZlJlZmVyZW5jZURlc2NyaXB0aW9uIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50 +Pg0KDQogIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNl +NjRCaW5hcnkiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZVJlc3VsdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlw +ZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZXMi +IHR5cGU9InRuczpMaXN0T2ZSZWZlcmVuY2VEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VSZXN1bHQiIHR5cGU9InRuczpCcm93c2VSZXN1bHQi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkJyb3dzZVJlc3VsdCI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUmVzdWx0IiB0eXBl +PSJ0bnM6QnJvd3NlUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZCcm93c2VSZXN1bHQiIHR5cGU9InRuczpMaXN0 +T2ZCcm93c2VSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkJyb3dzZVJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVmlldyIgdHlwZT0idG5zOlZpZXdEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZE1heFJlZmVyZW5j +ZXNQZXJOb2RlIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTm9kZXNUb0Jyb3dzZSIgdHlwZT0idG5zOkxpc3RPZkJyb3dzZURl +c2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVJl +cXVlc3QiIHR5cGU9InRuczpCcm93c2VSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJCcm93c2VSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Vs +dHMiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9 +InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkJyb3dzZVJlc3BvbnNlIiB0eXBlPSJ0bnM6QnJvd3NlUmVzcG9uc2UiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IkJyb3dzZU5leHRSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVx +dWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlbGVhc2VDb250aW51YXRpb25Qb2ludHMiIHR5cGU9InhzOmJvb2xlYW4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBv +aW50cyIgdHlwZT0idWE6TGlzdE9mQnl0ZVN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJCcm93c2VOZXh0UmVxdWVzdCIgdHlwZT0idG5zOkJyb3dzZU5leHRSZXF1 +ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm93c2VOZXh0UmVzcG9uc2UiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVy +IiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mQnJv +d3NlUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5m +byIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VOZXh0UmVzcG9u +c2UiIHR5cGU9InRuczpCcm93c2VOZXh0UmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlJlbGF0aXZlUGF0aEVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNJbnZl +cnNlIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJJbmNsdWRlU3VidHlwZXMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRhcmdldE5hbWUiIHR5cGU9InVhOlF1YWxpZmll +ZE5hbWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVsYXRpdmVQYXRo +RWxlbWVudCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aEVsZW1lbnQiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ikxpc3RPZlJlbGF0aXZlUGF0aEVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbGF0aXZlUGF0aEVsZW1lbnQiIHR5cGU9InRu +czpSZWxhdGl2ZVBhdGhFbGVtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWxhdGl2ZVBhdGhFbGVtZW50IiB0eXBl +PSJ0bnM6TGlzdE9mUmVsYXRpdmVQYXRoRWxlbWVudCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxl +bWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVsYXRpdmVQYXRoIj4NCiAgICA8eHM6 +c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbGVtZW50cyIgdHlwZT0idG5zOkxp +c3RPZlJlbGF0aXZlUGF0aEVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iUmVsYXRpdmVQYXRoIiB0eXBlPSJ0bnM6UmVsYXRpdmVQYXRoIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJCcm93c2VQYXRoIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJTdGFydGluZ05vZGUiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbGF0aXZl +UGF0aCIgdHlwZT0idG5zOlJlbGF0aXZlUGF0aCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJCcm93c2VQYXRoIiB0eXBlPSJ0bnM6QnJvd3NlUGF0aCIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQnJvd3NlUGF0aCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aCIgdHlwZT0idG5zOkJyb3dzZVBhdGgi +IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9Ikxpc3RPZkJyb3dzZVBhdGgiIHR5cGU9InRuczpMaXN0T2ZCcm93c2VQYXRoIiBuaWxsYWJs +ZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJCcm93c2VQ +YXRoVGFyZ2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJU +YXJnZXRJZCIgdHlwZT0idWE6RXhwYW5kZWROb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZW1haW5pbmdQYXRoSW5kZXgiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aFRhcmdl +dCIgdHlwZT0idG5zOkJyb3dzZVBhdGhUYXJnZXQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZkJyb3dzZVBhdGhUYXJnZXQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGhUYXJnZXQiIHR5cGU9InRuczpCcm93c2VQYXRoVGFy +Z2V0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZCcm93c2VQYXRoVGFyZ2V0IiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3NlUGF0 +aFRhcmdldCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iQnJvd3NlUGF0aFJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iU3RhdHVzQ29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFyZ2V0cyIgdHlwZT0idG5zOkxpc3RP +ZkJyb3dzZVBhdGhUYXJnZXQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +QnJvd3NlUGF0aFJlc3VsdCIgdHlwZT0idG5zOkJyb3dzZVBhdGhSZXN1bHQiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkJyb3dzZVBhdGhSZXN1bHQiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGhSZXN1bHQiIHR5cGU9InRu +czpCcm93c2VQYXRoUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZCcm93c2VQYXRoUmVzdWx0IiB0eXBlPSJ0bnM6 +TGlzdE9mQnJvd3NlUGF0aFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNsYXRlQnJvd3NlUGF0aHNUb05vZGVJZHNSZXF1 +ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0 +SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJyb3dzZVBhdGhzIiB0eXBlPSJ0bnM6 +TGlzdE9mQnJvd3NlUGF0aCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJU +cmFuc2xhdGVCcm93c2VQYXRoc1RvTm9kZUlkc1JlcXVlc3QiIHR5cGU9InRuczpUcmFuc2xhdGVC +cm93c2VQYXRoc1RvTm9kZUlkc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVz +cG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mQnJvd3NlUGF0aFJlc3VsdCIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNsYXRlQnJvd3NlUGF0aHNUb05vZGVJ +ZHNSZXNwb25zZSIgdHlwZT0idG5zOlRyYW5zbGF0ZUJyb3dzZVBhdGhzVG9Ob2RlSWRzUmVzcG9u +c2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyTm9kZXNSZXF1ZXN0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVy +IiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVzVG9SZWdpc3RlciIgdHlwZT0idWE6TGlz +dE9mTm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZ2lzdGVy +Tm9kZXNSZXF1ZXN0IiB0eXBlPSJ0bnM6UmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lzdGVyTm9kZXNSZXNwb25zZSI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpS +ZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlZ2lzdGVyZWROb2RlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZOb2RlSWQi +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0ZXJOb2Rlc1Jlc3Bv +bnNlIiB0eXBlPSJ0bnM6UmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJVbnJlZ2lzdGVyTm9kZXNSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik5vZGVzVG9VbnJlZ2lzdGVyIiB0eXBlPSJ1YTpMaXN0T2ZOb2RlSWQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVW5yZWdpc3Rlck5vZGVzUmVxdWVzdCIgdHlw +ZT0idG5zOlVucmVnaXN0ZXJOb2Rlc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IlVucmVnaXN0ZXJOb2Rlc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVucmVnaXN0ZXJOb2Rlc1Jl +c3BvbnNlIiB0eXBlPSJ0bnM6VW5yZWdpc3Rlck5vZGVzUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ291bnRlciIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIC8+DQoNCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTnVtZXJpY1JhbmdlIiB0eXBlPSJ4czpzdHJpbmciIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iT3BlcmF0aW9uVGltZW91dCIgdHlwZT0ieHM6aW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VCaW5hcnlFbmNv +ZGluZyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iTWF4U3RyaW5nTGVuZ3RoIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heEJ5dGVTdHJpbmdMZW5ndGgiIHR5cGU9InhzOmlu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QXJyYXlMZW5n +dGgiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTWF4TWVzc2FnZVNpemUiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTWF4QnVmZmVyU2l6ZSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDaGFubmVsTGlmZXRpbWUiIHR5cGU9Inhz +OmludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlU +b2tlbkxpZmV0aW1lIiB0eXBlPSJ4czppbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRwb2lu +dENvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpFbmRwb2ludENvbmZpZ3VyYXRpb24iIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkVuZHBvaW50Q29uZmlndXJhdGlvbiI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRDb25maWd1cmF0 +aW9uIiB0eXBlPSJ0bnM6RW5kcG9pbnRDb25maWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9j +Y3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZFbmRwb2ludENv +bmZpZ3VyYXRpb24iIHR5cGU9InRuczpMaXN0T2ZFbmRwb2ludENvbmZpZ3VyYXRpb24iIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlF1ZXJ5 +RGF0YURlc2NyaXB0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZWxhdGl2ZVBhdGgiIHR5cGU9InRuczpSZWxhdGl2ZVBhdGgiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJRdWVyeURhdGFEZXNjcmlwdGlvbiIgdHlwZT0idG5zOlF1ZXJ5RGF0 +YURlc2NyaXB0aW9uIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZRdWVyeURh +dGFEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpRdWVyeURhdGFEZXNjcmlwdGlvbiIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFE +ZXNjcmlwdGlvbiIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBhbmRl +ZE5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluY2x1ZGVTdWJUeXBlcyIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YVRvUmV0dXJuIiB0eXBlPSJ0bnM6TGlz +dE9mUXVlcnlEYXRhRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iTm9kZVR5cGVEZXNjcmlwdGlvbiIgdHlwZT0idG5zOk5vZGVUeXBlRGVzY3JpcHRpb24i +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5vZGVUeXBlRGVzY3JpcHRpb24i +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVUeXBlRGVz +Y3JpcHRpb24iIHR5cGU9InRuczpOb2RlVHlwZURlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG1h +eE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZOb2RlVHlw +ZURlc2NyaXB0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRmlsdGVy +T3BlcmF0b3IiPg0KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVhbHNfMCIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iSXNOdWxsXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0 +ZXJUaGFuXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuXzMiIC8+ +DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0ZXJUaGFuT3JFcXVhbF80IiAvPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbk9yRXF1YWxfNSIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTGlrZV82IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9u +IHZhbHVlPSJOb3RfNyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQmV0d2Vlbl84 +IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbkxpc3RfOSIgLz4NCiAgICAgIDx4 +czplbnVtZXJhdGlvbiB2YWx1ZT0iQW5kXzEwIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJPcl8xMSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzdF8xMiIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW5WaWV3XzEzIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJPZlR5cGVfMTQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFs +dWU9IlJlbGF0ZWRUb18xNSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0d2lz +ZUFuZF8xNiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQml0d2lzZU9yXzE3IiAv +Pg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iRmlsdGVyT3BlcmF0b3IiIHR5cGU9InRuczpGaWx0ZXJPcGVyYXRvciIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUXVlcnlEYXRhU2V0Ij4NCiAgICA8eHM6c2VxdWVuY2U+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2RlSWQiIHR5cGU9InVhOkV4cGFuZGVkTm9kZUlk +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVHlwZURlZmluaXRpb25Ob2RlIiB0eXBlPSJ1YTpFeHBhbmRlZE5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlcyIg +dHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJRdWVyeURhdGFTZXQiIHR5cGU9InRuczpRdWVyeURhdGFTZXQiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlF1ZXJ5RGF0YVNldCI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlEYXRhU2V0IiB0eXBlPSJ0bnM6UXVlcnlEYXRh +U2V0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJMaXN0T2ZRdWVyeURhdGFTZXQiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFTZXQi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ik5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik5vZGVJZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlVHlwZUlkIiB0eXBlPSJ1YTpO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJJc0ZvcndhcmQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZWROb2RlSWRzIiB0eXBlPSJ1YTpMaXN0T2ZO +b2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVJlZmVyZW5j +ZSIgdHlwZT0idG5zOk5vZGVSZWZlcmVuY2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ikxpc3RPZk5vZGVSZWZlcmVuY2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9Ik5vZGVSZWZlcmVuY2UiIHR5cGU9InRuczpOb2RlUmVmZXJlbmNlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZOb2RlUmVmZXJlbmNlIiB0eXBlPSJ0bnM6TGlzdE9mTm9kZVJlZmVyZW5jZSIgbmlsbGFibGU9 +InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ29udGVudEZp +bHRlckVsZW1lbnQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkZpbHRlck9wZXJhdG9yIiB0eXBlPSJ0bnM6RmlsdGVyT3BlcmF0b3IiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmRzIiB0eXBlPSJ1YTpMaXN0 +T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +Q29udGVudEZpbHRlckVsZW1lbnQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRGaWx0ZXJF +bGVtZW50IiB0eXBlPSJ0bnM6Q29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRlbnRG +aWx0ZXJFbGVtZW50IiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG5pbGxh +YmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRl +bnRGaWx0ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVs +ZW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlckVsZW1lbnQiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlciIgdHlwZT0idG5zOkNvbnRl +bnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRlbnRGaWx0 +ZXIiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRlbnRG +aWx0ZXIiIHR5cGU9InRuczpDb250ZW50RmlsdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0i +dW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyIiB0 +eXBlPSJ0bnM6TGlzdE9mQ29udGVudEZpbHRlciIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRmlsdGVyT3BlcmFuZCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IkZpbHRlck9wZXJhbmQiIHR5cGU9InRuczpGaWx0ZXJPcGVyYW5kIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFbGVtZW50T3BlcmFuZCI+DQogICAgPHhzOmNvbXBs +ZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpG +aWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluZGV4IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpj +b21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +RWxlbWVudE9wZXJhbmQiIHR5cGU9InRuczpFbGVtZW50T3BlcmFuZCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iTGl0ZXJhbE9wZXJhbmQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBt +aXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6RmlsdGVyT3BlcmFu +ZCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJW +YWx1ZSIgdHlwZT0idWE6VmFyaWFudCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICA8L3hzOnNl +cXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGl0ZXJhbE9wZXJhbmQi +IHR5cGU9InRuczpMaXRlcmFsT3BlcmFuZCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +QXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+ +DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIgdHlwZT0i +dWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkFsaWFzIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlUGF0aCIg +dHlwZT0idG5zOlJlbGF0aXZlUGF0aCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0ieHM6dW5zaWdu +ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRl +eFJhbmdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hz +OmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6QXR0cmlidXRlT3BlcmFuZCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iU2ltcGxlQXR0cmlidXRlT3BlcmFuZCI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpGaWx0ZXJPcGVyYW5kIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlR5cGVEZWZpbml0aW9uSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93 +c2VQYXRoIiB0eXBlPSJ1YTpMaXN0T2ZRdWFsaWZpZWROYW1lIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkF0dHJpYnV0ZUlkIiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIHR5cGU9InRuczpTaW1wbGVB +dHRyaWJ1dGVPcGVyYW5kIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaW1w +bGVBdHRyaWJ1dGVPcGVyYW5kIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTaW1wbGVBdHRyaWJ1dGVPcGVyYW5kIiB0eXBlPSJ0bnM6U2ltcGxlQXR0cmlidXRl +T3BlcmFuZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mU2ltcGxlQXR0cmlidXRlT3BlcmFuZCIgdHlwZT0idG5zOkxpc3RP +ZlNpbXBsZUF0dHJpYnV0ZU9wZXJhbmQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBl +PSJ1YTpTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJPcGVyYW5kU3RhdHVzQ29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPcGVyYW5k +RGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIg +dHlwZT0idG5zOkNvbnRlbnRGaWx0ZXJFbGVtZW50UmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGVudEZpbHRlckVsZW1lbnRSZXN1 +bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29udGVu +dEZpbHRlckVsZW1lbnRSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZDb250ZW50RmlsdGVyRWxlbWVu +dFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iQ29udGVudEZpbHRlclJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iRWxlbWVudFJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZDb250ZW50 +RmlsdGVyRWxlbWVudFJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkVsZW1lbnREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxp +c3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkNvbnRlbnRGaWx0ZXJSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQYXJzaW5nUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXND +b2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhU3RhdHVz +Q29kZXMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhRGlhZ25vc3RpY0luZm9zIiB0 +eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJQYXJzaW5nUmVzdWx0IiB0eXBlPSJ0bnM6UGFyc2luZ1Jlc3VsdCIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFyc2luZ1Jlc3VsdCI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdCIgdHlwZT0idG5z +OlBhcnNpbmdSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlBhcnNpbmdSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZQ +YXJzaW5nUmVzdWx0IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJRdWVyeUZpcnN0UmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFk +ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJWaWV3IiB0eXBlPSJ0bnM6Vmlld0Rlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZVR5cGVzIiB0eXBlPSJ0 +bnM6TGlzdE9mTm9kZVR5cGVEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkZpbHRlciIgdHlwZT0idG5zOkNvbnRlbnRG +aWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJNYXhEYXRhU2V0c1RvUmV0dXJuIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4UmVmZXJlbmNlc1RvUmV0dXJu +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlF1ZXJ5Rmlyc3RS +ZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9IlF1ZXJ5Rmlyc3RSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlF1ZXJ5RGF0YVNldHMiIHR5cGU9InRuczpMaXN0T2ZRdWVyeURhdGFTZXQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb250aW51 +YXRpb25Qb2ludCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFyc2luZ1Jlc3VsdHMiIHR5cGU9 +InRuczpMaXN0T2ZQYXJzaW5nUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0 +T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkZpbHRlclJlc3VsdCIgdHlwZT0idG5zOkNvbnRlbnRGaWx0ZXJS +ZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlGaXJzdFJl +c3BvbnNlIiB0eXBlPSJ0bnM6UXVlcnlGaXJzdFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJRdWVyeU5leHRSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlJlbGVhc2VDb250aW51YXRpb25Qb2ludCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9Inhz +OmJhc2U2NEJpbmFyeSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJRdWVy +eU5leHRSZXF1ZXN0IiB0eXBlPSJ0bnM6UXVlcnlOZXh0UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VI +ZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJRdWVyeURhdGFTZXRzIiB0eXBlPSJ0bnM6TGlzdE9mUXVlcnlEYXRhU2V0IiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2 +aXNlZENvbnRpbnVhdGlvblBvaW50IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUXVlcnlOZXh0UmVzcG9uc2UiIHR5cGU9InRuczpR +dWVyeU5leHRSZXNwb25zZSIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iVGltZXN0YW1w +c1RvUmV0dXJuIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlXzAiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IlNlcnZlcl8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCb3Ro +XzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5laXRoZXJfMyIgLz4NCiAgICAg +IDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSW52YWxpZF80IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rp +b24+DQogIDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iVGltZXN0YW1wc1Rv +UmV0dXJuIiB0eXBlPSJ0bnM6VGltZXN0YW1wc1RvUmV0dXJuIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdHRyaWJ1dGVJZCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6UXVh +bGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkVmFs +dWVJZCIgdHlwZT0idG5zOlJlYWRWYWx1ZUlkIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZSZWFkVmFsdWVJZCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVhZFZhbHVlSWQiIHR5cGU9InRuczpSZWFkVmFsdWVJZCIgbWluT2NjdXJzPSIw +IiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVh +ZFZhbHVlSWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIgbmlsbGFibGU9InRydWUiPjwv +eHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFJlcXVlc3QiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5 +cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4QWdlIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpbWVzdGFtcHNUb1JldHVybiIgdHlw +ZT0idG5zOlRpbWVzdGFtcHNUb1JldHVybiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTm9kZXNUb1JlYWQiIHR5cGU9InRuczpMaXN0T2ZSZWFkVmFsdWVJZCIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hz +OmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkUmVxdWVzdCIgdHlwZT0idG5z +OlJlYWRSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmVzcG9uc2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZE +YXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZv +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRSZXNwb25zZSIgdHlw +ZT0idG5zOlJlYWRSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9y +eVJlYWRWYWx1ZUlkIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJOb2RlSWQiIHR5cGU9InVhOk5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4UmFuZ2UiIHR5cGU9InhzOnN0cmluZyIg +bWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRhdGFFbmNvZGluZyIgdHlwZT0idWE6UXVhbGlmaWVkTmFtZSIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNvbnRpbnVhdGlvblBvaW50 +IiB0eXBlPSJ4czpiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQg +bmFtZT0iSGlzdG9yeVJlYWRWYWx1ZUlkIiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRWYWx1ZUlkIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZIaXN0b3J5UmVhZFZhbHVlSWQiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkVmFs +dWVJZCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkVmFsdWVJZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1 +cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAg +PC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVJlYWRW +YWx1ZUlkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRWYWx1ZUlkIiBuaWxsYWJsZT0idHJ1 +ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVhZFJl +c3VsdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVz +Q29kZSIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQ29udGludWF0aW9uUG9pbnQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhp +c3RvcnlEYXRhIiB0eXBlPSJ1YTpFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAg +PHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXN1bHQiIHR5cGU9InRuczpIaXN0b3J5UmVh +ZFJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGlzdG9yeVJlYWRS +ZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3Rv +cnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6SGlzdG9yeVJlYWRSZXN1bHQiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkhpc3Rv +cnlSZWFkUmVzdWx0IiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRSZXN1bHQiIG5pbGxhYmxl +PSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlS +ZWFkRGV0YWlscyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkRGV0YWlscyIg +dHlwZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iUmVhZEV2ZW50RGV0YWlscyI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxz +ZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5UmVhZERldGFpbHMiPg0K +ICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTnVtVmFs +dWVzUGVyTm9kZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kVGltZSIgdHlwZT0i +eHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJGaWx0ZXIiIHR5cGU9InRuczpFdmVudEZpbHRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0K +ICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlJlYWRFdmVudERldGFpbHMiIHR5cGU9InRuczpSZWFkRXZlbnREZXRhaWxzIiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZWFkUmF3TW9kaWZpZWREZXRhaWxzIj4NCiAg +ICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24g +YmFzZT0idG5zOkhpc3RvcnlSZWFkRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJc1JlYWRNb2RpZmllZCIgdHlwZT0ieHM6Ym9vbGVh +biIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGlt +ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik51bVZhbHVlc1Blck5vZGUiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmV0dXJuQm91bmRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAg +IDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhD +b250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFkUmF3 +TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6UmVhZFJhd01vZGlmaWVkRGV0YWlscyIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVhZFByb2Nlc3NlZERldGFpbHMiPg0KICAgIDx4czpj +b21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0 +bnM6SGlzdG9yeVJlYWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpk +YXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlBy +b2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIgdHlwZT0idWE6TGlzdE9mTm9k +ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25m +aWd1cmF0aW9uIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hz +OnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVu +dD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZFByb2Nlc3Nl +ZERldGFpbHMiIHR5cGU9InRuczpSZWFkUHJvY2Vzc2VkRGV0YWlscyIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iUmVhZEF0VGltZURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVJl +YWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVc2VTaW1wbGVC +b3VuZHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlYWRBdFRpbWVEZXRh +aWxzIiB0eXBlPSJ0bnM6UmVhZEF0VGltZURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiPg0KICAgIDx4czpjb21wbGV4Q29udGVu +dCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVJl +YWREZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlJlYWRBbm5vdGF0aW9uRGF0YURldGFpbHMiIHR5cGU9InRuczpS +ZWFkQW5ub3RhdGlvbkRhdGFEZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJI +aXN0b3J5RGF0YSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RGF0YVZhbHVlcyIgdHlwZT0idWE6TGlzdE9mRGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlEYXRhIiB0eXBlPSJ0bnM6SGlzdG9yeURhdGEiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmaWNhdGlvblRpbWUiIHR5cGU9 +InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJV +cGRhdGVUeXBlIiB0eXBlPSJ0bnM6SGlzdG9yeVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZpY2F0aW9uSW5mbyIgdHlwZT0i +dG5zOk1vZGlmaWNhdGlvbkluZm8iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RP +Zk1vZGlmaWNhdGlvbkluZm8iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1vZGlmaWNhdGlvbkluZm8iIHR5cGU9InRuczpNb2RpZmljYXRpb25JbmZvIiBtaW5P +Y2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJM +aXN0T2ZNb2RpZmljYXRpb25JbmZvIiB0eXBlPSJ0bnM6TGlzdE9mTW9kaWZpY2F0aW9uSW5mbyIg +bmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +SGlzdG9yeU1vZGlmaWVkRGF0YSI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxz +ZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpIaXN0b3J5RGF0YSI+DQogICAgICAg +IDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZmljYXRpb25J +bmZvcyIgdHlwZT0idG5zOkxpc3RPZk1vZGlmaWNhdGlvbkluZm8iIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVu +c2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5TW9kaWZpZWREYXRhIiB0eXBlPSJ0bnM6SGlzdG9yeU1v +ZGlmaWVkRGF0YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudHMiIHR5cGU9 +InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhz +OmVsZW1lbnQgbmFtZT0iSGlzdG9yeUV2ZW50IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50IiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5UmVhZFJlcXVlc3QiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRu +czpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWREZXRhaWxzIiB0eXBlPSJ1YTpFeHRlbnNpb25P +YmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpUaW1lc3RhbXBzVG9SZXR1cm4i +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbGVhc2VDb250aW51 +YXRpb25Qb2ludHMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik5vZGVzVG9SZWFkIiB0eXBlPSJ0bnM6TGlzdE9mSGlzdG9yeVJlYWRW +YWx1ZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFk +UmVxdWVzdCIgdHlwZT0idG5zOkhpc3RvcnlSZWFkUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhl +YWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5UmVhZFJlc3VsdCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVJlYWRSZXNwb25zZSIgdHlwZT0idG5zOkhp +c3RvcnlSZWFkUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IldyaXRlVmFs +dWUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5vZGVJZCIg +dHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iQXR0cmlidXRlSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleFJhbmdlIiB0eXBlPSJ4 +czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0idWE6RGF0YVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IldyaXRlVmFsdWUiIHR5cGU9InRuczpXcml0ZVZhbHVlIiAvPg0K +DQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZXcml0ZVZhbHVlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJXcml0ZVZhbHVlIiB0eXBlPSJ0bnM6V3Jp +dGVWYWx1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iTGlzdE9mV3JpdGVWYWx1ZSIgdHlwZT0idG5zOkxpc3RPZldyaXRlVmFsdWUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IldyaXRlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb2Rlc1RvV3JpdGUi +IHR5cGU9InRuczpMaXN0T2ZXcml0ZVZhbHVlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IldyaXRlUmVxdWVzdCIgdHlwZT0idG5zOldyaXRlUmVxdWVzdCIgLz4NCg0KICA8 +eHM6Y29tcGxleFR5cGUgbmFtZT0iV3JpdGVSZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25z +ZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGlj +SW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IldyaXRlUmVzcG9uc2UiIHR5cGU9InRuczpXcml0ZVJlc3BvbnNl +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm9kZUlkIiB0eXBlPSJ1 +YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeVVw +ZGF0ZURldGFpbHMiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlRGV0YWlscyIgLz4NCg0KICA8eHM6 +c2ltcGxlVHlwZSAgbmFtZT0iSGlzdG9yeVVwZGF0ZVR5cGUiPg0KICAgIDx4czpyZXN0cmljdGlv +biBiYXNlPSJ4czpzdHJpbmciPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNlcnRf +MSIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZV8yIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGVfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlv +biB2YWx1ZT0iRGVsZXRlXzQiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1w +bGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlVHlwZSIgdHlwZT0idG5z +Okhpc3RvcnlVcGRhdGVUeXBlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJQZXJmb3Jt +VXBkYXRlVHlwZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAg +ICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2VydF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJSZXBsYWNlXzIiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVw +ZGF0ZV8zIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmVfNCIgLz4NCiAg +ICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlBlcmZvcm1VcGRhdGVUeXBlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIj4NCiAgICA8eHM6Y29t +cGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5z +Okhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNlcnRSZXBsYWNlIiB0eXBlPSJ0bnM6UGVyZm9y +bVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZkRhdGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0 +ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlRGF0 +YURldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZVN0cnVjdHVyZURh +dGFEZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAg +IDx4czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlBlcmZvcm1JbnNlcnRS +ZXBsYWNlIiB0eXBlPSJ0bnM6UGVyZm9ybVVwZGF0ZVR5cGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJVcGRhdGVWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZkRh +dGFWYWx1ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpz +ZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlVwZGF0ZVN0cnVjdHVy +ZURhdGFEZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlU3RydWN0dXJlRGF0YURldGFpbHMiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlVwZGF0ZUV2ZW50RGV0YWlscyI+DQogICAgPHhzOmNv +bXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRu +czpIaXN0b3J5VXBkYXRlRGV0YWlscyI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJmb3JtSW5zZXJ0UmVwbGFjZSIgdHlwZT0idG5zOlBlcmZv +cm1VcGRhdGVUeXBlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRmlsdGVyIiB0eXBlPSJ0bnM6RXZlbnRGaWx0ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnREYXRhIiB0eXBlPSJ0 +bnM6TGlzdE9mSGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQog +ICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iVXBkYXRlRXZlbnREZXRhaWxzIiB0eXBlPSJ0bnM6VXBkYXRlRXZlbnREZXRhaWxz +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVSYXdNb2RpZmllZERldGFpbHMi +Pg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVu +c2lvbiBiYXNlPSJ0bnM6SGlzdG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXNEZWxldGVNb2RpZmllZCIgdHlwZT0i +eHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJFbmRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQog +ICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1l +bnQgbmFtZT0iRGVsZXRlUmF3TW9kaWZpZWREZXRhaWxzIiB0eXBlPSJ0bnM6RGVsZXRlUmF3TW9k +aWZpZWREZXRhaWxzIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVBdFRpbWVE +ZXRhaWxzIj4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4NCiAgICAgIDx4 +czpleHRlbnNpb24gYmFzZT0idG5zOkhpc3RvcnlVcGRhdGVEZXRhaWxzIj4NCiAgICAgICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcVRpbWVzIiB0eXBlPSJ1 +YTpMaXN0T2ZEYXRlVGltZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +ICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxl +eENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkRlbGV0 +ZUF0VGltZURldGFpbHMiIHR5cGU9InRuczpEZWxldGVBdFRpbWVEZXRhaWxzIiAvPg0KDQogIDx4 +czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiPg0KICAgIDx4czpjb21wbGV4 +Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6SGlz +dG9yeVVwZGF0ZURldGFpbHMiPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRXZlbnRJZHMiIHR5cGU9InVhOkxpc3RPZkJ5dGVTdHJpbmciIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAg +ICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVFdmVudERldGFpbHMiIHR5cGU9InRu +czpEZWxldGVFdmVudERldGFpbHMiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3Rv +cnlVcGRhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik9wZXJhdGlvblJlc3VsdHMiIHR5cGU9InVhOkxpc3RPZlN0 +YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJbmZv +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVSZXN1 +bHQiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVzdWx0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJMaXN0T2ZIaXN0b3J5VXBkYXRlUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlUmVzdWx0IiB0eXBlPSJ0bnM6SGlz +dG9yeVVwZGF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mSGlzdG9yeVVwZGF0ZVJlc3VsdCIgdHlwZT0idG5z +Okxpc3RPZkhpc3RvcnlVcGRhdGVSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikhpc3RvcnlVcGRhdGVSZXF1ZXN0Ij4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVhZGVyIiB0eXBl +PSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVEZXRhaWxzIiB0eXBlPSJ1YTpMaXN0 +T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +SGlzdG9yeVVwZGF0ZVJlcXVlc3QiIHR5cGU9InRuczpIaXN0b3J5VXBkYXRlUmVxdWVzdCIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeVVwZGF0ZVJlc3BvbnNlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlw +ZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZkhpc3RvcnlV +cGRhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0aWNJ +bmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlVcGRhdGVS +ZXNwb25zZSIgdHlwZT0idG5zOkhpc3RvcnlVcGRhdGVSZXNwb25zZSIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik9iamVjdElkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNZXRob2RJ +ZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudHMiIHR5cGU9InVhOkxpc3RPZlZhcmlh +bnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ2FsbE1ldGhvZFJlcXVl +c3QiIHR5cGU9InRuczpDYWxsTWV0aG9kUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iTGlzdE9mQ2FsbE1ldGhvZFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6Q2FsbE1ldGhv +ZFJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9mQ2Fs +bE1ldGhvZFJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IklucHV0QXJndW1lbnRSZXN1 +bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5wdXRBcmd1bWVudERpYWdub3N0aWNJ +bmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJPdXRwdXRBcmd1bWVudHMiIHR5 +cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iQ2FsbE1ldGhvZFJlc3VsdCIgdHlwZT0idG5zOkNhbGxNZXRob2RSZXN1bHQiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNhbGxNZXRob2RSZXN1bHQiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNhbGxNZXRob2RSZXN1bHQiIHR5cGU9 +InRuczpDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVk +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiB0eXBlPSJ0 +bnM6TGlzdE9mQ2FsbE1ldGhvZFJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ2FsbFJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5j +ZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1 +ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iTWV0aG9kc1RvQ2FsbCIgdHlwZT0idG5zOkxpc3RPZkNhbGxNZXRob2RSZXF1 +ZXN0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkNhbGxSZXF1ZXN0IiB0 +eXBlPSJ0bnM6Q2FsbFJlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNhbGxS +ZXNwb25zZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVz +cG9uc2VIZWFkZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3VsdHMiIHR5cGU9InRu +czpMaXN0T2ZDYWxsTWV0aG9kUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0 +T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJD +YWxsUmVzcG9uc2UiIHR5cGU9InRuczpDYWxsUmVzcG9uc2UiIC8+DQoNCiAgPHhzOnNpbXBsZVR5 +cGUgIG5hbWU9Ik1vbml0b3JpbmdNb2RlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6 +c3RyaW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRfMCIgLz4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxpbmdfMSIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nXzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAg +PC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIgdHlw +ZT0idG5zOk1vbml0b3JpbmdNb2RlIiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1lPSJEYXRh +Q2hhbmdlVHJpZ2dlciI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c18wIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJTdGF0dXNWYWx1ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZh +bHVlPSJTdGF0dXNWYWx1ZVRpbWVzdGFtcF8yIiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQog +IDwveHM6c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZVRyaWdnZXIi +IHR5cGU9InRuczpEYXRhQ2hhbmdlVHJpZ2dlciIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFt +ZT0iRGVhZGJhbmRUeXBlIj4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJBYnNvbHV0ZV8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJQZXJjZW50XzIiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAgPC94czpzaW1wbGVUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFR5cGUiIHR5cGU9InRuczpEZWFkYmFuZFR5 +cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0ZXIiPg0KICAg +IDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyIiB0eXBlPSJ0bnM6TW9uaXRvcmlu +Z0ZpbHRlciIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZUZpbHRlciI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyaWdnZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdl +VHJpZ2dlciIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRl +YWRiYW5kVHlwZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWFkYmFuZFZhbHVlIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5z +aW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9IkRhdGFDaGFuZ2VGaWx0ZXIiIHR5cGU9InRuczpEYXRhQ2hhbmdlRmls +dGVyIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFdmVudEZpbHRlciI+DQogICAgPHhz +OmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9 +InRuczpNb25pdG9yaW5nRmlsdGVyIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlNlbGVjdENsYXVzZXMiIHR5cGU9InRuczpMaXN0T2ZTaW1wbGVB +dHRyaWJ1dGVPcGVyYW5kIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +ICAgIDx4czplbGVtZW50IG5hbWU9IldoZXJlQ2xhdXNlIiB0eXBlPSJ0bnM6Q29udGVudEZpbHRl +ciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5j +ZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV2ZW50RmlsdGVyIiB0eXBlPSJ0 +bnM6RXZlbnRGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFnZ3JlZ2F0ZUNv +bmZpZ3VyYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlVzZVNlcnZlckNhcGFiaWxpdGllc0RlZmF1bHRzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmVhdFVuY2VydGFpbkFzQmFkIiB0 +eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJQZXJjZW50RGF0YUJhZCIgdHlwZT0ieHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQZXJjZW50RGF0YUdvb2QiIHR5cGU9InhzOnVuc2ln +bmVkQnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVXNlU2xv +cGVkRXh0cmFwb2xhdGlvbiIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIHR5cGU9InRuczpBZ2dyZWdhdGVDb25maWd1cmF0aW9u +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiPg0KICAgIDx4 +czpjb21wbGV4Q29udGVudCBtaXhlZD0iZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNl +PSJ0bnM6TW9uaXRvcmluZ0ZpbHRlciI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlVHlwZSIgdHlw +ZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IlByb2Nlc3NpbmdJbnRlcnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWdncmVnYXRlQ29u +ZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24iIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hz +OmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBl +Pg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXIiIHR5cGU9InRuczpBZ2dyZWdh +dGVGaWx0ZXIiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdGaWx0ZXJS +ZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nRmlsdGVyUmVzdWx0IiB0 +eXBlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiPg0KICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0i +ZmFsc2UiPg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TW9uaXRvcmluZ0ZpbHRlclJl +c3VsdCI+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZWxlY3RDbGF1c2VSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlNl +bGVjdENsYXVzZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8i +IG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iV2hlcmVDbGF1c2VSZXN1bHQiIHR5cGU9InRuczpDb250ZW50RmlsdGVyUmVzdWx0IiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0K +ICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWx0ZXJSZXN1bHQiIHR5cGU9 +InRuczpFdmVudEZpbHRlclJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQWdn +cmVnYXRlRmlsdGVyUmVzdWx0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNl +Ij4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk1vbml0b3JpbmdGaWx0ZXJSZXN1bHQi +Pg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2 +aXNlZFN0YXJ0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHJvY2Vzc2luZ0ludGVydmFsIiB0eXBlPSJ4 +czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJS +ZXZpc2VkQWdncmVnYXRlQ29uZmlndXJhdGlvbiIgdHlwZT0idG5zOkFnZ3JlZ2F0ZUNvbmZpZ3Vy +YXRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICAgIDwveHM6c2Vx +dWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBZ2dyZWdhdGVGaWx0ZXJS +ZXN1bHQiIHR5cGU9InRuczpBZ2dyZWdhdGVGaWx0ZXJSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBs +ZXhUeXBlIG5hbWU9Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5cGU9InhzOnVuc2lnbmVkSW50 +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0ludGVy +dmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkZpbHRlciIgdHlwZT0idWE6RXh0ZW5zaW9uT2JqZWN0IiBtaW5PY2N1cnM9IjAiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUXVldWVTaXplIiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGlzY2FyZE9sZGVzdCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +Ik1vbml0b3JpbmdQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0Ij4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtVG9Nb25pdG9y +IiB0eXBlPSJ0bnM6UmVhZFZhbHVlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yaW5nTW9kZSIgdHlwZT0idG5zOk1vbml0 +b3JpbmdNb2RlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1 +ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3Qi +IHR5cGU9InRuczpNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXF1 +ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlcXVlc3QiIG1pbk9jY3Vycz0iMCIg +bWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0 +b3JlZEl0ZW1DcmVhdGVSZXF1ZXN0IiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0 +ZVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhU +eXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1J +ZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNpemUiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0IiB0eXBl +PSJ0bnM6TW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUg +bmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgdHlw +ZT0idG5zOk1vbml0b3JlZEl0ZW1DcmVhdGVSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJz +PSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1D +cmVhdGVSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVzdWx0IiBu +aWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJD +cmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +U3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpUaW1l +c3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +Ikl0ZW1zVG9DcmVhdGUiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtQ3JlYXRlUmVxdWVz +dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0K +ICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVNb25pdG9yZWRJ +dGVtc1JlcXVlc3QiIHR5cGU9InRuczpDcmVhdGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2UiPg0K +ICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVy +IiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9mTW9u +aXRvcmVkSXRlbUNyZWF0ZVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9m +RGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94 +czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3Jl +YXRlTW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkNyZWF0ZU1vbml0b3JlZEl0ZW1z +UmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2Rp +ZnlSZXF1ZXN0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJN +b25pdG9yZWRJdGVtSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRQYXJhbWV0ZXJzIiB0eXBlPSJ0bnM6TW9u +aXRvcmluZ1BhcmFtZXRlcnMiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIHR5cGU9InRuczpNb25pdG9yZWRJdGVtTW9kaWZ5 +UmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRl +bU1vZGlmeVJlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ik1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbU1v +ZGlmeVJlcXVlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4 +czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXF1ZXN0IiB0eXBlPSJ0 +bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlcXVlc3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hz +OmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Nb2RpZnlS +ZXN1bHQiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1 +c0NvZGUiIHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJldmlzZWRTYW1wbGluZ0ludGVydmFsIiB0eXBlPSJ4czpkb3VibGUiIG1p +bk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJldmlzZWRRdWV1ZVNpemUi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJGaWx0ZXJSZXN1bHQiIHR5cGU9InVhOkV4dGVuc2lvbk9iamVjdCIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0IiB0 +eXBlPSJ0bnM6TW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iTGlzdE9mTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCI+DQogICAgPHhzOnNlcXVl +bmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIg +dHlwZT0idG5zOk1vbml0b3JlZEl0ZW1Nb2RpZnlSZXN1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vbml0b3JlZEl0 +ZW1Nb2RpZnlSZXN1bHQiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5UmVzdWx0 +IiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUaW1lc3RhbXBzVG9SZXR1cm4iIHR5cGU9InRuczpU +aW1lc3RhbXBzVG9SZXR1cm4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9Ikl0ZW1zVG9Nb2RpZnkiIHR5cGU9InRuczpMaXN0T2ZNb25pdG9yZWRJdGVtTW9kaWZ5UmVx +dWVzdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZnlNb25pdG9y +ZWRJdGVtc1JlcXVlc3QiIHR5cGU9InRuczpNb2RpZnlNb25pdG9yZWRJdGVtc1JlcXVlc3QiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vZGlmeU1vbml0b3JlZEl0ZW1zUmVzcG9uc2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ0bnM6TGlzdE9m +TW9uaXRvcmVkSXRlbU1vZGlmeVJlc3VsdCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlz +dE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +TW9kaWZ5TW9uaXRvcmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOk1vZGlmeU1vbml0b3JlZEl0 +ZW1zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3JpbmdN +b2RlUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIg +dHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ik1vbml0b3JpbmdNb2RlIiB0eXBlPSJ0bnM6TW9uaXRvcmluZ01vZGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1JZHMiIHR5cGU9 +InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8 +L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJT +ZXRNb25pdG9yaW5nTW9kZVJlcXVlc3QiIHR5cGU9InRuczpTZXRNb25pdG9yaW5nTW9kZVJlcXVl +c3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldE1vbml0b3JpbmdNb2RlUmVzcG9u +c2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNl +SGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9 +InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0 +T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGlj +SW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNl +Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXRNb25pdG9yaW5n +TW9kZVJlc3BvbnNlIiB0eXBlPSJ0bnM6U2V0TW9uaXRvcmluZ01vZGVSZXNwb25zZSIgLz4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2V0VHJpZ2dlcmluZ1JlcXVlc3QiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRu +czpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJUcmlnZ2VyaW5nSXRlbUlk +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iTGlua3NUb0FkZCIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGlua3NUb1JlbW92 +ZSIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IlNldFRyaWdnZXJpbmdSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0VHJpZ2dlcmluZ1JlcXVl +c3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFRyaWdnZXJpbmdSZXNwb25zZSI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFk +ZXIiIHR5cGU9InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkFkZFJlc3VsdHMiIHR5cGU9InVhOkxpc3RP +ZlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJBZGREaWFnbm9zdGljSW5mb3MiIHR5cGU9InVhOkxpc3RPZkRpYWdub3N0 +aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iUmVtb3ZlUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlbW92 +ZURpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiB0eXBl +PSJ0bnM6U2V0VHJpZ2dlcmluZ1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJEZWxldGVNb25pdG9yZWRJdGVtc1JlcXVlc3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9yZWRJdGVtSWRzIiB0eXBlPSJ1YTpMaXN0 +T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1 +ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlTW9u +aXRvcmVkSXRlbXNSZXF1ZXN0IiB0eXBlPSJ0bnM6RGVsZXRlTW9uaXRvcmVkSXRlbXNSZXF1ZXN0 +IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc1Jlc3Bv +bnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25z +ZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlz +dE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3Rp +Y0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRGVsZXRlTW9uaXRv +cmVkSXRlbXNSZXNwb25zZSIgdHlwZT0idG5zOkRlbGV0ZU1vbml0b3JlZEl0ZW1zUmVzcG9uc2Ui +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvblJlcXVlc3Qi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RIZWFk +ZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVl +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUHVibGlzaGluZ0ludGVydmFs +IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJlcXVlc3RlZExpZmV0aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRNYXhLZWVwQWxpdmVD +b3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9Ik1heE5vdGlmaWNhdGlvbnNQZXJQdWJsaXNoIiB0eXBlPSJ4czp1bnNpZ25l +ZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaGlu +Z0VuYWJsZWQiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlByaW9yaXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxl +bWVudCBuYW1lPSJDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6Q3JlYXRlU3Vi +c2NyaXB0aW9uUmVxdWVzdCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ3JlYXRlU3Vi +c2NyaXB0aW9uUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3Jp +cHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9IlJldmlzZWRQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJs +ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZExpZmV0 +aW1lQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21w +bGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2Ui +IHR5cGU9InRuczpDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZSIgLz4NCg0KICA8eHM6Y29tcGxl +eFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNl +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVl +c3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RlZFB1Ymxpc2hpbmdJbnRl +cnZhbCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZXF1ZXN0ZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWlu +T2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkTWF4S2VlcEFs +aXZlQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJNYXhOb3RpZmljYXRpb25zUGVyUHVibGlzaCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlByaW9y +aXR5IiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJNb2RpZnlT +dWJzY3JpcHRpb25SZXF1ZXN0IiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVxdWVzdCIg +Lz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9uc2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVh +ZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXZpc2VkUHVibGlzaGluZ0ludGVydmFs +IiB0eXBlPSJ4czpkb3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IlJldmlzZWRMaWZldGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV2aXNlZE1heEtlZXBBbGl2ZUNvdW50 +IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2VxdWVu +Y2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1YnNj +cmlwdGlvblJlc3BvbnNlIiB0eXBlPSJ0bnM6TW9kaWZ5U3Vic2NyaXB0aW9uUmVzcG9uc2UiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlUmVxdWVzdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIg +dHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6Ym9v +bGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0 +aW9uSWRzIiB0eXBlPSJ1YTpMaXN0T2ZVSW50MzIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2V0UHVibGlzaGluZ01vZGVSZXF1ZXN0IiB0eXBlPSJ0bnM6U2V0UHVibGlz +aGluZ01vZGVSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTZXRQdWJsaXNo +aW5nTW9kZVJlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVyIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIg +dHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvcyIgdHlwZT0idWE6TGlz +dE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +PC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0i +U2V0UHVibGlzaGluZ01vZGVSZXNwb25zZSIgdHlwZT0idG5zOlNldFB1Ymxpc2hpbmdNb2RlUmVz +cG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2Ui +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcXVlbmNlTnVt +YmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUHVibGlzaFRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ1YTpM +aXN0T2ZFeHRlbnNpb25PYmplY3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTm90aWZpY2F0aW9uTWVzc2FnZSIgdHlwZT0idG5zOk5vdGlmaWNhdGlvbk1lc3NhZ2UiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5vdGlmaWNhdGlvbkRhdGEiPg0KICAgIDx4czpz +ZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJOb3RpZmljYXRpb25EYXRhIiB0eXBlPSJ0bnM6Tm90aWZpY2F0aW9uRGF0 +YSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbiI+ +DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5z +aW9uIGJhc2U9InRuczpOb3RpZmljYXRpb25EYXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1zIiB0eXBlPSJ0bnM6TGlz +dE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEaWFnbm9zdGljSW5mb3MiIHR5cGU9 +InVhOkxpc3RPZkRpYWdub3N0aWNJbmZvIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAv +Pg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94 +czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbiIgdHlwZT0idG5zOkRhdGFDaGFuZ2VOb3RpZmljYXRp +b24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmljYXRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudEhh +bmRsZSIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ1YTpEYXRhVmFsdWUiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgdHlwZT0idG5z +Ok1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ikxpc3RPZk1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik1vbml0b3JlZEl0ZW1Ob3RpZmljYXRpb24iIHR5cGU9InRu +czpNb25pdG9yZWRJdGVtTm90aWZpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNb25pdG9yZWRJdGVtTm90aWZp +Y2F0aW9uIiB0eXBlPSJ0bnM6TGlzdE9mTW9uaXRvcmVkSXRlbU5vdGlmaWNhdGlvbiIgbmlsbGFi +bGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXZlbnRO +b3RpZmljYXRpb25MaXN0Ij4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4N +CiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOk5vdGlmaWNhdGlvbkRhdGEiPg0KICAgICAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRzIiB0eXBl +PSJ0bnM6TGlzdE9mRXZlbnRGaWVsZExpc3QiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUi +IC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8 +L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJFdmVudE5vdGlmaWNhdGlvbkxpc3QiIHR5cGU9InRuczpFdmVudE5vdGlmaWNhdGlvbkxp +c3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV2ZW50RmllbGRMaXN0Ij4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRIYW5kbGUiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJFdmVudEZpZWxkcyIgdHlwZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkTGlzdCIgdHlwZT0idG5zOkV2ZW50RmllbGRM +aXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZFdmVudEZpZWxkTGlzdCI+ +DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRXZlbnRGaWVsZExp +c3QiIHR5cGU9InRuczpFdmVudEZpZWxkTGlzdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVu +Ym91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mRXZlbnRGaWVsZExpc3QiIHR5 +cGU9InRuczpMaXN0T2ZFdmVudEZpZWxkTGlzdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVu +dD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGlzdG9yeUV2ZW50RmllbGRMaXN0Ij4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFdmVudEZpZWxkcyIgdHlw +ZT0idWE6TGlzdE9mVmFyaWFudCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJIaXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpIaXN0b3J5RXZlbnRGaWVsZExpc3Qi +IC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkhpc3RvcnlFdmVudEZpZWxkTGlz +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSGlzdG9yeUV2 +ZW50RmllbGRMaXN0IiB0eXBlPSJ0bnM6SGlzdG9yeUV2ZW50RmllbGRMaXN0IiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZI +aXN0b3J5RXZlbnRGaWVsZExpc3QiIHR5cGU9InRuczpMaXN0T2ZIaXN0b3J5RXZlbnRGaWVsZExp +c3QiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiI+DQogICAgPHhzOmNvbXBsZXhDb250ZW50IG1p +eGVkPSJmYWxzZSI+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpOb3RpZmljYXRpb25E +YXRhIj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlN0YXR1cyIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAg +IDx4czplbGVtZW50IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGljSW5m +byIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5j +ZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwv +eHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NoYW5nZU5vdGlmaWNh +dGlvbiIgdHlwZT0idG5zOlN0YXR1c0NoYW5nZU5vdGlmaWNhdGlvbiIgLz4NCg0KICA8eHM6Y29t +cGxleFR5cGUgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlwZT0ieHM6 +dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNl +cXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +IDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9 +IlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgdHlwZT0idG5zOlN1YnNjcmlwdGlvbkFja25v +d2xlZGdlbWVudCIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3Vic2NyaXB0 +aW9uQWNrbm93bGVkZ2VtZW50Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTdWJzY3JpcHRpb25BY2tub3dsZWRnZW1lbnQiIHR5cGU9InRuczpTdWJzY3JpcHRp +b25BY2tub3dsZWRnZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5p +bGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+ +DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIg +dHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbmlsbGFibGU9InRy +dWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUHVibGlzaFJlcXVl +c3QiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcXVlc3RI +ZWFkZXIiIHR5cGU9InRuczpSZXF1ZXN0SGVhZGVyIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uQWNrbm93bGVkZ2Vt +ZW50cyIgdHlwZT0idG5zOkxpc3RPZlN1YnNjcmlwdGlvbkFja25vd2xlZGdlbWVudCIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNoUmVxdWVzdCIgdHlwZT0idG5z +OlB1Ymxpc2hSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJQdWJsaXNoUmVz +cG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3Bv +bnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9uc2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZCIgdHlw +ZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkF2YWlsYWJsZVNlcXVlbmNlTnVtYmVycyIgdHlwZT0idWE6TGlzdE9mVUludDMyIiBtaW5P +Y2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9y +ZU5vdGlmaWNhdGlvbnMiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpOb3RpZmlj +YXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iUmVzdWx0cyIgdHlwZT0idWE6TGlzdE9mU3RhdHVzQ29kZSIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRpYWdu +b3N0aWNJbmZvcyIgdHlwZT0idWE6TGlzdE9mRGlhZ25vc3RpY0luZm8iIG1pbk9jY3Vycz0iMCIg +bmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlw +ZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UHVibGlz +aFJlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXF1ZXN0 +Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0SGVh +ZGVyIiB0eXBlPSJ0bnM6UmVxdWVzdEhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1 +ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbklkIiB0eXBlPSJ4czp1 +bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmV0 +cmFuc21pdFNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3QiIHR5cGU9InRuczpSZXB1Ymxpc2hSZXF1ZXN0IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJSZXB1Ymxpc2hSZXNwb25zZSI+DQogICAgPHhz +OnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVzcG9uc2VIZWFkZXIiIHR5cGU9 +InRuczpSZXNwb25zZUhlYWRlciIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9Ik5vdGlmaWNhdGlvbk1lc3NhZ2UiIHR5cGU9InRuczpOb3Rp +ZmljYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJl +cHVibGlzaFJlc3BvbnNlIiB0eXBlPSJ0bnM6UmVwdWJsaXNoUmVzcG9uc2UiIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zZmVyUmVzdWx0Ij4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNDb2RlIiB0eXBlPSJ1YTpTdGF0dXNDb2RlIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBdmFpbGFibGVTZXF1ZW5j +ZU51bWJlcnMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclJlc3VsdCIgdHlwZT0idG5zOlRyYW5zZmVyUmVzdWx0IiAv +Pg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZUcmFuc2ZlclJlc3VsdCI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNmZXJSZXN1bHQiIHR5 +cGU9InRuczpUcmFuc2ZlclJlc3VsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRl +ZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4 +VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mVHJhbnNmZXJSZXN1bHQiIHR5cGU9InRu +czpMaXN0T2ZUcmFuc2ZlclJlc3VsdCIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0K +ICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCI+DQog +ICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIg +dHlwZT0idG5zOlJlcXVlc3RIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxpc3RP +ZlVJbnQzMiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlNlbmRJbml0aWFsVmFsdWVzIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iVHJhbnNmZXJTdWJzY3JpcHRpb25zUmVxdWVzdCIgdHlwZT0idG5zOlRyYW5z +ZmVyU3Vic2NyaXB0aW9uc1JlcXVlc3QiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRy +YW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZUhlYWRlciIgdHlwZT0idG5zOlJlc3BvbnNlSGVhZGVy +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUmVzdWx0cyIgdHlwZT0idG5zOkxpc3RPZlRyYW5zZmVyUmVzdWx0IiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3RpY0lu +Zm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclN1YnNjcmlwdGlvbnNSZXNwb25zZSIgdHlwZT0idG5z +OlRyYW5zZmVyU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBu +YW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdEhlYWRlciIgdHlwZT0idG5zOlJlcXVlc3RIZWFk +ZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJTdWJzY3JpcHRpb25JZHMiIHR5cGU9InVhOkxpc3RPZlVJbnQzMiIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhU +eXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVxdWVzdCIgdHlw +ZT0idG5zOkRlbGV0ZVN1YnNjcmlwdGlvbnNSZXF1ZXN0IiAvPg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlSGVhZGVyIiB0eXBlPSJ0bnM6UmVzcG9u +c2VIZWFkZXIiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJSZXN1bHRzIiB0eXBlPSJ1YTpMaXN0T2ZTdGF0dXNDb2RlIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGlhZ25vc3Rp +Y0luZm9zIiB0eXBlPSJ1YTpMaXN0T2ZEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0K +ICA8eHM6ZWxlbWVudCBuYW1lPSJEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIHR5cGU9InRu +czpEZWxldGVTdWJzY3JpcHRpb25zUmVzcG9uc2UiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9IkJ1aWxkSW5mbyI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iUHJvZHVjdFVyaSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgdHlwZT0i +eHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iUHJvZHVjdE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNvZnR3YXJlVmVyc2lv +biIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGROdW1iZXIiIHR5cGU9InhzOnN0cmluZyIgbWluT2Nj +dXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkJ1aWxk +RGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJCdWlsZEluZm8i +IHR5cGU9InRuczpCdWlsZEluZm8iIC8+DQoNCiAgPHhzOnNpbXBsZVR5cGUgIG5hbWU9IlJlZHVu +ZGFuY3lTdXBwb3J0Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCiAg +ICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZV8wIiAvPg0KICAgICAgPHhzOmVudW1lcmF0 +aW9uIHZhbHVlPSJDb2xkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ildhcm1f +MiIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSG90XzMiIC8+DQogICAgICA8eHM6 +ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcGFyZW50XzQiIC8+DQogICAgICA8eHM6ZW51bWVyYXRp +b24gdmFsdWU9IkhvdEFuZE1pcnJvcmVkXzUiIC8+DQogICAgPC94czpyZXN0cmljdGlvbj4NCiAg +PC94czpzaW1wbGVUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbmN5U3VwcG9ydCIg +dHlwZT0idG5zOlJlZHVuZGFuY3lTdXBwb3J0IiAvPg0KDQogIDx4czpzaW1wbGVUeXBlICBuYW1l +PSJTZXJ2ZXJTdGF0ZSI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQog +ICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJ1bm5pbmdfMCIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iRmFpbGVkXzEiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9 +Ik5vQ29uZmlndXJhdGlvbl8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNw +ZW5kZWRfMyIgLz4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU2h1dGRvd25fNCIgLz4N +CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdF81IiAvPg0KICAgICAgPHhzOmVudW1l +cmF0aW9uIHZhbHVlPSJDb21tdW5pY2F0aW9uRmF1bHRfNiIgLz4NCiAgICAgIDx4czplbnVtZXJh +dGlvbiB2YWx1ZT0iVW5rbm93bl83IiAvPg0KICAgIDwveHM6cmVzdHJpY3Rpb24+DQogIDwveHM6 +c2ltcGxlVHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyU3RhdGUiIHR5cGU9InRuczpT +ZXJ2ZXJTdGF0ZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmVkdW5kYW50U2VydmVy +RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNl +cnZlcklkIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+ +DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlTGV2ZWwiIHR5cGU9InhzOnVuc2lnbmVk +Qnl0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyU3Rh +dGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgIDwveHM6c2Vx +dWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlJlZHVuZGFu +dFNlcnZlckRhdGFUeXBlIiB0eXBlPSJ0bnM6UmVkdW5kYW50U2VydmVyRGF0YVR5cGUiIC8+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIj4N +CiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWR1bmRhbnRTZXJ2 +ZXJEYXRhVHlwZSIgdHlwZT0idG5zOlJlZHVuZGFudFNlcnZlckRhdGFUeXBlIiBtaW5PY2N1cnM9 +IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNl +cXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZS +ZWR1bmRhbnRTZXJ2ZXJEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZlJlZHVuZGFudFNlcnZlckRh +dGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJFbmRwb2ludFVybExpc3REYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxMaXN0IiB0eXBlPSJ1YTpMaXN0T2ZTdHJp +bmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRW5kcG9pbnRVcmxMaXN0 +RGF0YVR5cGUiIHR5cGU9InRuczpFbmRwb2ludFVybExpc3REYXRhVHlwZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkVuZHBvaW50VXJsTGlzdERhdGFU +eXBlIiB0eXBlPSJ0bnM6RW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4 +T2NjdXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+ +DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZkVuZHBvaW50 +VXJsTGlzdERhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mRW5kcG9pbnRVcmxMaXN0RGF0YVR5cGUi +IG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +Ik5ldHdvcmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtQYXRocyIgdHlw +ZT0idG5zOkxpc3RPZkVuZHBvaW50VXJsTGlzdERhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxh +YmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQog +IDx4czplbGVtZW50IG5hbWU9Ik5ldHdvcmtHcm91cERhdGFUeXBlIiB0eXBlPSJ0bnM6TmV0d29y +a0dyb3VwRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5ldHdv +cmtHcm91cERhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOk5ldHdvcmtHcm91cERhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBu +YW1lPSJMaXN0T2ZOZXR3b3JrR3JvdXBEYXRhVHlwZSIgdHlwZT0idG5zOkxpc3RPZk5ldHdvcmtH +cm91cERhdGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAg +PHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJbnRlcnZhbCIg +dHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJEaXNhYmxlZE1vbml0b3JlZEl0ZW1Db3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlw +ZT0idG5zOlNhbXBsaW5nSW50ZXJ2YWxEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpj +b21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlw +ZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2FtcGxpbmdJ +bnRlcnZhbERpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTYW1wbGluZ0ludGVydmFsRGlh +Z25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4N +CiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2FtcGxpbmdJbnRlcnZhbERpYWdub3N0aWNzRGF0 +YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTYW1wbGluZ0ludGVydmFsRGlhZ25vc3RpY3NEYXRhVHlw +ZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFt +ZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5RGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlcnZlclZpZXdDb3VudCIgdHlwZT0ieHM6dW5zaWdu +ZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJlbnRT +ZXNzaW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTZXNzaW9uQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZWN1cml0 +eVJlamVjdGVkU2Vzc2lvbkNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVqZWN0ZWRTZXNzaW9uQ291bnQiIHR5cGU9 +InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJTZXNzaW9uVGltZW91dENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkFib3J0Q291bnQiIHR5cGU9Inhz +OnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJD +dXJyZW50U3Vic2NyaXB0aW9uQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdW11bGF0ZWRTdWJzY3JpcHRpb25Db3Vu +dCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlB1Ymxpc2hpbmdJbnRlcnZhbENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIg +bWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHlSZWplY3Rl +ZFJlcXVlc3RzQ291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWplY3RlZFJlcXVlc3RzQ291bnQiIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpj +b21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iU2VydmVyRGlhZ25vc3RpY3NTdW1tYXJ5 +RGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2ZXJEaWFnbm9zdGljc1N1bW1hcnlEYXRhVHlwZSIgLz4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iU2VydmVyU3RhdHVzRGF0YVR5cGUiPg0KICAgIDx4 +czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXJ0VGltZSIgdHlwZT0ieHM6 +ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJl +bnRUaW1lIiB0eXBlPSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iU3RhdGUiIHR5cGU9InRuczpTZXJ2ZXJTdGF0ZSIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQnVpbGRJbmZvIiB0eXBlPSJ0bnM6QnVpbGRJbmZv +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iU2Vjb25kc1RpbGxTaHV0ZG93biIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNodXRkb3duUmVhc29uIiB0eXBlPSJ1YTpM +b2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6 +c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IlNlcnZl +clN0YXR1c0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2VydmVyU3RhdHVzRGF0YVR5cGUiIC8+DQoNCiAg +PHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8 +eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uSWQiIHR5cGU9InVh +Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlNlc3Npb25OYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnREZXNjcmlwdGlv +biIgdHlwZT0idG5zOkFwcGxpY2F0aW9uRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXJ2ZXJVcmkiIHR5cGU9Inhz +OnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkVuZHBvaW50VXJsIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMb2NhbGVJZHMiIHR5cGU9 +InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IkFjdHVhbFNlc3Npb25UaW1lb3V0IiB0eXBlPSJ4czpkb3VibGUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1heFJlc3BvbnNlTWVz +c2FnZVNpemUiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDb25uZWN0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUi +IG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudExhc3RDb250 +YWN0VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkN1cnJlbnRTdWJzY3JpcHRpb25zQ291bnQiIHR5cGU9InhzOnVuc2lnbmVk +SW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50TW9u +aXRvcmVkSXRlbXNDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9IkN1cnJlbnRQdWJsaXNoUmVxdWVzdHNJblF1ZXVlIiB0 +eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQg +bmFtZT0iVG90YWxSZXF1ZXN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iVW5hdXRob3JpemVkUmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2Nj +dXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVhZENvdW50IiB0eXBlPSJ0bnM6 +U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4N +CiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhpc3RvcnlSZWFkQ291bnQiIHR5cGU9InRuczpTZXJ2 +aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iV3JpdGVDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVy +RGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxl +bWVudCBuYW1lPSJIaXN0b3J5VXBkYXRlQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRh +dGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1l +bnQgbmFtZT0iQ2FsbENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWlu +T2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNy +ZWF0ZU1vbml0b3JlZEl0ZW1zQ291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBl +IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTW9kaWZ5TW9uaXRvcmVkSXRlbXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJTZXRNb25pdG9yaW5nTW9kZUNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IlNldFRyaWdnZXJpbmdDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEZWxldGVNb25pdG9yZWRJdGVtc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkNyZWF0ZVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNv +dW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4 +czplbGVtZW50IG5hbWU9Ik1vZGlmeVN1YnNjcmlwdGlvbkNvdW50IiB0eXBlPSJ0bnM6U2Vydmlj +ZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlNldFB1Ymxpc2hpbmdNb2RlQ291bnQiIHR5cGU9InRuczpTZXJ2 +aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iUHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlJlcHVibGlzaENvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRh +VHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IlRyYW5zZmVyU3Vic2NyaXB0aW9uc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50 +ZXJEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IkRlbGV0ZVN1YnNjcmlwdGlvbnNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VD +b3VudGVyRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBZGROb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJE +YXRhVHlwZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkFkZFJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJEZWxldGVOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlw +ZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5h +bWU9IkRlbGV0ZVJlZmVyZW5jZXNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5 +cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJCcm93c2VDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJCcm93 +c2VOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNsYXRl +QnJvd3NlUGF0aHNUb05vZGVJZHNDb3VudCIgdHlwZT0idG5zOlNlcnZpY2VDb3VudGVyRGF0YVR5 +cGUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJRdWVyeUZpcnN0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +UXVlcnlOZXh0Q291bnQiIHR5cGU9InRuczpTZXJ2aWNlQ291bnRlckRhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iUmVnaXN0 +ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVucmVnaXN0 +ZXJOb2Rlc0NvdW50IiB0eXBlPSJ0bnM6U2VydmljZUNvdW50ZXJEYXRhVHlwZSIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIg +dHlwZT0idG5zOlNlc3Npb25EaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4 +VHlwZSBuYW1lPSJMaXN0T2ZTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbkRpYWdub3N0aWNzRGF0YVR5 +cGUiIHR5cGU9InRuczpTZXNzaW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbWluT2NjdXJzPSIwIiBt +YXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5j +ZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2Vzc2lv +bkRpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZTZXNzaW9uRGlhZ25vc3RpY3NE +YXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4NCg0KICA8eHM6Y29tcGxleFR5 +cGUgbmFtZT0iU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSI+DQogICAgPHhzOnNl +cXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2Rl +SWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJDbGllbnRVc2VySWRPZlNlc3Npb24iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkNsaWVudFVzZXJJ +ZEhpc3RvcnkiIHR5cGU9InVhOkxpc3RPZlN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0i +dHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uTWVjaGFuaXNt +IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJFbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9 +IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0 +UHJvdG9jb2wiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIg +Lz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlY3VyaXR5TW9kZSIgdHlwZT0idG5zOk1lc3Nh +Z2VTZWN1cml0eU1vZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IlNlY3VyaXR5UG9saWN5VXJpIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFi +bGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDbGllbnRDZXJ0aWZpY2F0ZSIg +dHlwZT0ieHM6YmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0K +ICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5h +bWU9IlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIHR5cGU9InRuczpTZXNzaW9u +U2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1l +PSJMaXN0T2ZTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGljc0RhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJTZXNzaW9uU2VjdXJpdHlEaWFnbm9zdGlj +c0RhdGFUeXBlIiB0eXBlPSJ0bnM6U2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSIg +bWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbmlsbGFibGU9InRydWUiIC8+DQog +ICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGlzdE9mU2Vzc2lvblNlY3VyaXR5RGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5zOkxp +c3RPZlNlc3Npb25TZWN1cml0eURpYWdub3N0aWNzRGF0YVR5cGUiIG5pbGxhYmxlPSJ0cnVlIj48 +L3hzOmVsZW1lbnQ+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNlcnZpY2VDb3VudGVyRGF0 +YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRvdGFs +Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6 +ZWxlbWVudCBuYW1lPSJFcnJvckNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9IlNlcnZpY2VDb3VudGVyRGF0YVR5cGUiIHR5cGU9InRuczpTZXJ2aWNlQ291 +bnRlckRhdGFUeXBlIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdGF0dXNSZXN1bHQi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN0YXR1c0NvZGUi +IHR5cGU9InVhOlN0YXR1c0NvZGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9IkRpYWdub3N0aWNJbmZvIiB0eXBlPSJ1YTpEaWFnbm9zdGljSW5mbyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBs +ZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNSZXN1bHQiIHR5cGU9InRuczpTdGF0 +dXNSZXN1bHQiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0YXR1c1Jlc3Vs +dCI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzUmVz +dWx0IiB0eXBlPSJ0bnM6U3RhdHVzUmVzdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5i +b3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNv +bXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNSZXN1bHQiIHR5cGU9 +InRuczpMaXN0T2ZTdGF0dXNSZXN1bHQiIG5pbGxhYmxlPSJ0cnVlIj48L3hzOmVsZW1lbnQ+DQoN +CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUi +Pg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlc3Npb25JZCIg +dHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uSWQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQcmlvcml0eSIgdHlwZT0i +eHM6dW5zaWduZWRCeXRlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1l +PSJQdWJsaXNoaW5nSW50ZXJ2YWwiIHR5cGU9InhzOmRvdWJsZSIgbWluT2NjdXJzPSIwIiAvPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTWF4S2VlcEFsaXZlQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNYXhMaWZl +dGltZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTWF4Tm90aWZpY2F0aW9uc1BlclB1Ymxpc2giIHR5cGU9InhzOnVu +c2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJs +aXNoaW5nRW5hYmxlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTW9kaWZ5Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5P +Y2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmFibGVDb3VudCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkRpc2FibGVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IlJlcHVibGlzaFJlcXVlc3RDb3VudCIgdHlwZT0ieHM6dW5z +aWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlJlcHVi +bGlzaE1lc3NhZ2VSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZXB1Ymxpc2hNZXNzYWdlQ291bnQiIHR5 +cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBu +YW1lPSJUcmFuc2ZlclJlcXVlc3RDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9BbHRDbGllbnRD +b3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czpl +bGVtZW50IG5hbWU9IlRyYW5zZmVycmVkVG9TYW1lQ2xpZW50Q291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJQdWJsaXNo +UmVxdWVzdENvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAg +ICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YUNoYW5nZU5vdGlmaWNhdGlvbnNDb3VudCIgdHlwZT0i +eHM6dW5zaWduZWRJbnQiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9 +IkV2ZW50Tm90aWZpY2F0aW9uc0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJz +PSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTm90aWZpY2F0aW9uc0NvdW50IiB0eXBl +PSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFt +ZT0iTGF0ZVB1Ymxpc2hSZXF1ZXN0Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1 +cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDdXJyZW50S2VlcEFsaXZlQ291bnQi +IHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJDdXJyZW50TGlmZXRpbWVDb3VudCIgdHlwZT0ieHM6dW5zaWduZWRJbnQiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuYWNrbm93bGVkZ2VkTWVzc2Fn +ZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRGlzY2FyZGVkTWVzc2FnZUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZElu +dCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9uaXRvcmVkSXRl +bUNvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iRGlzYWJsZWRNb25pdG9yZWRJdGVtQ291bnQiIHR5cGU9InhzOnVuc2ln +bmVkSW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJNb25pdG9y +aW5nUXVldWVPdmVyZmxvd0NvdW50IiB0eXBlPSJ4czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIw +IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTmV4dFNlcXVlbmNlTnVtYmVyIiB0eXBlPSJ4 +czp1bnNpZ25lZEludCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +RXZlbnRRdWV1ZU92ZXJGbG93Q291bnQiIHR5cGU9InhzOnVuc2lnbmVkSW50IiBtaW5PY2N1cnM9 +IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgdHlwZT0idG5zOlN1 +YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkRpYWdub3N0aWNzRGF0 +YVR5cGUiIHR5cGU9InRuczpTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZTdWJzY3JpcHRpb25EaWFnbm9zdGljc0RhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU3Vic2Ny +aXB0aW9uRGlhZ25vc3RpY3NEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVWZXJiTWFzayI+ +DQogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9Ik5vZGVBZGRlZF8xIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVl +PSJOb2RlRGVsZXRlZF8yIiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVu +Y2VBZGRlZF80IiAvPg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VEZWxl +dGVkXzgiIC8+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFUeXBlQ2hhbmdlZF8x +NiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNpbXBsZVR5cGU+DQogIDx4czpl +bGVtZW50IG5hbWU9Ik1vZGVsQ2hhbmdlU3RydWN0dXJlVmVyYk1hc2siIHR5cGU9InRuczpNb2Rl +bENoYW5nZVN0cnVjdHVyZVZlcmJNYXNrIiAvPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJN +b2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlkIiBtaW5PY2N1cnM9IjAi +IG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iQWZmZWN0ZWRUeXBl +IiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJWZXJiIiB0eXBlPSJ4czp1bnNpZ25lZEJ5dGUiIG1pbk9jY3Vy +cz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6 +ZWxlbWVudCBuYW1lPSJNb2RlbENoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6TW9k +ZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgLz4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0i +TGlzdE9mTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0K +ICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTW9kZWxDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlw +ZT0idG5zOk1vZGVsQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2Nj +dXJzPSJ1bmJvdW5kZWQiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQog +IDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9Ikxpc3RPZk1vZGVsQ2hhbmdl +U3RydWN0dXJlRGF0YVR5cGUiIHR5cGU9InRuczpMaXN0T2ZNb2RlbENoYW5nZVN0cnVjdHVyZURh +dGFUeXBlIiBuaWxsYWJsZT0idHJ1ZSI+PC94czplbGVtZW50Pg0KDQogIDx4czpjb21wbGV4VHlw +ZSBuYW1lPSJTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIj4NCiAgICA8eHM6c2VxdWVu +Y2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBZmZlY3RlZCIgdHlwZT0idWE6Tm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +QWZmZWN0ZWRUeXBlIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRy +dWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVs +ZW1lbnQgbmFtZT0iU2VtYW50aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgdHlwZT0idG5zOlNl +bWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5h +bWU9Ikxpc3RPZlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1 +ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlNlbWFudGljQ2hhbmdlU3RydWN0dXJlRGF0 +YVR5cGUiIHR5cGU9InRuczpTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiBtaW5PY2N1 +cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICA8L3hz +OnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJMaXN0 +T2ZTZW1hbnRpY0NoYW5nZVN0cnVjdHVyZURhdGFUeXBlIiB0eXBlPSJ0bnM6TGlzdE9mU2VtYW50 +aWNDaGFuZ2VTdHJ1Y3R1cmVEYXRhVHlwZSIgbmlsbGFibGU9InRydWUiPjwveHM6ZWxlbWVudD4N +Cg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iUmFuZ2UiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkxvdyIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAi +IC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJIaWdoIiB0eXBlPSJ4czpkb3VibGUiIG1pbk9j +Y3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8 +eHM6ZWxlbWVudCBuYW1lPSJSYW5nZSIgdHlwZT0idG5zOlJhbmdlIiAvPg0KDQogIDx4czpjb21w +bGV4VHlwZSBuYW1lPSJFVUluZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJOYW1lc3BhY2VVcmkiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJz +PSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlVuaXRJZCIg +dHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJE +aXNwbGF5TmFtZSIgdHlwZT0idWE6TG9jYWxpemVkVGV4dCIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ1 +YTpMb2NhbGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgIDwv +eHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkVV +SW5mb3JtYXRpb24iIHR5cGU9InRuczpFVUluZm9ybWF0aW9uIiAvPg0KDQogIDx4czpzaW1wbGVU +eXBlICBuYW1lPSJBeGlzU2NhbGVFbnVtZXJhdGlvbiI+DQogICAgPHhzOnJlc3RyaWN0aW9uIGJh +c2U9InhzOnN0cmluZyI+DQogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVhcl8wIiAv +Pg0KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMb2dfMSIgLz4NCiAgICAgIDx4czplbnVt +ZXJhdGlvbiB2YWx1ZT0iTG5fMiIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hzOnNp +bXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkF4aXNTY2FsZUVudW1lcmF0aW9uIiB0eXBl +PSJ0bnM6QXhpc1NjYWxlRW51bWVyYXRpb24iIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9 +IkNvbXBsZXhOdW1iZXJUeXBlIj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJSZWFsIiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iSW1hZ2luYXJ5IiB0eXBlPSJ4czpmbG9hdCIgbWluT2NjdXJzPSIwIiAv +Pg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVtZW50 +IG5hbWU9IkNvbXBsZXhOdW1iZXJUeXBlIiB0eXBlPSJ0bnM6Q29tcGxleE51bWJlclR5cGUiIC8+ +DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRvdWJsZUNvbXBsZXhOdW1iZXJUeXBlIj4NCiAg +ICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJSZWFsIiB0eXBlPSJ4czpk +b3VibGUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IkltYWdpbmFy +eSIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4N +CiAgPC94czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iRG91YmxlQ29tcGxleE51 +bWJlclR5cGUiIHR5cGU9InRuczpEb3VibGVDb21wbGV4TnVtYmVyVHlwZSIgLz4NCg0KICA8eHM6 +Y29tcGxleFR5cGUgbmFtZT0iQXhpc0luZm9ybWF0aW9uIj4NCiAgICA8eHM6c2VxdWVuY2U+DQog +ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJFbmdpbmVlcmluZ1VuaXRzIiB0eXBlPSJ0bnM6RVVJbmZv +cm1hdGlvbiIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkVVUmFuZ2UiIHR5cGU9InRuczpSYW5nZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJs +ZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9IlRpdGxlIiB0eXBlPSJ1YTpMb2Nh +bGl6ZWRUZXh0IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVs +ZW1lbnQgbmFtZT0iQXhpc1NjYWxlVHlwZSIgdHlwZT0idG5zOkF4aXNTY2FsZUVudW1lcmF0aW9u +IiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBeGlzU3RlcHMiIHR5 +cGU9InVhOkxpc3RPZkRvdWJsZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAg +ICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1l +PSJBeGlzSW5mb3JtYXRpb24iIHR5cGU9InRuczpBeGlzSW5mb3JtYXRpb24iIC8+DQoNCiAgPHhz +OmNvbXBsZXhUeXBlIG5hbWU9IlhWVHlwZSI+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhz +OmVsZW1lbnQgbmFtZT0iWCIgdHlwZT0ieHM6ZG91YmxlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAg +ICA8eHM6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0ieHM6ZmxvYXQiIG1pbk9jY3Vycz0iMCIg +Lz4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVu +dCBuYW1lPSJYVlR5cGUiIHR5cGU9InRuczpYVlR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBl +IG5hbWU9IlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAg +ICAgIDx4czplbGVtZW50IG5hbWU9IkNyZWF0ZVNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +Q3JlYXRlQ2xpZW50TmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxl +PSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSW52b2NhdGlvbkNyZWF0aW9uVGlt +ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ikxhc3RUcmFuc2l0aW9uVGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0i +MCIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxsIiB0eXBlPSJ4czpz +dHJpbmciIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVu +dCBuYW1lPSJMYXN0TWV0aG9kU2Vzc2lvbklkIiB0eXBlPSJ1YTpOb2RlSWQiIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9k +SW5wdXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBu +aWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RPdXRw +dXRBcmd1bWVudHMiIHR5cGU9InRuczpMaXN0T2ZBcmd1bWVudCIgbWluT2NjdXJzPSIwIiBuaWxs +YWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikxhc3RNZXRob2RDYWxsVGlt +ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgIDx4czplbGVtZW50 +IG5hbWU9Ikxhc3RNZXRob2RSZXR1cm5TdGF0dXMiIHR5cGU9InRuczpTdGF0dXNSZXN1bHQiIG1p +bk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94 +czpjb21wbGV4VHlwZT4NCiAgPHhzOmVsZW1lbnQgbmFtZT0iUHJvZ3JhbURpYWdub3N0aWNEYXRh +VHlwZSIgdHlwZT0idG5zOlByb2dyYW1EaWFnbm9zdGljRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNv +bXBsZXhUeXBlIG5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIj4NCiAgICA8eHM6c2Vx +dWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJDcmVhdGVTZXNzaW9uSWQiIHR5cGU9InVh +Ok5vZGVJZCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVt +ZW50IG5hbWU9IkNyZWF0ZUNsaWVudE5hbWUiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIw +IiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ikludm9jYXRpb25D +cmVhdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICA8 +eHM6ZWxlbWVudCBuYW1lPSJMYXN0VHJhbnNpdGlvblRpbWUiIHR5cGU9InhzOmRhdGVUaW1lIiBt +aW5PY2N1cnM9IjAiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kQ2FsbCIg +dHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAg +PHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZFNlc3Npb25JZCIgdHlwZT0idWE6Tm9kZUlkIiBt +aW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TGFzdE1ldGhvZElucHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9j +Y3Vycz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0 +TWV0aG9kT3V0cHV0QXJndW1lbnRzIiB0eXBlPSJ0bnM6TGlzdE9mQXJndW1lbnQiIG1pbk9jY3Vy +cz0iMCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0 +aG9kSW5wdXRWYWx1ZXMiIHR5cGU9InVhOkxpc3RPZlZhcmlhbnQiIG1pbk9jY3Vycz0iMCIgbmls +bGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJMYXN0TWV0aG9kT3V0cHV0 +VmFsdWVzIiB0eXBlPSJ1YTpMaXN0T2ZWYXJpYW50IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0 +cnVlIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTGFzdE1ldGhvZENhbGxUaW1lIiB0eXBl +PSJ4czpkYXRlVGltZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i +TGFzdE1ldGhvZFJldHVyblN0YXR1cyIgdHlwZT0idWE6U3RhdHVzQ29kZSIgbWluT2NjdXJzPSIw +IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQogIDx4czplbGVt +ZW50IG5hbWU9IlByb2dyYW1EaWFnbm9zdGljMkRhdGFUeXBlIiB0eXBlPSJ0bnM6UHJvZ3JhbURp +YWdub3N0aWMyRGF0YVR5cGUiIC8+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFubm90YXRp +b24iPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2Ui +IHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSIgLz4NCiAgICAg +IDx4czplbGVtZW50IG5hbWU9IlVzZXJOYW1lIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0i +MCIgbmlsbGFibGU9InRydWUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBbm5vdGF0aW9u +VGltZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICA8L3hzOnNlcXVl +bmNlPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KICA8eHM6ZWxlbWVudCBuYW1lPSJBbm5vdGF0aW9u +IiB0eXBlPSJ0bnM6QW5ub3RhdGlvbiIgLz4NCg0KICA8eHM6c2ltcGxlVHlwZSAgbmFtZT0iRXhj +ZXB0aW9uRGV2aWF0aW9uRm9ybWF0Ij4NCiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3Ry +aW5nIj4NCiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQWJzb2x1dGVWYWx1ZV8wIiAvPg0K +ICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50T2ZWYWx1ZV8xIiAvPg0KICAgICAg +PHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50T2ZSYW5nZV8yIiAvPg0KICAgICAgPHhzOmVu +dW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50T2ZFVVJhbmdlXzMiIC8+DQogICAgICA8eHM6ZW51bWVy +YXRpb24gdmFsdWU9IlVua25vd25fNCIgLz4NCiAgICA8L3hzOnJlc3RyaWN0aW9uPg0KICA8L3hz +OnNpbXBsZVR5cGU+DQogIDx4czplbGVtZW50IG5hbWU9IkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1h +dCIgdHlwZT0idG5zOkV4Y2VwdGlvbkRldmlhdGlvbkZvcm1hdCIgLz4NCg0KPC94czpzY2hlbWE+ + + + + NamespaceUri + + i=68 + i=8252 + + + http://opcfoundation.org/UA/2008/02/Types.xsd + + + + Deprecated + + i=68 + i=8252 + + + true + + + + Union + + i=69 + i=8252 + + + //xs:element[@name='Union'] + + + + KeyValuePair + + i=69 + i=8252 + + + //xs:element[@name='KeyValuePair'] + + + + AdditionalParametersType + + i=69 + i=8252 + + + //xs:element[@name='AdditionalParametersType'] + + + + EphemeralKeyType + + i=69 + i=8252 + + + //xs:element[@name='EphemeralKeyType'] + + + + EndpointType + + i=69 + i=8252 + + + //xs:element[@name='EndpointType'] + + + + RationalNumber + + i=69 + i=8252 + + + //xs:element[@name='RationalNumber'] + + + + Vector + + i=69 + i=8252 + + + //xs:element[@name='Vector'] + + + + 3DVector + + i=69 + i=8252 + + + //xs:element[@name='ThreeDVector'] + + + + CartesianCoordinates + + i=69 + i=8252 + + + //xs:element[@name='CartesianCoordinates'] + + + + 3DCartesianCoordinates + + i=69 + i=8252 + + + //xs:element[@name='ThreeDCartesianCoordinates'] + + + + Orientation + + i=69 + i=8252 + + + //xs:element[@name='Orientation'] + + + + 3DOrientation + + i=69 + i=8252 + + + //xs:element[@name='ThreeDOrientation'] + + + + Frame + + i=69 + i=8252 + + + //xs:element[@name='Frame'] + + + + 3DFrame + + i=69 + i=8252 + + + //xs:element[@name='ThreeDFrame'] + + + + IdentityMappingRuleType + + i=69 + i=8252 + + + //xs:element[@name='IdentityMappingRuleType'] + + + + CurrencyUnitType + + i=69 + i=8252 + + + //xs:element[@name='CurrencyUnitType'] + + + + TrustListDataType + + i=69 + i=8252 + + + //xs:element[@name='TrustListDataType'] + + + + TransactionErrorType + + i=69 + i=8252 + + + //xs:element[@name='TransactionErrorType'] + + + + DataTypeSchemaHeader + + i=69 + i=8252 + + + //xs:element[@name='DataTypeSchemaHeader'] + + + + DataTypeDescription + + i=69 + i=8252 + + + //xs:element[@name='DataTypeDescription'] + + + + StructureDescription + + i=69 + i=8252 + + + //xs:element[@name='StructureDescription'] + + + + EnumDescription + + i=69 + i=8252 + + + //xs:element[@name='EnumDescription'] + + + + SimpleTypeDescription + + i=69 + i=8252 + + + //xs:element[@name='SimpleTypeDescription'] + + + + UABinaryFileDataType + + i=69 + i=8252 + + + //xs:element[@name='UABinaryFileDataType'] + + + + PortableQualifiedName + + i=69 + i=8252 + + + //xs:element[@name='PortableQualifiedName'] + + + + PortableNodeId + + i=69 + i=8252 + + + //xs:element[@name='PortableNodeId'] + + + + UnsignedRationalNumber + + i=69 + i=8252 + + + //xs:element[@name='UnsignedRationalNumber'] + + + + DataSetMetaDataType + + i=69 + i=8252 + + + //xs:element[@name='DataSetMetaDataType'] + + + + FieldMetaData + + i=69 + i=8252 + + + //xs:element[@name='FieldMetaData'] + + + + ConfigurationVersionDataType + + i=69 + i=8252 + + + //xs:element[@name='ConfigurationVersionDataType'] + + + + PublishedDataSetDataType + + i=69 + i=8252 + + + //xs:element[@name='PublishedDataSetDataType'] + + + + PublishedDataSetSourceDataType + + i=69 + i=8252 + + + //xs:element[@name='PublishedDataSetSourceDataType'] + + + + PublishedVariableDataType + + i=69 + i=8252 + + + //xs:element[@name='PublishedVariableDataType'] + + + + PublishedDataItemsDataType + + i=69 + i=8252 + + + //xs:element[@name='PublishedDataItemsDataType'] + + + + PublishedEventsDataType + + i=69 + i=8252 + + + //xs:element[@name='PublishedEventsDataType'] + + + + PublishedDataSetCustomSourceDataType + + i=69 + i=8252 + + + //xs:element[@name='PublishedDataSetCustomSourceDataType'] + + + + DataSetWriterDataType + + i=69 + i=8252 + + + //xs:element[@name='DataSetWriterDataType'] + + + + DataSetWriterTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='DataSetWriterTransportDataType'] + + + + DataSetWriterMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='DataSetWriterMessageDataType'] + + + + PubSubGroupDataType + + i=69 + i=8252 + + + //xs:element[@name='PubSubGroupDataType'] + + + + WriterGroupDataType + + i=69 + i=8252 + + + //xs:element[@name='WriterGroupDataType'] + + + + WriterGroupTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='WriterGroupTransportDataType'] + + + + WriterGroupMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='WriterGroupMessageDataType'] + + + + PubSubConnectionDataType + + i=69 + i=8252 + + + //xs:element[@name='PubSubConnectionDataType'] + + + + ConnectionTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='ConnectionTransportDataType'] + + + + NetworkAddressDataType + + i=69 + i=8252 + + + //xs:element[@name='NetworkAddressDataType'] + + + + NetworkAddressUrlDataType + + i=69 + i=8252 + + + //xs:element[@name='NetworkAddressUrlDataType'] + + + + ReaderGroupDataType + + i=69 + i=8252 + + + //xs:element[@name='ReaderGroupDataType'] + + + + ReaderGroupTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='ReaderGroupTransportDataType'] + + + + ReaderGroupMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='ReaderGroupMessageDataType'] + + + + DataSetReaderDataType + + i=69 + i=8252 + + + //xs:element[@name='DataSetReaderDataType'] + + + + DataSetReaderTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='DataSetReaderTransportDataType'] + + + + DataSetReaderMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='DataSetReaderMessageDataType'] + + + + SubscribedDataSetDataType + + i=69 + i=8252 + + + //xs:element[@name='SubscribedDataSetDataType'] + + + + TargetVariablesDataType + + i=69 + i=8252 + + + //xs:element[@name='TargetVariablesDataType'] + + + + FieldTargetDataType + + i=69 + i=8252 + + + //xs:element[@name='FieldTargetDataType'] + + + + SubscribedDataSetMirrorDataType + + i=69 + i=8252 + + + //xs:element[@name='SubscribedDataSetMirrorDataType'] + + + + PubSubConfigurationDataType + + i=69 + i=8252 + + + //xs:element[@name='PubSubConfigurationDataType'] + + + + StandaloneSubscribedDataSetRefDataType + + i=69 + i=8252 + + + //xs:element[@name='StandaloneSubscribedDataSetRefDataType'] + + + + StandaloneSubscribedDataSetDataType + + i=69 + i=8252 + + + //xs:element[@name='StandaloneSubscribedDataSetDataType'] + + + + SecurityGroupDataType + + i=69 + i=8252 + + + //xs:element[@name='SecurityGroupDataType'] + + + + PubSubKeyPushTargetDataType + + i=69 + i=8252 + + + //xs:element[@name='PubSubKeyPushTargetDataType'] + + + + PubSubConfiguration2DataType + + i=69 + i=8252 + + + //xs:element[@name='PubSubConfiguration2DataType'] + + + + UadpWriterGroupMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='UadpWriterGroupMessageDataType'] + + + + UadpDataSetWriterMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='UadpDataSetWriterMessageDataType'] + + + + UadpDataSetReaderMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='UadpDataSetReaderMessageDataType'] + + + + JsonWriterGroupMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='JsonWriterGroupMessageDataType'] + + + + JsonDataSetWriterMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='JsonDataSetWriterMessageDataType'] + + + + JsonDataSetReaderMessageDataType + + i=69 + i=8252 + + + //xs:element[@name='JsonDataSetReaderMessageDataType'] + + + + QosDataType + + i=69 + i=8252 + + + //xs:element[@name='QosDataType'] + + + + TransmitQosDataType + + i=69 + i=8252 + + + //xs:element[@name='TransmitQosDataType'] + + + + TransmitQosPriorityDataType + + i=69 + i=8252 + + + //xs:element[@name='TransmitQosPriorityDataType'] + + + + ReceiveQosDataType + + i=69 + i=8252 + + + //xs:element[@name='ReceiveQosDataType'] + + + + ReceiveQosPriorityDataType + + i=69 + i=8252 + + + //xs:element[@name='ReceiveQosPriorityDataType'] + + + + DatagramConnectionTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='DatagramConnectionTransportDataType'] + + + + DatagramConnectionTransport2DataType + + i=69 + i=8252 + + + //xs:element[@name='DatagramConnectionTransport2DataType'] + + + + DatagramWriterGroupTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='DatagramWriterGroupTransportDataType'] + + + + DatagramWriterGroupTransport2DataType + + i=69 + i=8252 + + + //xs:element[@name='DatagramWriterGroupTransport2DataType'] + + + + DatagramDataSetReaderTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='DatagramDataSetReaderTransportDataType'] + + + + BrokerConnectionTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='BrokerConnectionTransportDataType'] + + + + BrokerWriterGroupTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='BrokerWriterGroupTransportDataType'] + + + + BrokerDataSetWriterTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='BrokerDataSetWriterTransportDataType'] + + + + BrokerDataSetReaderTransportDataType + + i=69 + i=8252 + + + //xs:element[@name='BrokerDataSetReaderTransportDataType'] + + + + PubSubConfigurationRefDataType + + i=69 + i=8252 + + + //xs:element[@name='PubSubConfigurationRefDataType'] + + + + PubSubConfigurationValueDataType + + i=69 + i=8252 + + + //xs:element[@name='PubSubConfigurationValueDataType'] + + + + AliasNameDataType + + i=69 + i=8252 + + + //xs:element[@name='AliasNameDataType'] + + + + UserManagementDataType + + i=69 + i=8252 + + + //xs:element[@name='UserManagementDataType'] + + + + PriorityMappingEntryType + + i=69 + i=8252 + + + //xs:element[@name='PriorityMappingEntryType'] + + + + ReferenceDescriptionDataType + + i=69 + i=8252 + + + //xs:element[@name='ReferenceDescriptionDataType'] + + + + ReferenceListEntryDataType + + i=69 + i=8252 + + + //xs:element[@name='ReferenceListEntryDataType'] + + + + RolePermissionType + + i=69 + i=8252 + + + //xs:element[@name='RolePermissionType'] + + + + DataTypeDefinition + + i=69 + i=8252 + + + //xs:element[@name='DataTypeDefinition'] + + + + StructureField + + i=69 + i=8252 + + + //xs:element[@name='StructureField'] + + + + StructureDefinition + + i=69 + i=8252 + + + //xs:element[@name='StructureDefinition'] + + + + EnumDefinition + + i=69 + i=8252 + + + //xs:element[@name='EnumDefinition'] + + + + Argument + + i=69 + i=8252 + + + //xs:element[@name='Argument'] + + + + EnumValueType + + i=69 + i=8252 + + + //xs:element[@name='EnumValueType'] + + + + EnumField + + i=69 + i=8252 + + + //xs:element[@name='EnumField'] + + + + OptionSet + + i=69 + i=8252 + + + //xs:element[@name='OptionSet'] + + + + TimeZoneDataType + + i=69 + i=8252 + + + //xs:element[@name='TimeZoneDataType'] + + + + ApplicationDescription + + i=69 + i=8252 + + + //xs:element[@name='ApplicationDescription'] + + + + ServerOnNetwork + + i=69 + i=8252 + + + //xs:element[@name='ServerOnNetwork'] + + + + UserTokenPolicy + + i=69 + i=8252 + + + //xs:element[@name='UserTokenPolicy'] + + + + EndpointDescription + + i=69 + i=8252 + + + //xs:element[@name='EndpointDescription'] + + + + RegisteredServer + + i=69 + i=8252 + + + //xs:element[@name='RegisteredServer'] + + + + DiscoveryConfiguration + + i=69 + i=8252 + + + //xs:element[@name='DiscoveryConfiguration'] + + + + MdnsDiscoveryConfiguration + + i=69 + i=8252 + + + //xs:element[@name='MdnsDiscoveryConfiguration'] + + + + SignedSoftwareCertificate + + i=69 + i=8252 + + + //xs:element[@name='SignedSoftwareCertificate'] + + + + UserIdentityToken + + i=69 + i=8252 + + + //xs:element[@name='UserIdentityToken'] + + + + AnonymousIdentityToken + + i=69 + i=8252 + + + //xs:element[@name='AnonymousIdentityToken'] + + + + UserNameIdentityToken + + i=69 + i=8252 + + + //xs:element[@name='UserNameIdentityToken'] + + + + X509IdentityToken + + i=69 + i=8252 + + + //xs:element[@name='X509IdentityToken'] + + + + IssuedIdentityToken + + i=69 + i=8252 + + + //xs:element[@name='IssuedIdentityToken'] + + + + AddNodesItem + + i=69 + i=8252 + + + //xs:element[@name='AddNodesItem'] + + + + AddReferencesItem + + i=69 + i=8252 + + + //xs:element[@name='AddReferencesItem'] + + + + DeleteNodesItem + + i=69 + i=8252 + + + //xs:element[@name='DeleteNodesItem'] + + + + DeleteReferencesItem + + i=69 + i=8252 + + + //xs:element[@name='DeleteReferencesItem'] + + + + RelativePathElement + + i=69 + i=8252 + + + //xs:element[@name='RelativePathElement'] + + + + RelativePath + + i=69 + i=8252 + + + //xs:element[@name='RelativePath'] + + + + EndpointConfiguration + + i=69 + i=8252 + + + //xs:element[@name='EndpointConfiguration'] + + + + ContentFilterElement + + i=69 + i=8252 + + + //xs:element[@name='ContentFilterElement'] + + + + ContentFilter + + i=69 + i=8252 + + + //xs:element[@name='ContentFilter'] + + + + FilterOperand + + i=69 + i=8252 + + + //xs:element[@name='FilterOperand'] + + + + ElementOperand + + i=69 + i=8252 + + + //xs:element[@name='ElementOperand'] + + + + LiteralOperand + + i=69 + i=8252 + + + //xs:element[@name='LiteralOperand'] + + + + AttributeOperand + + i=69 + i=8252 + + + //xs:element[@name='AttributeOperand'] + + + + SimpleAttributeOperand + + i=69 + i=8252 + + + //xs:element[@name='SimpleAttributeOperand'] + + + + HistoryEvent + + i=69 + i=8252 + + + //xs:element[@name='HistoryEvent'] + + + + MonitoringFilter + + i=69 + i=8252 + + + //xs:element[@name='MonitoringFilter'] + + + + EventFilter + + i=69 + i=8252 + + + //xs:element[@name='EventFilter'] + + + + AggregateConfiguration + + i=69 + i=8252 + + + //xs:element[@name='AggregateConfiguration'] + + + + HistoryEventFieldList + + i=69 + i=8252 + + + //xs:element[@name='HistoryEventFieldList'] + + + + BuildInfo + + i=69 + i=8252 + + + //xs:element[@name='BuildInfo'] + + + + RedundantServerDataType + + i=69 + i=8252 + + + //xs:element[@name='RedundantServerDataType'] + + + + EndpointUrlListDataType + + i=69 + i=8252 + + + //xs:element[@name='EndpointUrlListDataType'] + + + + NetworkGroupDataType + + i=69 + i=8252 + + + //xs:element[@name='NetworkGroupDataType'] + + + + SamplingIntervalDiagnosticsDataType + + i=69 + i=8252 + + + //xs:element[@name='SamplingIntervalDiagnosticsDataType'] + + + + ServerDiagnosticsSummaryDataType + + i=69 + i=8252 + + + //xs:element[@name='ServerDiagnosticsSummaryDataType'] + + + + ServerStatusDataType + + i=69 + i=8252 + + + //xs:element[@name='ServerStatusDataType'] + + + + SessionDiagnosticsDataType + + i=69 + i=8252 + + + //xs:element[@name='SessionDiagnosticsDataType'] + + + + SessionSecurityDiagnosticsDataType + + i=69 + i=8252 + + + //xs:element[@name='SessionSecurityDiagnosticsDataType'] + + + + ServiceCounterDataType + + i=69 + i=8252 + + + //xs:element[@name='ServiceCounterDataType'] + + + + StatusResult + + i=69 + i=8252 + + + //xs:element[@name='StatusResult'] + + + + SubscriptionDiagnosticsDataType + + i=69 + i=8252 + + + //xs:element[@name='SubscriptionDiagnosticsDataType'] + + + + ModelChangeStructureDataType + + i=69 + i=8252 + + + //xs:element[@name='ModelChangeStructureDataType'] + + + + SemanticChangeStructureDataType + + i=69 + i=8252 + + + //xs:element[@name='SemanticChangeStructureDataType'] + + + + Range + + i=69 + i=8252 + + + //xs:element[@name='Range'] + + + + EUInformation + + i=69 + i=8252 + + + //xs:element[@name='EUInformation'] + + + + ComplexNumberType + + i=69 + i=8252 + + + //xs:element[@name='ComplexNumberType'] + + + + DoubleComplexNumberType + + i=69 + i=8252 + + + //xs:element[@name='DoubleComplexNumberType'] + + + + AxisInformation + + i=69 + i=8252 + + + //xs:element[@name='AxisInformation'] + + + + XVType + + i=69 + i=8252 + + + //xs:element[@name='XVType'] + + + + ProgramDiagnosticDataType + + i=69 + i=8252 + + + //xs:element[@name='ProgramDiagnosticDataType'] + + + + ProgramDiagnostic2DataType + + i=69 + i=8252 + + + //xs:element[@name='ProgramDiagnostic2DataType'] + + + + Annotation + + i=69 + i=8252 + + + //xs:element[@name='Annotation'] + + + + Default JSON + + i=12756 + i=76 + + + + Default JSON + + i=14533 + i=76 + + + + Default JSON + + i=16313 + i=76 + + + + Default JSON + + i=17548 + i=76 + + + + Default JSON + + i=15528 + i=76 + + + + Default JSON + + i=18806 + i=76 + + + + Default JSON + + i=18807 + i=76 + + + + Default JSON + + i=18808 + i=76 + + + + Default JSON + + i=18809 + i=76 + + + + Default JSON + + i=18810 + i=76 + + + + Default JSON + + i=18811 + i=76 + + + + Default JSON + + i=18812 + i=76 + + + + Default JSON + + i=18813 + i=76 + + + + Default JSON + + i=18814 + i=76 + + + + Default JSON + + i=15634 + i=76 + + + + Default JSON + + i=23498 + i=76 + + + + Default JSON + + i=12554 + i=76 + + + + Default JSON + + i=32285 + i=76 + + + + Default JSON + + i=15534 + i=76 + + + + Default JSON + + i=14525 + i=76 + + + + Default JSON + + i=15487 + i=76 + + + + Default JSON + + i=15488 + i=76 + + + + Default JSON + + i=15005 + i=76 + + + + Default JSON + + i=15006 + i=76 + + + + Default JSON + + i=24105 + i=76 + + + + Default JSON + + i=24106 + i=76 + + + + Default JSON + + i=24107 + i=76 + + + + Default JSON + + i=14523 + i=76 + + + + Default JSON + + i=14524 + i=76 + + + + Default JSON + + i=14593 + i=76 + + + + Default JSON + + i=15578 + i=76 + + + + Default JSON + + i=15580 + i=76 + + + + Default JSON + + i=14273 + i=76 + + + + Default JSON + + i=15581 + i=76 + + + + Default JSON + + i=15582 + i=76 + + + + Default JSON + + i=25269 + i=76 + + + + Default JSON + + i=15597 + i=76 + + + + Default JSON + + i=15598 + i=76 + + + + Default JSON + + i=15605 + i=76 + + + + Default JSON + + i=15609 + i=76 + + + + Default JSON + + i=15480 + i=76 + + + + Default JSON + + i=15611 + i=76 + + + + Default JSON + + i=15616 + i=76 + + + + Default JSON + + i=15617 + i=76 + + + + Default JSON + + i=15618 + i=76 + + + + Default JSON + + i=15502 + i=76 + + + + Default JSON + + i=15510 + i=76 + + + + Default JSON + + i=15520 + i=76 + + + + Default JSON + + i=15621 + i=76 + + + + Default JSON + + i=15622 + i=76 + + + + Default JSON + + i=15623 + i=76 + + + + Default JSON + + i=15628 + i=76 + + + + Default JSON + + i=15629 + i=76 + + + + Default JSON + + i=15630 + i=76 + + + + Default JSON + + i=15631 + i=76 + + + + Default JSON + + i=14744 + i=76 + + + + Default JSON + + i=15635 + i=76 + + + + Default JSON + + i=15530 + i=76 + + + + Default JSON + + i=23599 + i=76 + + + + Default JSON + + i=23600 + i=76 + + + + Default JSON + + i=23601 + i=76 + + + + Default JSON + + i=25270 + i=76 + + + + Default JSON + + i=23602 + i=76 + + + + Default JSON + + i=15645 + i=76 + + + + Default JSON + + i=15652 + i=76 + + + + Default JSON + + i=15653 + i=76 + + + + Default JSON + + i=15657 + i=76 + + + + Default JSON + + i=15664 + i=76 + + + + Default JSON + + i=15665 + i=76 + + + + Default JSON + + i=23603 + i=76 + + + + Default JSON + + i=23604 + i=76 + + + + Default JSON + + i=23605 + i=76 + + + + Default JSON + + i=23608 + i=76 + + + + Default JSON + + i=23609 + i=76 + + + + Default JSON + + i=17467 + i=76 + + + + Default JSON + + i=23612 + i=76 + + + + Default JSON + + i=15532 + i=76 + + + + Default JSON + + i=23613 + i=76 + + + + Default JSON + + i=23614 + i=76 + + + + Default JSON + + i=15007 + i=76 + + + + Default JSON + + i=15667 + i=76 + + + + Default JSON + + i=15669 + i=76 + + + + Default JSON + + i=15670 + i=76 + + + + Default JSON + + i=25519 + i=76 + + + + Default JSON + + i=25520 + i=76 + + + + Default JSON + + i=23468 + i=76 + + + + Default JSON + + i=24281 + i=76 + + + + Default JSON + + i=25220 + i=76 + + + + Default JSON + + i=32659 + i=76 + + + + Default JSON + + i=32660 + i=76 + + + + Default JSON + + i=96 + i=76 + + + + Default JSON + + i=97 + i=76 + + + + Default JSON + + i=101 + i=76 + + + + Default JSON + + i=99 + i=76 + + + + Default JSON + + i=100 + i=76 + + + + Default JSON + + i=296 + i=76 + + + + Default JSON + + i=7594 + i=76 + + + + Default JSON + + i=102 + i=76 + + + + Default JSON + + i=12755 + i=76 + + + + Default JSON + + i=8912 + i=76 + + + + Default JSON + + i=308 + i=76 + + + + Default JSON + + i=12189 + i=76 + + + + Default JSON + + i=304 + i=76 + + + + Default JSON + + i=312 + i=76 + + + + Default JSON + + i=432 + i=76 + + + + Default JSON + + i=12890 + i=76 + + + + Default JSON + + i=12891 + i=76 + + + + Default JSON + + i=344 + i=76 + + + + Default JSON + + i=316 + i=76 + + + + Default JSON + + i=319 + i=76 + + + + Default JSON + + i=322 + i=76 + + + + Default JSON + + i=325 + i=76 + + + + Default JSON + + i=938 + i=76 + + + + Default JSON + + i=376 + i=76 + + + + Default JSON + + i=379 + i=76 + + + + Default JSON + + i=382 + i=76 + + + + Default JSON + + i=385 + i=76 + + + + Default JSON + + i=537 + i=76 + + + + Default JSON + + i=540 + i=76 + + + + Default JSON + + i=331 + i=76 + + + + Default JSON + + i=583 + i=76 + + + + Default JSON + + i=586 + i=76 + + + + Default JSON + + i=589 + i=76 + + + + Default JSON + + i=592 + i=76 + + + + Default JSON + + i=595 + i=76 + + + + Default JSON + + i=598 + i=76 + + + + Default JSON + + i=601 + i=76 + + + + Default JSON + + i=659 + i=76 + + + + Default JSON + + i=719 + i=76 + + + + Default JSON + + i=725 + i=76 + + + + Default JSON + + i=948 + i=76 + + + + Default JSON + + i=920 + i=76 + + + + Default JSON + + i=338 + i=76 + + + + Default JSON + + i=853 + i=76 + + + + Default JSON + + i=11943 + i=76 + + + + Default JSON + + i=11944 + i=76 + + + + Default JSON + + i=856 + i=76 + + + + Default JSON + + i=859 + i=76 + + + + Default JSON + + i=862 + i=76 + + + + Default JSON + + i=865 + i=76 + + + + Default JSON + + i=868 + i=76 + + + + Default JSON + + i=871 + i=76 + + + + Default JSON + + i=299 + i=76 + + + + Default JSON + + i=874 + i=76 + + + + Default JSON + + i=877 + i=76 + + + + Default JSON + + i=897 + i=76 + + + + Default JSON + + i=884 + i=76 + + + + Default JSON + + i=887 + i=76 + + + + Default JSON + + i=12171 + i=76 + + + + Default JSON + + i=12172 + i=76 + + + + Default JSON + + i=12079 + i=76 + + + + Default JSON + + i=12080 + i=76 + + + + Default JSON + + i=894 + i=76 + + + + Default JSON + + i=24033 + i=76 + + + + Default JSON + + i=891 + i=76 + + + diff --git a/schema/UANodeSet.xsd b/schema/UANodeSet.xsd new file mode 100644 index 00000000..2245ceff --- /dev/null +++ b/schema/UANodeSet.xsd @@ -0,0 +1,501 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schema/uaNodeSet.go b/schema/uaNodeSet.go new file mode 100644 index 00000000..0d55db88 --- /dev/null +++ b/schema/uaNodeSet.go @@ -0,0 +1,349 @@ +// Code generated by xgen. But it has been edited! see EDIT comments for what was changed and why. + +package schema + +import _ "embed" + +//go:embed Opc.Ua.NodeSet2.xml +var OpcUaNodeSet2 []byte + +// UANodeSet ... +type UANodeSet struct { + LastModifiedAttr string `xml:"LastModified,attr,omitempty"` + NamespaceUris *UriTable `xml:"NamespaceUris"` + ServerUris *UriTable `xml:"ServerUris"` + Models *ModelTable `xml:"Models"` + Aliases *AliasTable `xml:"Aliases"` + Extensions *ListOfExtensions `xml:"Extensions"` + UAObject []*UAObject `xml:"UAObject"` + UAVariable []*UAVariable `xml:"UAVariable"` + UAMethod []*UAMethod `xml:"UAMethod"` + UAView []*UAView `xml:"UAView"` + UAObjectType []*UAObjectType `xml:"UAObjectType"` + UAVariableType []*UAVariableType `xml:"UAVariableType"` + UADataType []*UADataType `xml:"UADataType"` + UAReferenceType []*UAReferenceType `xml:"UAReferenceType"` +} + +// UANodeSetChanges ... +type UANodeSetChanges struct { + LastModifiedAttr string `xml:"LastModified,attr,omitempty"` + TransactionIdAttr string `xml:"TransactionId,attr"` + AcceptAllOrNothingAttr bool `xml:"AcceptAllOrNothing,attr,omitempty"` + NamespaceUris *UriTable `xml:"NamespaceUris"` + ServerUris *UriTable `xml:"ServerUris"` + Aliases *AliasTable `xml:"Aliases"` + Extensions *ListOfExtensions `xml:"Extensions"` + NodesToAdd *NodesToAdd `xml:"NodesToAdd"` + ReferencesToAdd *ReferencesToChange `xml:"ReferencesToAdd"` + NodesToDelete *NodesToDelete `xml:"NodesToDelete"` + ReferencesToDelete *ReferencesToChange `xml:"ReferencesToDelete"` +} + +// UANodeSetChangesStatus ... +type UANodeSetChangesStatus struct { + LastModifiedAttr string `xml:"LastModified,attr,omitempty"` + TransactionIdAttr string `xml:"TransactionId,attr"` + NodesToAdd *NodeSetStatusList `xml:"NodesToAdd"` + ReferencesToAdd *NodeSetStatusList `xml:"ReferencesToAdd"` + NodesToDelete *NodeSetStatusList `xml:"NodesToDelete"` + ReferencesToDelete *NodeSetStatusList `xml:"ReferencesToDelete"` +} + +// NodesToAdd ... +type NodesToAdd struct { + UAObject []*UAObject `xml:"UAObject"` + UAVariable []*UAVariable `xml:"UAVariable"` + UAMethod []*UAMethod `xml:"UAMethod"` + UAView []*UAView `xml:"UAView"` + UAObjectType []*UAObjectType `xml:"UAObjectType"` + UAVariableType []*UAVariableType `xml:"UAVariableType"` + UADataType []*UADataType `xml:"UADataType"` + UAReferenceType []*UAReferenceType `xml:"UAReferenceType"` +} + +// NodesToDelete ... +type NodesToDelete struct { + Node []*NodeToDelete `xml:"Node"` +} + +// NodeToDelete ... +type NodeToDelete struct { + DeleteReverseReferencesAttr bool `xml:"DeleteReverseReferences,attr,omitempty"` + *NodeId +} + +// ReferencesToChange ... +type ReferencesToChange struct { + Reference []*ReferenceChange `xml:"Reference"` +} + +// ReferenceChange ... +type ReferenceChange struct { + SourceAttr string `xml:"Source,attr"` + ReferenceTypeAttr string `xml:"ReferenceType,attr"` + IsForwardAttr *bool `xml:"IsForward,attr,omitempty"` // EDIT: this was changed from a bool to a *bool because the default value if this attribute isn't present is true + *NodeId +} + +// NodeSetStatus ... +type NodeSetStatus struct { + CodeAttr uint32 `xml:"Code,attr,omitempty"` + Value string `xml:",chardata"` +} + +// NodeSetStatusList ... +type NodeSetStatusList struct { + Status []*NodeSetStatus `xml:"Status"` +} + +// UriTable ... +type UriTable struct { + Uri []string `xml:"Uri"` +} + +// ModelTableEntry ... +type ModelTableEntry struct { + ModelUriAttr string `xml:"ModelUri,attr"` + XmlSchemaUriAttr string `xml:"XmlSchemaUri,attr,omitempty"` + VersionAttr string `xml:"Version,attr,omitempty"` + PublicationDateAttr string `xml:"PublicationDate,attr,omitempty"` + AccessRestrictionsAttr uint16 `xml:"AccessRestrictions,attr,omitempty"` + RolePermissions *ListOfRolePermissions `xml:"RolePermissions"` + RequiredModel []*ModelTableEntry `xml:"RequiredModel"` +} + +// ModelTable ... +type ModelTable struct { + Model []*ModelTableEntry `xml:"Model"` +} + +// NodeId ... +type NodeId string + +// QualifiedName ... +type QualifiedName string + +// NodeIdAlias ... +type NodeIdAlias struct { + AliasAttr string `xml:"Alias,attr"` + Value string `xml:",chardata"` +} + +// AliasTable ... +type AliasTable struct { + Alias []*NodeIdAlias `xml:"Alias"` +} + +// Locale ... +type Locale string + +// LocalizedText ... +type LocalizedText struct { + LocaleAttr string `xml:"Locale,attr,omitempty"` + Value string `xml:",chardata"` +} + +// WriteMask ... +type WriteMask uint32 + +// EventNotifier ... +type EventNotifier uint8 + +// ValueRank ... +type ValueRank int + +// AccessRestriction ... +type AccessRestriction uint16 + +// ArrayDimensions ... +type ArrayDimensions string + +// SymbolicName ... +type SymbolicName string + +// Duration ... +type Duration float64 + +// AccessLevel ... +type AccessLevel uint32 + +// Reference ... +type Reference struct { + ReferenceTypeAttr string `xml:"ReferenceType,attr"` + IsForwardAttr *bool `xml:"IsForward,attr,omitempty"` // EDIT: this was changed from a bool to a *bool because the default value if this attribute isn't present is true + Value string `xml:",chardata"` +} + +// ListOfReferences ... +type ListOfReferences struct { + Reference []*Reference `xml:"Reference"` +} + +// RolePermission ... +type RolePermission struct { + PermissionsAttr uint32 `xml:"Permissions,attr,omitempty"` + Value string `xml:",chardata"` +} + +// ListOfRolePermissions ... +type ListOfRolePermissions struct { + RolePermission []*RolePermission `xml:"RolePermission"` +} + +// Extension ... +type Extension struct { +} + +// ListOfExtensions ... +type ListOfExtensions struct { + Extension []*Extension `xml:"Extension"` +} + +// ReleaseStatus ... +type ReleaseStatus string + +// UANode ... +type UANode struct { + NodeIdAttr string `xml:"NodeId,attr"` + BrowseNameAttr string `xml:"BrowseName,attr"` + WriteMaskAttr uint32 `xml:"WriteMask,attr,omitempty"` + UserWriteMaskAttr uint32 `xml:"UserWriteMask,attr,omitempty"` + AccessRestrictionsAttr uint16 `xml:"AccessRestrictions,attr,omitempty"` + HasNoPermissionsAttr bool `xml:"HasNoPermissions,attr,omitempty"` + SymbolicNameAttr string `xml:"SymbolicName,attr,omitempty"` + ReleaseStatusAttr string `xml:"ReleaseStatus,attr,omitempty"` + DisplayName []*LocalizedText `xml:"DisplayName"` + Description []*LocalizedText `xml:"Description"` + Category []string `xml:"Category"` + Documentation string `xml:"Documentation"` + References *ListOfReferences `xml:"References"` + RolePermissions *ListOfRolePermissions `xml:"RolePermissions"` + Extensions *ListOfExtensions `xml:"Extensions"` +} + +// UAInstance ... +type UAInstance struct { + ParentNodeIdAttr string `xml:"ParentNodeId,attr,omitempty"` + *UANode +} + +// UAObject ... +type UAObject struct { + EventNotifierAttr uint8 `xml:"EventNotifier,attr,omitempty"` + *UAInstance +} + +// Value ... +type Value struct { +} + +// UAVariable ... +type UAVariable struct { + DataTypeAttr string `xml:"DataType,attr,omitempty"` + ValueRankAttr int `xml:"ValueRank,attr,omitempty"` + ArrayDimensionsAttr string `xml:"ArrayDimensions,attr,omitempty"` + AccessLevelAttr uint32 `xml:"AccessLevel,attr,omitempty"` + UserAccessLevelAttr uint32 `xml:"UserAccessLevel,attr,omitempty"` + MinimumSamplingIntervalAttr float64 `xml:"MinimumSamplingInterval,attr,omitempty"` + HistorizingAttr bool `xml:"Historizing,attr,omitempty"` + Value *Value `xml:"Value"` + Translation []*TranslationType `xml:"Translation"` + *UAInstance +} + +// UAMethodArgument ... +type UAMethodArgument struct { + Name string `xml:"Name"` + Description []*LocalizedText `xml:"Description"` +} + +// UAMethod ... +type UAMethod struct { + ExecutableAttr bool `xml:"Executable,attr,omitempty"` + UserExecutableAttr bool `xml:"UserExecutable,attr,omitempty"` + MethodDeclarationIdAttr string `xml:"MethodDeclarationId,attr,omitempty"` + ArgumentDescription []*UAMethodArgument `xml:"ArgumentDescription"` + *UAInstance +} + +// TranslationType ... +type TranslationType struct { + Text []*LocalizedText `xml:"Text"` + Field []*StructureTranslationType `xml:"Field"` +} + +// StructureTranslationType ... +type StructureTranslationType struct { + NameAttr string `xml:"Name,attr"` + Text []*LocalizedText `xml:"Text"` +} + +// UAView ... +type UAView struct { + ContainsNoLoopsAttr bool `xml:"ContainsNoLoops,attr,omitempty"` + EventNotifierAttr uint8 `xml:"EventNotifier,attr,omitempty"` + *UAInstance +} + +// UAType ... +type UAType struct { + IsAbstractAttr bool `xml:"IsAbstract,attr,omitempty"` + *UANode +} + +// UAObjectType ... +type UAObjectType struct { + *UAType +} + +// UAVariableType ... +type UAVariableType struct { + DataTypeAttr string `xml:"DataType,attr,omitempty"` + ValueRankAttr int `xml:"ValueRank,attr,omitempty"` + ArrayDimensionsAttr string `xml:"ArrayDimensions,attr,omitempty"` + Value *Value `xml:"Value"` + *UAType +} + +// DataTypePurpose ... +type DataTypePurpose string + +// UADataType ... +type UADataType struct { + PurposeAttr string `xml:"Purpose,attr,omitempty"` + Definition *DataTypeDefinition `xml:"Definition"` + *UAType +} + +// DataTypeDefinition ... +type DataTypeDefinition struct { + NameAttr string `xml:"Name,attr"` + SymbolicNameAttr string `xml:"SymbolicName,attr,omitempty"` + IsUnionAttr bool `xml:"IsUnion,attr,omitempty"` + IsOptionSetAttr bool `xml:"IsOptionSet,attr,omitempty"` + BaseTypeAttr string `xml:"BaseType,attr,omitempty"` + Field []*DataTypeField `xml:"Field"` +} + +// DataTypeField ... +type DataTypeField struct { + NameAttr string `xml:"Name,attr"` + SymbolicNameAttr string `xml:"SymbolicName,attr,omitempty"` + DataTypeAttr string `xml:"DataType,attr,omitempty"` + ValueRankAttr int `xml:"ValueRank,attr,omitempty"` + ArrayDimensionsAttr string `xml:"ArrayDimensions,attr,omitempty"` + MaxStringLengthAttr uint32 `xml:"MaxStringLength,attr,omitempty"` + ValueAttr int `xml:"Value,attr,omitempty"` + IsOptionalAttr bool `xml:"IsOptional,attr,omitempty"` + AllowSubTypesAttr bool `xml:"AllowSubTypes,attr,omitempty"` + DisplayName []*LocalizedText `xml:"DisplayName"` + Description []*LocalizedText `xml:"Description"` +} + +// UAReferenceType ... +type UAReferenceType struct { + SymmetricAttr bool `xml:"Symmetric,attr,omitempty"` + InverseName []*LocalizedText `xml:"InverseName"` + *UAType +} diff --git a/schema/update-schema.sh b/schema/update-schema.sh index cf765abb..30eeebca 100755 --- a/schema/update-schema.sh +++ b/schema/update-schema.sh @@ -8,3 +8,5 @@ script_dir=$(cd $(dirname $0); pwd) wget -nv https://raw.githubusercontent.com/OPCFoundation/UA-Nodeset/master/Schema/NodeIds.csv -O "${script_dir}/NodeIds.csv" wget -nv https://raw.githubusercontent.com/OPCFoundation/UA-Nodeset/master/Schema/StatusCode.csv -O "${script_dir}/StatusCode.csv" wget -nv https://raw.githubusercontent.com/OPCFoundation/UA-Nodeset/master/Schema/Opc.Ua.Types.bsd -O "${script_dir}/Opc.Ua.Types.bsd" +wget -nv https://raw.githubusercontent.com/OPCFoundation/UA-Nodeset/master/DotNet/Opc.Ua.PredefinedNodes.xml -O "${script_dir}/Opc.Ua.PredefinedNodes.xml" +wget -nv https://raw.githubusercontent.com/OPCFoundation/UA-Nodeset/master/Schema/Opc.Ua.NodeSet2.xml -O "${script_dir}/Opc.Ua.NodeSet2.xml" \ No newline at end of file diff --git a/server/attribute_service.go b/server/attribute_service.go new file mode 100644 index 00000000..68900707 --- /dev/null +++ b/server/attribute_service.go @@ -0,0 +1,120 @@ +package server + +import ( + "time" + + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +// AttributeService implements the Attribute Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.10 +type AttributeService struct { + srv *Server +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.10.2 +func (s *AttributeService) Read(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.ReadRequest](r) + if err != nil { + return nil, err + } + + results := make([]*ua.DataValue, len(req.NodesToRead)) + for i, n := range req.NodesToRead { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("read: node=%s attr=%s", n.NodeID, n.AttributeID) + } + + ns, err := s.srv.Namespace(int(n.NodeID.Namespace())) + if err != nil { + results[i] = &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBad, + } + continue + } + results[i] = ns.Attribute(n.NodeID, n.AttributeID) + + } + + response := &ua.ReadResponse{ + ResponseHeader: responseHeader(req.RequestHeader.RequestHandle, ua.StatusOK), + Results: results, + } + + return response, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.10.3 +func (s *AttributeService) HistoryRead(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.HistoryReadRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.10.4 +func (s *AttributeService) Write(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + + req, err := safeReq[*ua.WriteRequest](r) + if err != nil { + return nil, err + } + + status := make([]ua.StatusCode, len(req.NodesToWrite)) + + for i := range req.NodesToWrite { + n := req.NodesToWrite[i] + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("write: node=%s attr=%v", n.NodeID, n.AttributeID) + } + + ns, err := s.srv.Namespace(int(n.NodeID.Namespace())) + if err != nil { + status[i] = ua.StatusBadNodeNotInView + } + + status[i] = ns.SetAttribute(n.NodeID, n.AttributeID, n.Value) + + } + response := &ua.WriteResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + Results: status, + DiagnosticInfos: []*ua.DiagnosticInfo{}, + } + + return response, nil + +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.10.5 +func (s *AttributeService) HistoryUpdate(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.HistoryUpdateRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} diff --git a/server/attrs/attrs.go b/server/attrs/attrs.go new file mode 100644 index 00000000..21eb01b8 --- /dev/null +++ b/server/attrs/attrs.go @@ -0,0 +1,27 @@ +package attrs + +import "github.com/gopcua/opcua/ua" + +func BrowseName(name string) *ua.QualifiedName { + return &ua.QualifiedName{Name: name} +} + +func DisplayName(name, locale string) *ua.LocalizedText { + lt := &ua.LocalizedText{Text: name, Locale: locale} + lt.UpdateMask() + return lt +} + +func InverseName(name, locale string) *ua.LocalizedText { + lt := &ua.LocalizedText{Text: name, Locale: locale} + lt.UpdateMask() + return lt +} + +func NodeClass(n ua.NodeClass) uint32 { + return uint32(n) +} + +func DataType(id *ua.NodeID) *ua.ExpandedNodeID { + return &ua.ExpandedNodeID{NodeID: id} +} diff --git a/server/channel_broker.go b/server/channel_broker.go new file mode 100644 index 00000000..89d09f00 --- /dev/null +++ b/server/channel_broker.go @@ -0,0 +1,161 @@ +package server + +import ( + "context" + "crypto/rsa" + "io" + mrand "math/rand" + "sync" + "time" + + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uacp" + "github.com/gopcua/opcua/uasc" +) + +type channelBroker struct { + endpoints map[string]*ua.EndpointDescription + + wg sync.WaitGroup + + // mu protects concurrent modification of s, secureChannelID, and secureTokenID + mu sync.RWMutex + // s is a slice of all SecureChannels watched by the channelBroker + s map[uint32]*uasc.SecureChannel + + // Next Secure Channel ID to issue to a client + secureChannelID uint32 + + // Next Token ID to issue to a client + secureTokenID uint32 + + // msgChan is the common channel that all messages from all channels + // get funneled into for handling + msgChan chan *uasc.MessageBody + logger Logger +} + +func newChannelBroker(logger Logger) *channelBroker { + rng := mrand.New(mrand.NewSource(time.Now().UnixNano())) + return &channelBroker{ + endpoints: make(map[string]*ua.EndpointDescription), + s: make(map[uint32]*uasc.SecureChannel), + msgChan: make(chan *uasc.MessageBody), + secureChannelID: uint32(rng.Int31()), + secureTokenID: uint32(rng.Int31()), + logger: logger, + } +} + +// RegisterConn connects a new UACP connection to the channel broker's list +// of connections and starts waiting for data on it. Data is pushed onto the broker's +// Response channel +// Blocks until the context is done, the connection closes, or a critical error +func (c *channelBroker) RegisterConn(ctx context.Context, conn *uacp.Conn, localCert []byte, localKey *rsa.PrivateKey) error { + cfg := defaultChannelConfig() + cfg.Certificate = localCert + cfg.LocalKey = localKey + + c.mu.Lock() + c.secureChannelID++ + c.secureTokenID++ + secureChannelID := c.secureChannelID + secureTokenID := c.secureTokenID + sequenceNumber := uint32(mrand.Int31n(1023) + 1) + c.mu.Unlock() + + errch := make(chan error, 1) + sc, err := uasc.NewServerSecureChannel( + "", // todo(fs): this is most likely wrong + conn, + cfg, + errch, + secureChannelID, + sequenceNumber, + secureTokenID, + ) + if err != nil { + if c.logger != nil { + c.logger.Error("Error creating secure channel for new connection: %s", err) + } + return err + } + + c.mu.Lock() + c.s[secureChannelID] = sc + if c.logger != nil { + c.logger.Info("Registered new channel (id %d) now at %d channels", secureChannelID, len(c.s)) + } + c.mu.Unlock() + c.wg.Add(1) +outer: + for { + select { + case <-ctx.Done(): + // todo(fs): return error? + if c.logger != nil { + c.logger.Warn("Context done, closing Secure Channel %d", secureChannelID) + } + break outer + + default: + msg := sc.Receive(ctx) + if msg.Err == io.EOF { + if c.logger != nil { + c.logger.Warn("Secure Channel %d closed", secureChannelID) + } + break outer + } else if msg.Err != nil { + if c.logger != nil { + c.logger.Error("Secure Channel %d error: %s", secureChannelID, msg.Err) + } + break outer + } + // todo(fs): honor ctx + c.msgChan <- msg + } + } + + c.mu.Lock() + delete(c.s, secureChannelID) + c.mu.Unlock() + c.wg.Done() + + return nil +} + +// Close gracefully closes all secure channels +// todo(fs): use ctx +func (c *channelBroker) Close() error { + var err error + c.mu.Lock() + for _, s := range c.s { + s.Close() + } + c.mu.Unlock() + + // Wait for all goroutines to finish or timeout + done := make(chan struct{}) + go func() { + defer close(done) + c.wg.Wait() + }() + select { + case <-done: + case <-time.After(10 * time.Second): // todo(fs): magic number + if c.logger != nil { + c.logger.Error("CloseAll: timed out waiting for channels to exit") + } + } + + return err +} + +func (c *channelBroker) ReadMessage(ctx context.Context) *uasc.MessageBody { + select { + case <-ctx.Done(): + return nil + case msg := <-c.msgChan: + return msg + } +} diff --git a/server/discovery_service.go b/server/discovery_service.go new file mode 100644 index 00000000..7ba271a2 --- /dev/null +++ b/server/discovery_service.go @@ -0,0 +1,103 @@ +package server + +import ( + "strings" + + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +// DiscoveryService implements the Discovery Service Set +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.4 +type DiscoveryService struct { + srv *Server +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.4.2 +func (s *DiscoveryService) FindServers(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.FindServersRequest](r) + if err != nil { + return nil, err + } + + response := &ua.FindServersResponse{ + ResponseHeader: responseHeader(req.RequestHeader.RequestHandle, ua.StatusOK), + Servers: []*ua.ApplicationDescription{ + s.srv.Endpoints()[0].Server, + }, + } + + return response, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.4.3 +func (s *DiscoveryService) FindServersOnNetwork(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.FindServersOnNetworkRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.4.4 +func (s *DiscoveryService) GetEndpoints(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.GetEndpointsRequest](r) + if err != nil { + return nil, err + } + + requrl := strings.ToLower(req.EndpointURL) + matching_endpoints := make([]*ua.EndpointDescription, 0) + for i := range s.srv.endpoints { + ep := s.srv.endpoints[i] + if strings.ToLower(ep.EndpointURL) == requrl { + matching_endpoints = append(matching_endpoints, ep) + } + } + + response := &ua.GetEndpointsResponse{ + ResponseHeader: responseHeader(req.RequestHeader.RequestHandle, ua.StatusOK), + Endpoints: matching_endpoints, + } + + return response, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.4.5 +func (s *DiscoveryService) RegisterServer(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.RegisterServerRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.4.6 +func (s *DiscoveryService) RegisterServer2(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.RegisterServer2Request](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} diff --git a/server/method_service.go b/server/method_service.go new file mode 100644 index 00000000..ce41a42b --- /dev/null +++ b/server/method_service.go @@ -0,0 +1,26 @@ +package server + +import ( + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +// MethodService implements the Method Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.11 +type MethodService struct { + srv *Server +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.11.2 +func (s *MethodService) Call(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.CallRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} diff --git a/server/monitored_item_service.go b/server/monitored_item_service.go new file mode 100644 index 00000000..a561148c --- /dev/null +++ b/server/monitored_item_service.go @@ -0,0 +1,369 @@ +package server + +import ( + "errors" + "sync" + "sync/atomic" + "time" + + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" + "golang.org/x/exp/slices" +) + +// MonitoredItemService implements the MonitoredItem Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.12 +type MonitoredItemService struct { + SubService *SubscriptionService + Mu sync.Mutex + + // items tracked by ID + Items map[uint32]*MonitoredItem + // items tracked by node + Nodes map[string][]*MonitoredItem + // items tracked by subscription + Subs map[uint32][]*MonitoredItem + + id uint32 +} + +// function to get rid of all references to a specific Monitored Item (by ID number) +func (s *MonitoredItemService) DeleteMonitoredItem(id uint32) { + s.Mu.Lock() + defer s.Mu.Unlock() + item, ok := s.Items[id] + if !ok { + // id does not exist. + return + } + + if item == nil || item.Req == nil || item.Req.ItemToMonitor == nil || item.Req.ItemToMonitor.NodeID == nil { + return + } + nodeid := item.Req.ItemToMonitor.NodeID.String() + + if s == nil || s.Nodes == nil || s.Nodes[nodeid] == nil { + return + } + + // delete the monitored item from all nodes + // was using slices.DeleteFunc but that is from a newer go version so we'll do it manually with /exp/slices + // we've got to go backwards because we're deleting from the slice as we go. + // I'm guessing this loop is less efficient than slices.DeleteFunc but it's what we've got. + delete(s.Items, id) + for i := len(s.Nodes[nodeid]) - 1; i >= 0; i-- { + n := s.Nodes[nodeid][i] + if n == nil { + continue + } + if n.ID == id { + slices.Delete(s.Nodes[nodeid], i, i+1) + } + } + //slices.DeleteFunc(s.Nodes[nodeid], func(i *MonitoredItem) bool { return i.ID == item.ID }) + if len(s.Nodes[nodeid]) == 0 { + delete(s.Nodes, nodeid) + } + + for i := len(s.Subs[item.Sub.ID]) - 1; i >= 0; i-- { + n := s.Subs[item.Sub.ID][i] + if n == nil { + continue + } + if n.ID == id { + slices.Delete(s.Subs[item.Sub.ID], i, i+1) + } + } + //slices.DeleteFunc(s.Subs[item.Sub.ID], func(i *MonitoredItem) bool { return i.ID == item.ID }) + if len(s.Subs[item.Sub.ID]) == 0 { + delete(s.Subs, item.Sub.ID) + } +} + +// function to delete all monitored items associated with a specific sub (as indicated by id number) +func (s *MonitoredItemService) DeleteSub(id uint32) { + s.Mu.Lock() + items, ok := s.Subs[id] + delete(s.Subs, id) + s.Mu.Unlock() + if !ok { + return + } + for i := range items { + if items[i] != nil { + s.DeleteMonitoredItem(items[i].ID) + } + } +} + +func (s *MonitoredItemService) ChangeNotification(n *ua.NodeID) { + + s.Mu.Lock() + defer s.Mu.Unlock() + items, ok := s.Nodes[n.String()] + + if !ok { + // this node isn't monitored - don't have to do anything. + return + } + + ns, err := s.SubService.srv.Namespace(int(n.Namespace())) + + for i := range items { + item := items[i] + if item == nil { + continue + } + val := new(ua.MonitoredItemNotification) + val.ClientHandle = item.Req.RequestedParameters.ClientHandle + if err != nil { + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Warn("error getting namespace %d: %v", n.Namespace(), err) + } + val.Value = &ua.DataValue{} + val.Value.Status = ua.StatusBad + val.Value.EncodingMask |= ua.DataValueStatusCode + item.Sub.NotifyChannel <- val + continue + } + dv := ns.Attribute(n, item.Req.ItemToMonitor.AttributeID) + val.Value = dv + item.Sub.NotifyChannel <- val + } + +} + +func (s *MonitoredItemService) NextID() uint32 { + i := atomic.AddUint32(&s.id, 1) + if i == 0 { + i = atomic.AddUint32(&s.id, 1) + } + return i +} + +type MonitoredItem struct { + ID uint32 + Sub *Subscription + Req *ua.MonitoredItemCreateRequest + + //TODO: use this + Mode ua.MonitoringMode +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.12.2 +func (s *MonitoredItemService) CreateMonitoredItems(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.CreateMonitoredItemsRequest](r) + if err != nil { + return nil, err + } + s.Mu.Lock() + defer s.Mu.Unlock() + + count := len(req.ItemsToCreate) + + res := make([]*ua.MonitoredItemCreateResult, count) + + subID := req.SubscriptionID + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Debug("Creating monitored items for sub #%d", subID) + } + s.SubService.Mu.Lock() + sub, ok := s.SubService.Subs[subID] + s.SubService.Mu.Unlock() + if !ok { + return nil, errors.New("sub doesn't exist") + } + + sess := s.SubService.srv.Session(req.RequestHeader) + if sub.Session.AuthTokenID.String() != sess.AuthTokenID.String() { + return nil, errors.New("not your subscription, bro") + } + + for i := range req.ItemsToCreate { + itemreq := req.ItemsToCreate[i] + nodeid := itemreq.ItemToMonitor.NodeID + item := MonitoredItem{ + ID: s.NextID(), + Sub: sub, + Req: itemreq, + } + + // book keeping of the new item + s.Items[item.ID] = &item + list, ok := s.Nodes[item.Req.ItemToMonitor.NodeID.String()] + if !ok { + list = make([]*MonitoredItem, 0, 1) + } + s.Nodes[item.Req.ItemToMonitor.NodeID.String()] = append(list, &item) + + list, ok = s.Subs[item.Sub.ID] + if !ok { + list = make([]*MonitoredItem, 0, 1) + } + s.Subs[item.Sub.ID] = append(list, &item) + + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Debug("Adding monitored item '%s' to sub #%d as %d->%d", + nodeid.String(), + subID, + item.ID, + itemreq.RequestedParameters.ClientHandle) + } + res[i] = &ua.MonitoredItemCreateResult{ + StatusCode: ua.StatusOK, + MonitoredItemID: item.ID, + RevisedSamplingInterval: sub.RevisedPublishingInterval, + RevisedQueueSize: 1, + FilterResult: ua.NewExtensionObject(nil), + } + // do an initial update for the nodeids in the background. + // These lock the mutex so we can't do them inline here. + // This will cause them to happen once we unlock. + go s.ChangeNotification(nodeid) + + } + + resp := &ua.CreateMonitoredItemsResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + Results: res, // []StatusCode + DiagnosticInfos: []*ua.DiagnosticInfo{}, // []*DiagnosticInfo + } + + return resp, nil + +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.12.3 +func (s *MonitoredItemService) ModifyMonitoredItems(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.ModifyMonitoredItemsRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.12.4 +func (s *MonitoredItemService) SetMonitoringMode(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.SetMonitoringModeRequest](r) + if err != nil { + return nil, err + } + s.Mu.Lock() + defer s.Mu.Unlock() + + results := make([]ua.StatusCode, len(req.MonitoredItemIDs)) + + sess := s.SubService.srv.Session(req.RequestHeader) + + for i := range req.MonitoredItemIDs { + id := req.MonitoredItemIDs[i] + item, ok := s.Items[id] + + if item.Sub.Session.AuthTokenID.String() != sess.AuthTokenID.String() { + results[i] = ua.StatusBadSessionIDInvalid + } + + if !ok { + results[i] = ua.StatusBadMonitoredItemIDInvalid + continue + } + item.Mode = req.MonitoringMode + results[i] = ua.StatusOK + } + + return &ua.SetMonitoringModeResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + Results: results, + DiagnosticInfos: []*ua.DiagnosticInfo{}, + }, nil + +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.12.5 +func (s *MonitoredItemService) SetTriggering(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.SetTriggeringRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.12.6 +func (s *MonitoredItemService) DeleteMonitoredItems(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.SubService.srv.cfg.logger != nil { + s.SubService.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.DeleteMonitoredItemsRequest](r) + if err != nil { + return nil, err + } + + s.Mu.Lock() + defer s.Mu.Unlock() + + sess := s.SubService.srv.Session(req.RequestHeader) + + results := make([]ua.StatusCode, len(req.MonitoredItemIDs)) + for i := range req.MonitoredItemIDs { + id := req.MonitoredItemIDs[i] + item, ok := s.Items[id] + if !ok { + results[i] = ua.StatusBadMonitoredItemIDInvalid + } + + if item.Sub.Session.AuthTokenID.String() != sess.AuthTokenID.String() { + results[i] = ua.StatusBadSessionIDInvalid + } + + // this function gets the lock so we need to do it in the background so it can happen after our lock is released. + go s.DeleteMonitoredItem(id) + results[i] = ua.StatusOK + } + + response := &ua.DeleteMonitoredItemsResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + Results: results, + DiagnosticInfos: []*ua.DiagnosticInfo{}, + } + return response, nil + +} diff --git a/server/namespace_map.go b/server/namespace_map.go new file mode 100644 index 00000000..dcbabf7c --- /dev/null +++ b/server/namespace_map.go @@ -0,0 +1,415 @@ +package server + +import ( + "sync" + "time" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server/attrs" + "github.com/gopcua/opcua/ua" +) + +// This namespaces give a convenient way to have data mapped to the OPC server +// without having to map your application data to the OCP-UA data abstraction +// +// It (currently) supports ints, floats, strings, and timestamps. No maps inside of maps and no arrays. +// +// To notify subscribers of changes, be sure to call ChangeNotification(key) after changing the value. +// To be notified of changes from the opc-ua server to the map, receive on ExternalNotification channel +type MapNamespace struct { + srv *Server + name string + Mu sync.RWMutex + Data map[string]any + + // This can be used to be alerted when a value is changed from the opc server + ExternalNotification chan string + + id uint16 +} + +// Get the value associated with key from the MapNamespace. +// This function handles locking and getting the value. +// +// Returns nil if the value doesn't exist. +func (s *MapNamespace) GetValue(key string) any { + s.Mu.RLock() + defer s.Mu.RUnlock() + return s.Data[key] +} + +// update the value associated with a key and trigger the change notification +// to the OPC server +func (s *MapNamespace) SetValue(key string, value any) { + s.Mu.Lock() + defer s.Mu.Unlock() + s.Data[key] = value + s.ChangeNotification(key) +} + +// This function is used to notify OPC UA subscribers if a key was changed without using the +// SetValue() function +func (s *MapNamespace) ChangeNotification(key string) { + s.srv.ChangeNotification(ua.NewStringNodeID(s.id, key)) +} + +func NewMapNamespace(srv *Server, name string) *MapNamespace { + mrw := MapNamespace{ + srv: srv, + name: name, + Data: make(map[string]any), + ExternalNotification: make(chan string), + } + srv.AddNamespace(&mrw) + return &mrw +} + +func (s *MapNamespace) ID() uint16 { + return s.id +} +func (ns *MapNamespace) SetID(id uint16) { + ns.id = id +} + +func (ns *MapNamespace) Browse(bd *ua.BrowseDescription) *ua.BrowseResult { + ns.Mu.RLock() + defer ns.Mu.RUnlock() + + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Debug("BrowseRequest: id=%s mask=%08b\n", bd.NodeID, bd.ResultMask) + ns.srv.cfg.logger.Debug("Browse req for %s", bd.NodeID.String()) + } + if bd.NodeID.IntID() != id.RootFolder && bd.NodeID.IntID() != id.ObjectsFolder { + refs := make([]*ua.ReferenceDescription, 0) + return &ua.BrowseResult{ + StatusCode: ua.StatusGood, + References: refs, + } + //return &ua.BrowseResult{StatusCode: ua.StatusBadNodeIDUnknown} + } + + if bd.NodeID.IntID() == id.RootFolder { + + refs := make([]*ua.ReferenceDescription, 1) + newid := ua.NewNumericNodeID(ns.id, id.ObjectsFolder) + expnewid := ua.NewNumericExpandedNodeID(ns.id, id.ObjectsFolder) + refs[0] = &ua.ReferenceDescription{ + ReferenceTypeID: newid, + NodeID: expnewid, + BrowseName: &ua.QualifiedName{NamespaceIndex: ns.id, Name: "Objects"}, + DisplayName: &ua.LocalizedText{EncodingMask: ua.LocalizedTextText, Text: "Objects"}, + TypeDefinition: expnewid, + } + + return &ua.BrowseResult{ + StatusCode: ua.StatusGood, + References: refs, + } + + } + + refs := make([]*ua.ReferenceDescription, len(ns.Data)) + + keyid := 0 + for k := range ns.Data { + key := k + refid := ua.NewNumericNodeID(0, id.HasComponent) + expnewid := ua.NewStringExpandedNodeID(ns.id, key) + + refs[keyid] = &ua.ReferenceDescription{ + ReferenceTypeID: refid, + IsForward: true, + NodeID: expnewid, + BrowseName: &ua.QualifiedName{NamespaceIndex: ns.ID(), Name: key}, + DisplayName: &ua.LocalizedText{EncodingMask: ua.LocalizedTextText, Text: key}, + NodeClass: ua.NodeClassVariable, // when support is added for nested maps, this will be NodeClassObject + TypeDefinition: expnewid, + } + keyid++ + } + + return &ua.BrowseResult{ + StatusCode: ua.StatusGood, + References: refs, + } + +} + +func (ns *MapNamespace) Attribute(n *ua.NodeID, a ua.AttributeID) *ua.DataValue { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Debug("read: node=%s attr=%s", n.String(), a) + } + + if n.IntID() != 0 { + // this is not one of our normal tags. + if n.IntID() != id.ObjectsFolder { + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBadNodeIDInvalid, + } + } + + attrval, err := ns.Objects().Attribute(a) + if err != nil { + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBadAttributeIDInvalid, + } + } + + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode | ua.DataValueValue, + ServerTimestamp: time.Now(), + Status: ua.StatusOK, + Value: attrval.Value, + } + + } + + dv := &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBad, + } + + key := n.StringID() + + var err error + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Debug("Read req for %s", key) + ns.srv.cfg.logger.Debug("'%s' Data at read: %v", ns.name, ns.Data) + } + + // because our data is native go types we don't have any of the ua "attributes" attached to it. + // so depending on what attribute the client wants, we'll inspect the data and return the appropriate + // thing + switch a { + + case ua.AttributeIDNodeID: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant(n) + + // we are going to use the node id directly to look it up from our data map. + case ua.AttributeIDValue: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + v, ok := ns.Data[key] + if !ok { + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBadNodeIDUnknown, + } + } + switch tv := v.(type) { + case string: + dv.Value = ua.MustVariant(tv) + case int: + // we can't use an int because it is of unspecified length. I'm going to use int64 so that we don't + // have to worry about cutting data off. probably. + dv.Value = ua.MustVariant(int64(tv)) + case int32: + dv.Value = ua.MustVariant(tv) + case float32: + dv.Value = ua.MustVariant(tv) + case float64: + dv.Value = ua.MustVariant(tv) + case bool: + dv.Value = ua.MustVariant(tv) + default: + dv.Value = ua.MustVariant(tv) + } + // nothing in this namespace has an ID Description + case ua.AttributeIDDescription: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant(&ua.LocalizedText{EncodingMask: ua.LocalizedTextText, Text: ""}) + + case ua.AttributeIDBrowseName: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant(attrs.BrowseName(key)) + case ua.AttributeIDDisplayName: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant(attrs.DisplayName(key, key)) + case ua.AttributeIDAccessLevel: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + level := byte(ua.AccessLevelExTypeCurrentWrite | ua.AccessLevelExTypeCurrentRead) + dv.Value = ua.MustVariant(level) + + case ua.AttributeIDNodeClass: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant(int32(ua.NodeClassVariable)) + // nothing in this namespace has event notifiers + case ua.AttributeIDEventNotifier: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant(int16(0)) + + // values are in section 5.1.2 of the standard. + // https://reference.opcfoundation.org/Core/Part6/v104/docs/5.1.2 + case ua.AttributeIDDataType: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + v := ns.Data[key] + switch v.(type) { + case string: + dv.Value, err = ua.NewVariant(ua.NewNumericNodeID(0, 12)) + if err != nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("problem creating variant: %v", err) + } + } + case int: + // we can't use an int because it is of unspecified length. I'm going to use int64 so that we don't + // have to worry about cutting data off. + dv.Value, err = ua.NewVariant(ua.NewNumericNodeID(0, 6)) + if err != nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("problem creating variant: %v", err) + } + } + case int32: + dv.Value, err = ua.NewVariant(ua.NewNumericNodeID(0, 6)) + if err != nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("problem creating variant: %v", err) + } + } + case float32: + dv.Value, err = ua.NewVariant(ua.NewNumericNodeID(0, 10)) + if err != nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("problem creating variant: %v", err) + } + } + case float64: + dv.Value, err = ua.NewVariant(ua.NewNumericNodeID(0, 11)) + if err != nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("problem creating variant: %v", err) + } + } + case bool: + dv.Value, err = ua.NewVariant(ua.NewNumericNodeID(0, 1)) + if err != nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("problem creating variant: %v", err) + } + } + default: + dv.Value, err = ua.NewVariant(ua.NewNumericNodeID(0, 24)) + if err != nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("problem creating variant: %v", err) + } + } + } + + // when we support arrays this will have to change. + case ua.AttributeIDValueRank: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant(int32(-1)) + + // when we support arrays this will have to change. + case ua.AttributeIDArrayDimensions: + dv.Status = ua.StatusOK + dv.EncodingMask |= ua.DataValueValue + dv.Value = ua.MustVariant([]uint32{}) + default: + return dv + } + + if dv.Value == nil { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Warn("bad dv value") + } + } else { + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Debug("Read '%s' = '%v' (%v)", key, dv.Value, dv.Value.Value()) + } + } + + return dv +} + +func (s *MapNamespace) SetAttribute(node *ua.NodeID, attr ua.AttributeID, val *ua.DataValue) ua.StatusCode { + + s.Mu.Lock() + defer s.Mu.Unlock() + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("'%s' Data pre-write: %v", s.name, s.Data) + } + + key := node.StringID() + + // we would normally look up the node in our actual address space, but since that's dumb, we're just + // going to use the node id directly to look it up from our data map. + if attr == ua.AttributeIDValue { + v := val.Value.Value() + s.Data[key] = v + } + + // notify the opc ua server the value has changed. + s.srv.ChangeNotification(node) + // notify the non-opc application the value has changed. + select { + case s.ExternalNotification <- key: + default: + } + + return ua.StatusOK +} + +func (ns *MapNamespace) Name() string { + return ns.name +} +func (ns *MapNamespace) AddNode(n *Node) *Node { + return n +} +func (ns *MapNamespace) Node(id *ua.NodeID) *Node { + return nil + +} +func (ns *MapNamespace) Objects() *Node { + oid := ua.NewNumericNodeID(ns.ID(), id.ObjectsFolder) + //eoid := ua.NewNumericExpandedNodeID(ns.ID(), id.ObjectsFolder) + typedef := ua.NewNumericExpandedNodeID(0, id.ObjectsFolder) + //reftype := ua.NewTwoByteNodeID(uint8(id.HasComponent)) // folder + n := NewNode( + oid, + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDNodeClass: ua.MustVariant(int32(ua.NodeClassObject)), + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName(ns.name)), + ua.AttributeIDDisplayName: ua.MustVariant(attrs.DisplayName(ns.name, ns.name)), + ua.AttributeIDDescription: ua.MustVariant(uint32(ua.NodeClassObject)), + ua.AttributeIDDataType: ua.MustVariant(typedef), + ua.AttributeIDEventNotifier: ua.MustVariant(int16(0)), + }, + []*ua.ReferenceDescription{}, + nil, + ) + return n + +} +func (ns *MapNamespace) Root() *Node { + n := NewNode( + ua.NewNumericNodeID(ns.ID(), id.RootFolder), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDNodeClass: ua.MustVariant(int32(ua.NodeClassObject)), + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("Root")), + ua.AttributeIDDisplayName: ua.MustVariant(attrs.DisplayName("Root", "")), + }, + []*ua.ReferenceDescription{}, + nil, + ) + return n + +} diff --git a/server/namespace_node.go b/server/namespace_node.go new file mode 100644 index 00000000..102613da --- /dev/null +++ b/server/namespace_node.go @@ -0,0 +1,277 @@ +package server + +import ( + "sync" + "sync/atomic" + "time" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server/attrs" + "github.com/gopcua/opcua/ua" +) + +// the base "node-centric" namespace +type NodeNameSpace struct { + srv *Server + name string + mu sync.RWMutex + nodes []*Node + m map[string]*Node + id uint16 + nodeid_sequence uint32 + + ExternalNotification chan *ua.NodeID +} + +func (ns *NodeNameSpace) GetNextNodeID() uint32 { + if ns.nodeid_sequence < 100 { + ns.nodeid_sequence = 100 + } + return atomic.AddUint32(&(ns.nodeid_sequence), 1) +} + +func NewNodeNameSpace(srv *Server, name string) *NodeNameSpace { + ns := &NodeNameSpace{ + srv: srv, + name: name, + nodes: make([]*Node, 0), + m: make(map[string]*Node), + ExternalNotification: make(chan *ua.NodeID), + } + srv.AddNamespace(ns) + + //objectsNode := NewFolderNode(ua.NewNumericNodeID(ns.id, id.ObjectsFolder), ns.name) + oid := ua.NewNumericNodeID(ns.ID(), id.ObjectsFolder) + //eoid := ua.NewNumericExpandedNodeID(ns.ID(), id.ObjectsFolder) + typedef := ua.NewNumericExpandedNodeID(0, id.ObjectsFolder) + //reftype := ua.NewTwoByteNodeID(uint8(id.HasComponent)) // folder + objectsNode := NewNode( + oid, + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassObject)), + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName(ns.name)), + ua.AttributeIDDisplayName: ua.MustVariant(attrs.DisplayName(ns.name, ns.name)), + ua.AttributeIDDescription: ua.MustVariant(uint32(ua.NodeClassObject)), + ua.AttributeIDDataType: ua.MustVariant(typedef), + ua.AttributeIDEventNotifier: ua.MustVariant(int16(0)), + }, + []*ua.ReferenceDescription{}, + nil, + ) + + ns.AddNode(objectsNode) + + return ns + +} + +// This function is to notify opc subscribers if a node was changed +// without using the SetAttribute method +func (s *NodeNameSpace) ChangeNotification(nodeid *ua.NodeID) { + s.srv.ChangeNotification(nodeid) +} + +func (ns *NodeNameSpace) Name() string { + return ns.name +} + +func NewNameSpace(name string) *NodeNameSpace { + return &NodeNameSpace{name: name, m: map[string]*Node{}} +} + +func (as *NodeNameSpace) AddNode(n *Node) *Node { + as.mu.Lock() + defer as.mu.Unlock() + + /* + nn := &Node{ + id: n.id, + attr: maps.Clone(n.attr), + refs: slices.Clone(n.refs), + val: n.val, + ns: as, + } + */ + + // todo(fs): this is wrong since this leaves the old node in the list. + as.nodes = append(as.nodes, n) + k := n.ID().String() + + as.m[k] = n + return n +} + +func (as *NodeNameSpace) AddNewVariableNode(name string, value any) *Node { + n := NewVariableNode(ua.NewNumericNodeID(as.id, as.GetNextNodeID()), name, value) + as.AddNode(n) + return n +} +func (as *NodeNameSpace) AddNewVariableStringNode(name string, value any) *Node { + n := NewVariableNode(ua.NewStringNodeID(as.id, name), name, value) + as.AddNode(n) + return n +} + +func (as *NodeNameSpace) Attribute(id *ua.NodeID, attr ua.AttributeID) *ua.DataValue { + n := as.Node(id) + if n == nil { + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBadNodeIDUnknown, + } + } + var a *AttrValue + var err error + + switch attr { + case ua.AttributeIDNodeID: + a = &AttrValue{Value: ua.MustVariant(id)} + case ua.AttributeIDEventNotifier: + // TODO: this is a hack to force the EventNotifier to false for everything. + // If at some point someone or something needs to use this, this will have to go away and be + // fixed properly. + a = &AttrValue{Value: ua.MustVariant(byte(0))} + case ua.AttributeIDNodeClass: + a, err = n.Attribute(attr) + if err != nil { + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBadAttributeIDInvalid, + } + } + // TODO: we need int32 instead of uint32 here. this isn't the right place to fix it, but it is a bandaid + x, ok := a.Value.Value().(uint32) + if ok { + a.Value = ua.MustVariant(int32(x)) + } + default: + a, err = n.Attribute(attr) + } + + if err != nil { + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode, + ServerTimestamp: time.Now(), + Status: ua.StatusBadAttributeIDInvalid, + } + } + return &ua.DataValue{ + EncodingMask: ua.DataValueServerTimestamp | ua.DataValueStatusCode | ua.DataValueValue, + ServerTimestamp: time.Now(), + Status: ua.StatusOK, + Value: a.Value, + } +} + +func (as *NodeNameSpace) Node(id *ua.NodeID) *Node { + as.mu.RLock() + defer as.mu.RUnlock() + if id == nil { + return nil + } + k := id.String() + + n := as.m[k] + if n == nil { + return nil + } + return n +} + +func (as *NodeNameSpace) Objects() *Node { + of := ua.NewNumericNodeID(as.id, id.ObjectsFolder) + return as.Node(of) +} + +func (as *NodeNameSpace) Root() *Node { + return as.Node(RootFolder) +} + +func (ns *NodeNameSpace) Browse(bd *ua.BrowseDescription) *ua.BrowseResult { + ns.mu.RLock() + defer ns.mu.RUnlock() + + if ns.srv.cfg.logger != nil { + ns.srv.cfg.logger.Debug("BrowseRequest: id=%s mask=%08b\n", bd.NodeID, bd.ResultMask) + } + + n := ns.Node(bd.NodeID) + if n == nil { + return &ua.BrowseResult{StatusCode: ua.StatusBadNodeIDUnknown} + } + + refs := make([]*ua.ReferenceDescription, 0, len(n.refs)) + + for i := range n.refs { + r := n.refs[i] + // we can't have nils in these or the encoder will fail. + if r.NodeID == nil || r.BrowseName == nil || r.DisplayName == nil || r.TypeDefinition == nil { + continue + } + + // see if this is a ref the client was interested in. + if !suitableRef(ns.srv, bd, r) { + continue + } + + td := ns.srv.Node(r.NodeID.NodeID) + + rf := &ua.ReferenceDescription{ + ReferenceTypeID: r.ReferenceTypeID, + IsForward: r.IsForward, + NodeID: r.NodeID, + BrowseName: r.BrowseName, + DisplayName: r.DisplayName, + NodeClass: r.NodeClass, + TypeDefinition: td.DataType(), + } + + if rf.ReferenceTypeID.IntID() == id.HasTypeDefinition && rf.IsForward { + // this one has to be first! + refs = append([]*ua.ReferenceDescription{rf}, refs...) + } else { + refs = append(refs, rf) + } + } + + return &ua.BrowseResult{ + StatusCode: ua.StatusGood, + References: refs, + } + +} + +func (ns *NodeNameSpace) ID() uint16 { + return ns.id +} + +func (ns *NodeNameSpace) SetID(id uint16) { + ns.id = id +} +func (as *NodeNameSpace) SetAttribute(id *ua.NodeID, attr ua.AttributeID, val *ua.DataValue) ua.StatusCode { + n := as.Node(id) + if n == nil { + return ua.StatusBadNodeIDUnknown + } + + access, err := n.Attribute(ua.AttributeIDUserAccessLevel) + if err == nil { + x := access.Value.Value() + _ = x + return ua.StatusBadUserAccessDenied + } + + err = n.SetAttribute(attr, *val) + if err != nil { + return ua.StatusBadAttributeIDInvalid + } + as.srv.ChangeNotification(id) + select { + case as.ExternalNotification <- id: + default: + } + + return ua.StatusOK +} diff --git a/server/namespaces.go b/server/namespaces.go new file mode 100644 index 00000000..b56da946 --- /dev/null +++ b/server/namespaces.go @@ -0,0 +1,49 @@ +// Copyright 2018-2020 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package server + +import ( + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/ua" +) + +var ( + ObjectsFolder = ua.NewNumericNodeID(0, id.ObjectsFolder) + RootFolder = ua.NewNumericNodeID(0, id.RootFolder) +) + +// These are all the functions a namespace needs in order to provide nodes into the server +type NameSpace interface { + // Name of the namespace. Per the standard it should be an URI. + Name() string + + // This function should create a new node + AddNode(n *Node) *Node + + // This function should lookup and return the node indicated by the Node ID + Node(id *ua.NodeID) *Node + + // This function should return the base Objects node that contains other nodes + Objects() *Node + + // This function should return the root node + Root() *Node + + // This is the function to list all available nodes to the client that is browsing. + // The BrowseDescription has the root node of the browse and what kind of nodes the + // client is looking for. The Browse Result should have the list of matching nodes. + Browse(req *ua.BrowseDescription) *ua.BrowseResult + + // ID and SetID are the namespace ID number of this namespace. When you add it to the server + // with srv.AddNamespace(xxx) it will set these for you. + ID() uint16 + SetID(uint16) + + // These are the functions for reading and writing arbitrary attributes. The most common + // is the value attribute, but many clients also read the datatype and description attributes. + // as well as attributes related to array bounds + Attribute(*ua.NodeID, ua.AttributeID) *ua.DataValue + SetAttribute(*ua.NodeID, ua.AttributeID, *ua.DataValue) ua.StatusCode +} diff --git a/server/node.go b/server/node.go new file mode 100644 index 00000000..d32d45fc --- /dev/null +++ b/server/node.go @@ -0,0 +1,310 @@ +package server + +import ( + "log" + "time" + + "golang.org/x/exp/maps" + "golang.org/x/exp/slices" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server/attrs" + "github.com/gopcua/opcua/server/refs" + "github.com/gopcua/opcua/ua" +) + +type Attributes map[ua.AttributeID]*ua.Variant + +type References []*ua.ReferenceDescription + +type ValueFunc func() *ua.Variant + +type AttrValue struct { + Value *ua.Variant + SourceTimestamp time.Time +} + +func NewAttrValue(v *ua.Variant) *AttrValue { + return &AttrValue{Value: v} +} + +type Node struct { + id *ua.NodeID + attr Attributes + refs References + val ValueFunc + + ns NameSpace +} + +func NewNode(id *ua.NodeID, attr Attributes, refs References, val ValueFunc) *Node { + n := &Node{id, attr, refs, val, nil} + n.sanitize() + return n +} + +func NewFolderNode(nodeID *ua.NodeID, name string) *Node { + reftype := ua.NewTwoByteNodeID(uint8(id.HasComponent)) // folder + eoid := ua.NewNumericExpandedNodeID(nodeID.Namespace(), id.ObjectsFolder) + typedef := ua.NewNumericExpandedNodeID(0, id.ObjectsFolder) + n := NewNode( + nodeID, + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassObject)), + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName(name)), + ua.AttributeIDDisplayName: ua.MustVariant(attrs.DisplayName(name, name)), + ua.AttributeIDDescription: ua.MustVariant(ua.NodeClassObject), + ua.AttributeIDEventNotifier: ua.MustVariant(int16(0)), + }, + []*ua.ReferenceDescription{{ + ReferenceTypeID: reftype, + IsForward: true, + NodeID: eoid, + BrowseName: &ua.QualifiedName{NamespaceIndex: nodeID.Namespace(), Name: name}, + DisplayName: &ua.LocalizedText{EncodingMask: ua.LocalizedTextText, Text: name}, + NodeClass: ua.NodeClassObject, + TypeDefinition: typedef, + }}, + nil, + ) + return n +} + +func NewVariableNode(nodeID *ua.NodeID, name string, value any) *Node { + //eoid := ua.NewNumericExpandedNodeID(nodeID.Namespace(), nodeID.IntID()) + vf, ok := value.(func() *ua.Variant) + if !ok { + typedef := ua.NewNumericExpandedNodeID(0, id.VariableNode) + n := NewNode( + nodeID, + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName(name)), + ua.AttributeIDDisplayName: ua.MustVariant(attrs.DisplayName(name, name)), + ua.AttributeIDDescription: ua.MustVariant(uint32(ua.NodeClassVariable)), + ua.AttributeIDDataType: ua.MustVariant(typedef), + ua.AttributeIDEventNotifier: ua.MustVariant(int16(0)), + }, + []*ua.ReferenceDescription{}, + func() *ua.Variant { + return ua.MustVariant(value) + }, + ) + return n + } + typedef := ua.NewNumericExpandedNodeID(0, id.VariableNode) + n := NewNode( + nodeID, + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName(name)), + ua.AttributeIDDisplayName: ua.MustVariant(attrs.DisplayName(name, name)), + ua.AttributeIDDescription: ua.MustVariant(uint32(ua.NodeClassVariable)), + ua.AttributeIDDataType: ua.MustVariant(typedef), + ua.AttributeIDEventNotifier: ua.MustVariant(int16(0)), + }, + []*ua.ReferenceDescription{}, + vf, + ) + return n +} + +func (n *Node) sanitize() { + if n.attr == nil { + n.attr = Attributes{} + } + if n.attr[ua.AttributeIDBrowseName] == nil { + n.SetBrowseName("") + } + if n.attr[ua.AttributeIDDisplayName] == nil { + n.SetDisplayName("", "") + } + if n.DisplayName().Text == "" { + n.SetDisplayName(n.BrowseName().Name, "") + } + if n.attr[ua.AttributeIDDescription] == nil { + n.SetDescription("", "") + } + //if n.attr[ua.AttributeIDDataType] == nil { + //n.attr[ua.AttributeIDDataType] = ua.MustVariant(ua.NewTwoByteExpandedNodeID(0)) + //} +} + +func (n *Node) ID() *ua.NodeID { + return n.id +} + +func (n *Node) Value() *ua.Variant { + if n.val == nil { + return nil + } + return n.val() +} + +func (n *Node) Attribute(id ua.AttributeID) (*AttrValue, error) { + switch { + case id == ua.AttributeIDValue: + if n.val != nil { + return NewAttrValue(n.val()), nil + } + return nil, ua.StatusBadAttributeIDInvalid + case n.attr == nil: + return nil, ua.StatusBadAttributeIDInvalid + default: + if v := n.attr[id]; v != nil { + return NewAttrValue(v), nil + } + return nil, ua.StatusBadAttributeIDInvalid + } +} +func (n *Node) SetAttribute(id ua.AttributeID, val ua.DataValue) error { + switch { + case id == ua.AttributeIDValue: + + // TODO: probably need to do some type checking here. + // And some permissions tests + n.val = func() *ua.Variant { + return ua.MustVariant(val.Value.Value()) + } + + return nil + default: + n.attr[id] = val.Value + } + return ua.StatusBadNodeAttributesInvalid +} + +func (n *Node) BrowseName() *ua.QualifiedName { + v := n.attr[ua.AttributeIDBrowseName] + if v == nil || v.Value() == nil { + return &ua.QualifiedName{} + } + return v.Value().(*ua.QualifiedName) +} + +func (n *Node) SetBrowseName(s string) { + n.attr[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{Name: s}) +} + +func (n *Node) DisplayName() *ua.LocalizedText { + v := n.attr[ua.AttributeIDDisplayName] + if v == nil || v.Value() == nil { + return &ua.LocalizedText{} + } + val := v.Value().(*ua.LocalizedText) + val.UpdateMask() + return val +} + +func (n *Node) SetDisplayName(text, locale string) { + lt := &ua.LocalizedText{Text: text, Locale: locale} + lt.UpdateMask() + n.attr[ua.AttributeIDDisplayName] = ua.MustVariant(lt) +} + +func (n *Node) Description() *ua.LocalizedText { + v := n.attr[ua.AttributeIDDescription] + if v == nil || v.Value() == nil { + return &ua.LocalizedText{} + } + return v.Value().(*ua.LocalizedText) +} + +func (n *Node) SetDescription(text, locale string) { + n.attr[ua.AttributeIDDescription] = ua.MustVariant(&ua.LocalizedText{Text: text, Locale: locale}) +} + +func (n *Node) DataType() *ua.ExpandedNodeID { + if n == nil { + log.Printf("n was nil!") + return ua.NewTwoByteExpandedNodeID(0) + } + v := n.attr[ua.AttributeIDDataType] + if v == nil || v.Value() == nil { + // if we have a type definition, return that? + for i := range n.refs { + r := n.refs[i] + if r.ReferenceTypeID == nil { + log.Printf("reftypeid was nil!") + } + if r.ReferenceTypeID.IntID() == id.HasTypeDefinition && r.IsForward { + return r.NodeID + } + } + return ua.NewTwoByteExpandedNodeID(0) + } + return v.Value().(*ua.ExpandedNodeID) +} + +func (n *Node) SetNodeClass(nc ua.NodeClass) { + n.attr[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(nc)) +} + +func (n *Node) NodeClass() ua.NodeClass { + v := n.attr[ua.AttributeIDNodeClass] + if v == nil || v.Value() == nil { + return ua.NodeClassObject + } + vi32, ok := v.Value().(int32) + if !ok { + vui32, ok := v.Value().(uint32) + if !ok { + return ua.NodeClassObject + } + return ua.NodeClass(int32(vui32)) + } + return ua.NodeClass(vi32) + +} + +func (n *Node) AddObject(o *Node) *Node { + nn := &Node{ + id: o.id, + attr: maps.Clone(o.attr), + refs: slices.Clone(o.refs), + } + if n.attr == nil { + n.attr = Attributes{} + } + nn.SetNodeClass(ua.NodeClassObject) + n.refs = append(n.refs, refs.Organizes(nn.id, nn.BrowseName().Name, nn.DisplayName().Text, nn.DataType())) + return n.ns.AddNode(nn) +} + +func (n *Node) AddVariable(o *Node) *Node { + nn := &Node{ + id: o.id, + attr: maps.Clone(o.attr), + refs: slices.Clone(o.refs), + val: o.val, + } + if n.attr == nil { + n.attr = Attributes{} + } + nn.SetNodeClass(ua.NodeClassVariable) + n.refs = append(n.refs, refs.Organizes(nn.id, nn.BrowseName().Name, nn.DisplayName().Text, nn.DataType())) + return nn +} + +type RefType int + +const ( + RefTypeIDHasComponent = id.HasComponent + RefTypeIDOrganizes = id.Organizes +) + +func (n *Node) AddRef(o *Node, rt RefType, forward bool) { + //eoid := ua.NewNumericExpandedNodeID(o.ns.ID(), o.) + eoid := ua.NewExpandedNodeID(o.ID(), "", 0) + + ref := ua.ReferenceDescription{ + ReferenceTypeID: ua.NewNumericNodeID(0, uint32(rt)), //o.refs[0].ReferenceTypeID, + IsForward: forward, + NodeID: eoid, + BrowseName: o.BrowseName(), + DisplayName: o.DisplayName(), + NodeClass: o.NodeClass(), + TypeDefinition: o.DataType(), + } + n.refs = append(n.refs, &ref) +} diff --git a/server/node_mgmt_service.go b/server/node_mgmt_service.go new file mode 100644 index 00000000..084f5e4f --- /dev/null +++ b/server/node_mgmt_service.go @@ -0,0 +1,65 @@ +package server + +import ( + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +// NodeManagementService implements the Node Management Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.7 +type NodeManagementService struct { + srv *Server +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.7.2 +func (s *NodeManagementService) AddNodes(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.AddNodesRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.7.3 +func (s *NodeManagementService) AddReferences(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.AddReferencesRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.7.4 +func (s *NodeManagementService) DeleteNodes(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.DeleteNodesRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.7.5 +func (s *NodeManagementService) DeleteReferences(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.DeleteReferencesRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} diff --git a/server/nodeset2_import.go b/server/nodeset2_import.go new file mode 100644 index 00000000..56ebb319 --- /dev/null +++ b/server/nodeset2_import.go @@ -0,0 +1,558 @@ +package server + +import ( + "fmt" + "log" + + "github.com/gopcua/opcua/schema" + "github.com/gopcua/opcua/ua" +) + +func (srv *Server) ImportNodeSet(nodes *schema.UANodeSet) error { + err := srv.namespacesImportNodeSet(nodes) + if err != nil { + return fmt.Errorf("problem creating namespaces: %w", err) + } + err = srv.nodesImportNodeSet(nodes) + if err != nil { + return fmt.Errorf("problem creating nodes: %w", err) + } + srv.refsImportNodeSet(nodes) + if err != nil { + return fmt.Errorf("problem creating references: %w", err) + } + return nil +} + +func (srv *Server) namespacesImportNodeSet(nodes *schema.UANodeSet) error { + if nodes.NamespaceUris == nil { + return nil + } + for i := range nodes.NamespaceUris.Uri { + _ = NewNodeNameSpace(srv, nodes.NamespaceUris.Uri[i]) + } + return nil +} + +func (srv *Server) nodesImportNodeSet(nodes *schema.UANodeSet) error { + + log.Printf("New Node Set: %s", nodes.LastModifiedAttr) + + reftypes := make(map[string]*schema.UAReferenceType) + + // the first thing we have to do is go thorugh and define all the nodes. + // set up the reference types. + for i := range nodes.UAReferenceType { + rt := nodes.UAReferenceType[i] + reftypes[rt.BrowseNameAttr] = rt // sometimes they use browse name + reftypes[rt.NodeIdAttr] = rt // sometimes they use node id + + nid := ua.MustParseNodeID(rt.NodeIdAttr) + + var attrs Attributes = make(map[ua.AttributeID]*ua.Variant) + attrs[ua.AttributeIDAccessRestrictions] = ua.MustVariant(rt.AccessRestrictionsAttr) + attrs[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{NamespaceIndex: nid.Namespace(), Name: rt.BrowseNameAttr}) + attrs[ua.AttributeIDIsAbstract] = ua.MustVariant(rt.IsAbstractAttr) + attrs[ua.AttributeIDUserWriteMask] = ua.MustVariant(rt.UserWriteMaskAttr) + attrs[ua.AttributeIDSymmetric] = ua.MustVariant(rt.SymmetricAttr) + attrs[ua.AttributeIDWriteMask] = ua.MustVariant(rt.WriteMaskAttr) + if len(rt.DisplayName) > 0 { + attrs[ua.AttributeIDDisplayName] = ua.MustVariant(ua.NewLocalizedText(rt.DisplayName[0].Value)) + } + if len(rt.InverseName) > 0 { + attrs[ua.AttributeIDInverseName] = ua.MustVariant(ua.NewLocalizedText(rt.InverseName[0].Value)) + } else { + attrs[ua.AttributeIDInverseName] = ua.MustVariant(ua.NewLocalizedText("")) + } + if len(rt.Description) > 0 { + attrs[ua.AttributeIDDescription] = ua.MustVariant(ua.NewLocalizedText(rt.Description[0].Value)) + } + attrs[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(ua.NodeClassReferenceType)) + + var refs References = make([]*ua.ReferenceDescription, 0) + + n := NewNode(nid, attrs, refs, nil) + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // This namespace doesn't exist. + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("Could Not Find Namespace %d", nid.Namespace()) + } + return err + } + ns.AddNode(n) + } + + // set up the data types. + for i := range nodes.UADataType { + dt := nodes.UADataType[i] + nid := ua.MustParseNodeID(dt.NodeIdAttr) + + var attrs Attributes = make(map[ua.AttributeID]*ua.Variant) + attrs[ua.AttributeIDAccessRestrictions] = ua.MustVariant(dt.AccessRestrictionsAttr) + attrs[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{NamespaceIndex: nid.Namespace(), Name: dt.BrowseNameAttr}) + attrs[ua.AttributeIDIsAbstract] = ua.MustVariant(dt.IsAbstractAttr) + attrs[ua.AttributeIDUserWriteMask] = ua.MustVariant(dt.UserWriteMaskAttr) + attrs[ua.AttributeIDWriteMask] = ua.MustVariant(dt.WriteMaskAttr) + if len(dt.DisplayName) > 0 { + attrs[ua.AttributeIDDisplayName] = ua.MustVariant(ua.NewLocalizedText(dt.DisplayName[0].Value)) + } + if len(dt.Description) > 0 { + attrs[ua.AttributeIDDescription] = ua.MustVariant(ua.NewLocalizedText(dt.Description[0].Value)) + } + attrs[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(ua.NodeClassDataType)) + + var refs References = make([]*ua.ReferenceDescription, 0) + + n := NewNode(nid, attrs, refs, nil) + + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // This namespace doesn't exist. + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("Could Not Find Namespace %d", nid.Namespace()) + } + return err + } + ns.AddNode(n) + } + + // set up the object types + for i := range nodes.UAObjectType { + ot := nodes.UAObjectType[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + var attrs Attributes = make(map[ua.AttributeID]*ua.Variant) + attrs[ua.AttributeIDAccessRestrictions] = ua.MustVariant(ot.AccessRestrictionsAttr) + attrs[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{NamespaceIndex: nid.Namespace(), Name: ot.BrowseNameAttr}) + attrs[ua.AttributeIDIsAbstract] = ua.MustVariant(ot.IsAbstractAttr) + attrs[ua.AttributeIDUserWriteMask] = ua.MustVariant(ot.UserWriteMaskAttr) + attrs[ua.AttributeIDWriteMask] = ua.MustVariant(ot.WriteMaskAttr) + if len(ot.DisplayName) > 0 { + attrs[ua.AttributeIDDisplayName] = ua.MustVariant(ua.NewLocalizedText(ot.DisplayName[0].Value)) + } + if len(ot.Description) > 0 { + attrs[ua.AttributeIDDescription] = ua.MustVariant(ua.NewLocalizedText(ot.Description[0].Value)) + } + attrs[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(ua.NodeClassObjectType)) + + var refs References = make([]*ua.ReferenceDescription, 0) + + n := NewNode(nid, attrs, refs, nil) + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // This namespace doesn't exist. + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("Could Not Find Namespace %d", nid.Namespace()) + } + return err + } + ns.AddNode(n) + } + + // set up the variable Types + for i := range nodes.UAVariableType { + ot := nodes.UAVariableType[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + var attrs Attributes = make(map[ua.AttributeID]*ua.Variant) + attrs[ua.AttributeIDAccessRestrictions] = ua.MustVariant(ot.AccessRestrictionsAttr) + attrs[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{NamespaceIndex: nid.Namespace(), Name: ot.BrowseNameAttr}) + attrs[ua.AttributeIDUserWriteMask] = ua.MustVariant(ot.UserWriteMaskAttr) + attrs[ua.AttributeIDWriteMask] = ua.MustVariant(ot.WriteMaskAttr) + if len(ot.DisplayName) > 0 { + attrs[ua.AttributeIDDisplayName] = ua.MustVariant(ua.NewLocalizedText(ot.DisplayName[0].Value)) + } + if len(ot.Description) > 0 { + attrs[ua.AttributeIDDescription] = ua.MustVariant(ua.NewLocalizedText(ot.Description[0].Value)) + } + attrs[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(ua.NodeClassVariableType)) + + var refs References = make([]*ua.ReferenceDescription, 0) + + n := NewNode(nid, attrs, refs, nil) + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // This namespace doesn't exist. + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("Could Not Find Namespace %d", nid.Namespace()) + } + return err + } + ns.AddNode(n) + } + + // set up the variables + for i := range nodes.UAVariable { + ot := nodes.UAVariable[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + var attrs Attributes = make(map[ua.AttributeID]*ua.Variant) + attrs[ua.AttributeIDAccessRestrictions] = ua.MustVariant(ot.AccessRestrictionsAttr) + attrs[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{NamespaceIndex: nid.Namespace(), Name: ot.BrowseNameAttr}) + attrs[ua.AttributeIDUserWriteMask] = ua.MustVariant(ot.UserWriteMaskAttr) + attrs[ua.AttributeIDWriteMask] = ua.MustVariant(ot.WriteMaskAttr) + if len(ot.DisplayName) > 0 { + attrs[ua.AttributeIDDisplayName] = ua.MustVariant(ua.NewLocalizedText(ot.DisplayName[0].Value)) + } + if len(ot.Description) > 0 { + attrs[ua.AttributeIDDescription] = ua.MustVariant(ua.NewLocalizedText(ot.Description[0].Value)) + } + attrs[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(ua.NodeClassVariable)) + + var refs References = make([]*ua.ReferenceDescription, 0) + + n := NewNode(nid, attrs, refs, nil) + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // This namespace doesn't exist. + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("Could Not Find Namespace %d", nid.Namespace()) + } + return err + } + ns.AddNode(n) + } + + // set up the methods + for i := range nodes.UAMethod { + ot := nodes.UAMethod[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + var attrs Attributes = make(map[ua.AttributeID]*ua.Variant) + attrs[ua.AttributeIDAccessRestrictions] = ua.MustVariant(ot.AccessRestrictionsAttr) + attrs[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{NamespaceIndex: nid.Namespace(), Name: ot.BrowseNameAttr}) + attrs[ua.AttributeIDUserWriteMask] = ua.MustVariant(ot.UserWriteMaskAttr) + attrs[ua.AttributeIDWriteMask] = ua.MustVariant(ot.WriteMaskAttr) + if len(ot.DisplayName) > 0 { + attrs[ua.AttributeIDDisplayName] = ua.MustVariant(ua.NewLocalizedText(ot.DisplayName[0].Value)) + } + if len(ot.Description) > 0 { + attrs[ua.AttributeIDDescription] = ua.MustVariant(ua.NewLocalizedText(ot.Description[0].Value)) + } + attrs[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(ua.NodeClassMethod)) + + var refs References = make([]*ua.ReferenceDescription, 0) + + n := NewNode(nid, attrs, refs, nil) + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // This namespace doesn't exist. + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("Could Not Find Namespace %d", nid.Namespace()) + } + return err + } + ns.AddNode(n) + } + + // set up the objects + for i := range nodes.UAObject { + ot := nodes.UAObject[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + if ot.NodeIdAttr == "i=85" { + log.Printf("doing objects.") + } + var attrs Attributes = make(map[ua.AttributeID]*ua.Variant) + attrs[ua.AttributeIDAccessRestrictions] = ua.MustVariant(ot.AccessRestrictionsAttr) + attrs[ua.AttributeIDBrowseName] = ua.MustVariant(&ua.QualifiedName{NamespaceIndex: nid.Namespace(), Name: ot.BrowseNameAttr}) + attrs[ua.AttributeIDUserWriteMask] = ua.MustVariant(ot.UserWriteMaskAttr) + attrs[ua.AttributeIDWriteMask] = ua.MustVariant(ot.WriteMaskAttr) + if len(ot.DisplayName) > 0 { + attrs[ua.AttributeIDDisplayName] = ua.MustVariant(ua.NewLocalizedText(ot.DisplayName[0].Value)) + } + if len(ot.Description) > 0 { + attrs[ua.AttributeIDDescription] = ua.MustVariant(ua.NewLocalizedText(ot.Description[0].Value)) + } + + attrs[ua.AttributeIDNodeClass] = ua.MustVariant(uint32(ua.NodeClassObject)) + + var refs References = make([]*ua.ReferenceDescription, 0) + + n := NewNode(nid, attrs, refs, nil) + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // This namespace doesn't exist. + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("Could Not Find Namespace %d", nid.Namespace()) + } + return err + } + ns.AddNode(n) + } + + return nil +} +func (srv *Server) refsImportNodeSet(nodes *schema.UANodeSet) error { + + log.Printf("New Node Set: %s", nodes.LastModifiedAttr) + + failures := 0 + reftypes := make(map[string]*schema.UAReferenceType) + for i := range nodes.UAReferenceType { + rt := nodes.UAReferenceType[i] + reftypes[rt.BrowseNameAttr] = rt // sometimes they use browse name + reftypes[rt.NodeIdAttr] = rt // sometimes they use node id + } + + aliases := make(map[string]string) + for i := range nodes.Aliases.Alias { + alias := nodes.Aliases.Alias[i] + aliases[alias.AliasAttr] = alias.Value + } + + // any of the aliases could be reference types, so we have to check them all and add them to the reftypes map + // if they are. + for alias := range aliases { + aliasID := ua.MustParseNodeID(aliases[alias]) + refnode := srv.Node(aliasID) + if refnode == nil { + if srv.cfg.logger != nil { + srv.cfg.logger.Warn("error loading alias %s", alias) + } + continue + } + rt := new(schema.UAReferenceType) + rt.UAType = new(schema.UAType) + rt.UAType.UANode = new(schema.UANode) + rt.BrowseNameAttr = alias + rt.NodeIdAttr = aliases[alias] + isSymmetricValue, err := refnode.Attribute(ua.AttributeIDSymmetric) + if err == nil { + rt.SymmetricAttr = isSymmetricValue.Value.Value().(bool) + } + + _, ok := reftypes[alias] + if !ok { + reftypes[alias] = rt // sometimes they use browse name + } else { + if srv.cfg.logger != nil { + srv.cfg.logger.Error("Duplicate reference type %s", alias) + } + continue + } + + _, ok = reftypes[aliases[alias]] + if !ok { + reftypes[aliases[alias]] = rt // sometimes they use node id + } else { + if srv.cfg.logger != nil { + srv.cfg.logger.Error("Duplicate reference type %s", aliases[alias]) + } + continue + } + + } + + // the first thing we have to do is go thorugh and define all the nodes. + // set up the reference types. + for i := range nodes.UAReferenceType { + rt := nodes.UAReferenceType[i] + + nodeid := ua.MustParseNodeID(rt.NodeIdAttr) + node := srv.Node(nodeid) + if node == nil { + log.Printf("Error loading node %s", rt.NodeIdAttr) + } + + for rid := range rt.References.Reference { + ref := rt.References.Reference[rid] + refnodeid := ua.MustParseNodeID(ref.Value) + n := srv.Node(refnodeid) + if n == nil { + log.Printf("can't find node %s as %s reference to %s", ref.Value, ref.ReferenceTypeAttr, rt.BrowseNameAttr) + failures++ + continue + } + + if ref.IsForwardAttr == nil { + v := true + ref.IsForwardAttr = &v + } + reftypeid := ua.MustParseNodeID(reftypes[ref.ReferenceTypeAttr].NodeIdAttr) + node.AddRef(n, RefType(reftypeid.IntID()), *ref.IsForwardAttr) + if !reftypes[ref.ReferenceTypeAttr].SymmetricAttr { + n.AddRef(node, RefType(reftypeid.IntID()), !*ref.IsForwardAttr) + } + } + + } + + // set up the data types. + for i := range nodes.UADataType { + dt := nodes.UADataType[i] + nid := ua.MustParseNodeID(dt.NodeIdAttr) + node := srv.Node(nid) + + if nid.IntID() == 24 { + log.Printf("doing BaseDataType") + } + + for rid := range dt.References.Reference { + ref := dt.References.Reference[rid] + refnodeid := ua.MustParseNodeID(ref.Value) + n := srv.Node(refnodeid) + if n == nil { + log.Printf("can't find node %s as %s reference to %s", ref.Value, ref.ReferenceTypeAttr, dt.BrowseNameAttr) + failures++ + continue + } + + if ref.IsForwardAttr == nil { + v := true + ref.IsForwardAttr = &v + } + + reftypeid := ua.MustParseNodeID(reftypes[ref.ReferenceTypeAttr].NodeIdAttr) + node.AddRef(n, RefType(reftypeid.IntID()), *ref.IsForwardAttr) + if !reftypes[ref.ReferenceTypeAttr].SymmetricAttr { + n.AddRef(node, RefType(reftypeid.IntID()), !*ref.IsForwardAttr) + } + + } + + } + + // set up the object types + for i := range nodes.UAObjectType { + ot := nodes.UAObjectType[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + node := srv.Node(nid) + + for rid := range ot.References.Reference { + ref := ot.References.Reference[rid] + refnodeid := ua.MustParseNodeID(ref.Value) + n := srv.Node(refnodeid) + if n == nil { + log.Printf("can't find node %s as %s reference to %s", ref.Value, ref.ReferenceTypeAttr, ot.BrowseNameAttr) + failures++ + continue + } + if ref.IsForwardAttr == nil { + v := true + ref.IsForwardAttr = &v + } + reftypeid := ua.MustParseNodeID(reftypes[ref.ReferenceTypeAttr].NodeIdAttr) + node.AddRef(n, RefType(reftypeid.IntID()), *ref.IsForwardAttr) + if !reftypes[ref.ReferenceTypeAttr].SymmetricAttr { + n.AddRef(node, RefType(reftypeid.IntID()), !*ref.IsForwardAttr) + } + } + } + + // set up the variable Types + for i := range nodes.UAVariableType { + ot := nodes.UAVariableType[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + node := srv.Node(nid) + + for rid := range ot.References.Reference { + ref := ot.References.Reference[rid] + refnodeid := ua.MustParseNodeID(ref.Value) + n := srv.Node(refnodeid) + if n == nil { + log.Printf("can't find node %s as %s reference to %s", ref.Value, ref.ReferenceTypeAttr, ot.BrowseNameAttr) + failures++ + continue + } + if ref.IsForwardAttr == nil { + v := true + ref.IsForwardAttr = &v + } + reftypeid := ua.MustParseNodeID(reftypes[ref.ReferenceTypeAttr].NodeIdAttr) + node.AddRef(n, RefType(reftypeid.IntID()), *ref.IsForwardAttr) + if !reftypes[ref.ReferenceTypeAttr].SymmetricAttr { + n.AddRef(node, RefType(reftypeid.IntID()), !*ref.IsForwardAttr) + } + + } + + } + + // set up the variables + for i := range nodes.UAVariable { + ot := nodes.UAVariable[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + node := srv.Node(nid) + + for rid := range ot.References.Reference { + ref := ot.References.Reference[rid] + refnodeid := ua.MustParseNodeID(ref.Value) + n := srv.Node(refnodeid) + if n == nil { + log.Printf("can't find node %s as %s reference to %s", ref.Value, ref.ReferenceTypeAttr, ot.BrowseNameAttr) + failures++ + continue + } + if ref.IsForwardAttr == nil { + v := true + ref.IsForwardAttr = &v + } + reftypeid := ua.MustParseNodeID(reftypes[ref.ReferenceTypeAttr].NodeIdAttr) + node.AddRef(n, RefType(reftypeid.IntID()), *ref.IsForwardAttr) + if !reftypes[ref.ReferenceTypeAttr].SymmetricAttr { + n.AddRef(node, RefType(reftypeid.IntID()), !*ref.IsForwardAttr) + } + + } + + } + + // set up the methods + for i := range nodes.UAMethod { + ot := nodes.UAMethod[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + node := srv.Node(nid) + + for rid := range ot.References.Reference { + ref := ot.References.Reference[rid] + refnodeid := ua.MustParseNodeID(ref.Value) + n := srv.Node(refnodeid) + if n == nil { + log.Printf("can't find node %s as %s reference to %s", ref.Value, ref.ReferenceTypeAttr, ot.BrowseNameAttr) + failures++ + continue + } + if ref.IsForwardAttr == nil { + v := true + ref.IsForwardAttr = &v + } + reftypeid := ua.MustParseNodeID(reftypes[ref.ReferenceTypeAttr].NodeIdAttr) + node.AddRef(n, RefType(reftypeid.IntID()), *ref.IsForwardAttr) + if !reftypes[ref.ReferenceTypeAttr].SymmetricAttr { + n.AddRef(node, RefType(reftypeid.IntID()), !*ref.IsForwardAttr) + } + } + + } + + // set up the objects + for i := range nodes.UAObject { + ot := nodes.UAObject[i] + nid := ua.MustParseNodeID(ot.NodeIdAttr) + node := srv.Node(nid) + if ot.NodeIdAttr == "i=84" { + log.Printf("doing root.") + } + + for rid := range ot.References.Reference { + ref := ot.References.Reference[rid] + refnodeid := ua.MustParseNodeID(ref.Value) + n := srv.Node(refnodeid) + if n == nil { + log.Printf("can't find node %s as %s reference to %s", ref.Value, ref.ReferenceTypeAttr, ot.BrowseNameAttr) + failures++ + continue + } + if ref.IsForwardAttr == nil { + v := true + ref.IsForwardAttr = &v + } + reftypeid := ua.MustParseNodeID(reftypes[ref.ReferenceTypeAttr].NodeIdAttr) + node.AddRef(n, RefType(reftypeid.IntID()), *ref.IsForwardAttr) + if !reftypes[ref.ReferenceTypeAttr].SymmetricAttr { + n.AddRef(node, RefType(reftypeid.IntID()), !*ref.IsForwardAttr) + } + + } + + } + + return nil +} diff --git a/server/query_service.go b/server/query_service.go new file mode 100644 index 00000000..d4d9712c --- /dev/null +++ b/server/query_service.go @@ -0,0 +1,39 @@ +package server + +import ( + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +// QueryService implements the Query Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.9 +type QueryService struct { + srv *Server +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.9.3 +func (s *QueryService) QueryFirst(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.QueryFirstRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.9.4 +func (s *QueryService) QueryNext(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.QueryNextRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} diff --git a/server/refs/refs.go b/server/refs/refs.go new file mode 100644 index 00000000..d7931bc4 --- /dev/null +++ b/server/refs/refs.go @@ -0,0 +1,28 @@ +package refs + +import ( + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server/attrs" + "github.com/gopcua/opcua/ua" +) + +// HasSubtype returns a HasSubtype reference. +func HasSubtype(typeID *ua.ExpandedNodeID) *ua.ReferenceDescription { + return &ua.ReferenceDescription{ + ReferenceTypeID: ua.NewNumericNodeID(0, id.HasSubtype), + TypeDefinition: typeID, + IsForward: true, + } +} + +// HasSubtype returns a HasSubtype reference. +func Organizes(nid *ua.NodeID, browseName, displayName string, typeID *ua.ExpandedNodeID) *ua.ReferenceDescription { + return &ua.ReferenceDescription{ + ReferenceTypeID: ua.NewNumericNodeID(0, id.Organizes), + NodeID: &ua.ExpandedNodeID{NodeID: nid}, + BrowseName: attrs.BrowseName(browseName), + DisplayName: attrs.DisplayName(displayName, ""), + TypeDefinition: typeID, + IsForward: true, + } +} diff --git a/server/server.go b/server/server.go new file mode 100644 index 00000000..c7e569d1 --- /dev/null +++ b/server/server.go @@ -0,0 +1,447 @@ +// Copyright 2018-2020 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package server + +import ( + "context" + "crypto/rsa" + "encoding/xml" + "fmt" + "log" + "net" + "strings" + "sync" + "time" + + "golang.org/x/exp/slices" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/schema" + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uacp" + "github.com/gopcua/opcua/uapolicy" +) + +//go:generate go run ../cmd/predefined-nodes/main.go + +const defaultListenAddr = "opc.tcp://localhost:0" + +// Server is a high-level OPC-UA Server +type Server struct { + url string + + cfg *serverConfig + + mu sync.Mutex + status *ua.ServerStatusDataType + endpoints []*ua.EndpointDescription + namespaces []NameSpace + + l *uacp.Listener + cb *channelBroker + sb *sessionBroker + + // nextSecureChannelID uint32 + + // Service Handlers are methods called to respond to service requests from clients + // All services should have a method here. + handlers map[uint16]Handler + + SubscriptionService *SubscriptionService + MonitoredItemService *MonitoredItemService +} + +type serverConfig struct { + privateKey *rsa.PrivateKey + certificate []byte + applicationURI string + + endpoints []string + + applicationName string + manufacturerName string + productName string + softwareVersion string + + enabledSec []security + enabledAuth []authMode + + cap ServerCapabilities + + logger Logger +} + +var capabilities = ServerCapabilities{ + OperationalLimits: OperationalLimits{ + MaxNodesPerRead: 32, + }, +} + +type ServerCapabilities struct { + OperationalLimits OperationalLimits +} + +type OperationalLimits struct { + MaxNodesPerRead uint32 +} + +type authMode struct { + tokenType ua.UserTokenType +} + +type security struct { + secPolicy string + secMode ua.MessageSecurityMode +} + +// New returns an initialized OPC-UA server. +// Call Start() afterwards to begin listening and serving connections +func New(opts ...Option) *Server { + cfg := &serverConfig{ + cap: capabilities, + applicationName: "GOPCUA", // override with the ServerName option + manufacturerName: "The gopcua Team", // override with the ManufacturerName option + productName: "gopcua OPC/UA Server", // override with the ProductName option + softwareVersion: "0.0.0-dev", // override with the SoftwareVersion option + } + for _, opt := range opts { + opt(cfg) + } + if len(cfg.endpoints) == 0 { + log.Fatalf("No endpoints defined!") + } + s := &Server{ + url: cfg.endpoints[0], + cfg: cfg, + cb: newChannelBroker(cfg.logger), + sb: newSessionBroker(cfg.logger), + handlers: make(map[uint16]Handler), + namespaces: []NameSpace{ + NewNameSpace("http://opcfoundation.org/UA/"), // ns:0 + }, + status: &ua.ServerStatusDataType{ + StartTime: time.Now(), + CurrentTime: time.Now(), + State: ua.ServerStateSuspended, + BuildInfo: &ua.BuildInfo{ + ProductURI: "https://github.com/gopcua/opcua", + ManufacturerName: cfg.manufacturerName, + ProductName: cfg.productName, + SoftwareVersion: "0.0.0-dev", + BuildNumber: "", + BuildDate: time.Time{}, + }, + SecondsTillShutdown: 0, + ShutdownReason: &ua.LocalizedText{}, + }, + } + + // init server address space + //for _, n := range PredefinedNodes() { + //s.namespaces[0].AddNode(n) + //} + + var nodes schema.UANodeSet + xml.Unmarshal(schema.OpcUaNodeSet2, &nodes) + + n0, ok := s.namespaces[0].(*NodeNameSpace) + n0.srv = s + if !ok { + log.Fatalf("not a node namespace!") + } + s.ImportNodeSet(&nodes) + + s.namespaces[0].AddNode(CurrentTimeNode()) + s.namespaces[0].AddNode(NamespacesNode(s)) + for _, n := range ServerStatusNodes(s, s.namespaces[0].Node(ua.NewNumericNodeID(0, id.Server))) { + s.namespaces[0].AddNode(n) + } + for _, n := range ServerCapabilitiesNodes(s) { + s.namespaces[0].AddNode(n) + } + + return s +} + +func (s *Server) Session(hdr *ua.RequestHeader) *session { + return s.sb.Session(hdr.AuthenticationToken) +} + +func (s *Server) Namespace(id int) (NameSpace, error) { + s.mu.Lock() + defer s.mu.Unlock() + if id < len(s.namespaces) { + return s.namespaces[id], nil + } + return nil, fmt.Errorf("namespace %d not found", id) +} + +func (s *Server) Namespaces() []NameSpace { + s.mu.Lock() + defer s.mu.Unlock() + return s.namespaces +} + +func (s *Server) ChangeNotification(n *ua.NodeID) { + s.MonitoredItemService.ChangeNotification(n) +} + +// for now, the address space of the server is split up into namespaces. +// this means that when we look up a node, we need to ask the specific namespace +// it belongs to for it instead of just a general lookup by ID +// +// the refRoot and refObjects flags can be used to automatically add a reference to the new Namespaces +// root or objects object respectively to the namespace 0 +func (s *Server) AddNamespace(ns NameSpace) int { + s.mu.Lock() + defer s.mu.Unlock() + if idx := slices.Index(s.namespaces, ns); idx >= 0 { + return idx + } + ns.SetID(uint16(len(s.namespaces))) + s.namespaces = append(s.namespaces, ns) + + if ns.ID() == 0 { + return 0 + + } + + return len(s.namespaces) - 1 +} + +func (s *Server) Endpoints() []*ua.EndpointDescription { + s.mu.Lock() + defer s.mu.Unlock() + return slices.Clone(s.endpoints) +} + +// Status returns the current server status. +func (s *Server) Status() *ua.ServerStatusDataType { + status := new(ua.ServerStatusDataType) + s.mu.Lock() + *status = *s.status + s.mu.Unlock() + status.CurrentTime = time.Now() + return status +} + +// URLs returns opc endpoint that the server is listening on. +func (s *Server) URLs() []string { + return s.cfg.endpoints +} + +// Start initializes and starts a Server listening on addr +// If s was not initialized with NewServer(), addr defaults +// to localhost:0 to let the OS select a random port +func (s *Server) Start(ctx context.Context) error { + var err error + + // Register all service handlers + s.initHandlers() + + if s.url == "" { + s.url = defaultListenAddr + } + s.l, err = uacp.Listen(s.url, nil) + if err != nil { + return err + } + log.Printf("Started listening on %v", s.URLs()) + + s.initEndpoints() + s.setServerState(ua.ServerStateRunning) + + if s.cb == nil { + s.cb = newChannelBroker(s.cfg.logger) + } + + go s.acceptAndRegister(ctx, s.l) + go s.monitorConnections(ctx) + + return nil +} + +func (s *Server) setServerState(state ua.ServerState) { + s.mu.Lock() + s.status.State = state + s.mu.Unlock() +} + +// Close gracefully shuts the server down by closing all open connections, +// and stops listening on all endpoints +func (s *Server) Close() error { + s.setServerState(ua.ServerStateShutdown) + + // Close the listener, preventing new sessions from starting + if s.l != nil { + s.l.Close() + } + + // Shut down all secure channels and UACP connections + return s.cb.Close() +} + +type temporary interface { + Temporary() bool +} + +func (s *Server) acceptAndRegister(ctx context.Context, l *uacp.Listener) { + for { + select { + case <-ctx.Done(): + return + default: + c, err := l.Accept(ctx) + if err != nil { + switch x := err.(type) { + case *net.OpError: + // socket closed. Cannot recover from this. + if s.cfg.logger != nil { + s.cfg.logger.Error("socket closed: %s", err) + } + return + case temporary: + if x.Temporary() { + continue + } + default: + if s.cfg.logger != nil { + s.cfg.logger.Error("error accepting connection: %s", err) + } + continue + } + } + + go s.cb.RegisterConn(ctx, c, s.cfg.certificate, s.cfg.privateKey) + if s.cfg.logger != nil { + s.cfg.logger.Info("registered connection: %s", c.RemoteAddr()) + } + } + } +} + +// monitorConnections reads messages off the secure channel connection and +// sends the message to the service handler +func (s *Server) monitorConnections(ctx context.Context) { + for { + select { + case <-ctx.Done(): + return + default: + msg := s.cb.ReadMessage(ctx) + if msg.Err != nil { + if s.cfg.logger != nil { + s.cfg.logger.Error("monitorConnections: Error received: %s\n", msg.Err) + } + continue // todo(fs): close SC??? + } + if resp := msg.Response(); resp != nil { + if s.cfg.logger != nil { + s.cfg.logger.Error("monitorConnections: Server received response %T ???", resp) + } + continue // todo(fs): close SC??? + } + if s.cfg.logger != nil { + s.cfg.logger.Debug("monitorConnections: Received Message: %T", msg.Request()) + } + s.cb.mu.RLock() + sc, ok := s.cb.s[msg.SecureChannelID] + s.cb.mu.RUnlock() + if !ok { + // if the secure channel ID is 0, this is probably a open secure channel request. + if s.cfg.logger != nil && msg.SecureChannelID != 0 { + s.cfg.logger.Error("monitorConnections: Unknown SecureChannel: %d", msg.SecureChannelID) + } + continue + } + + // todo: should this be delegated to another goroutine in case handling this hangs? + s.handleService(ctx, sc, msg.RequestID, msg.Request()) + } + } +} + +// initEndpoints builds the endpoint list from the server's configuration +func (s *Server) initEndpoints() { + var endpoints []*ua.EndpointDescription + for _, sec := range s.cfg.enabledSec { + for _, url := range s.cfg.endpoints { + secLevel := uapolicy.SecurityLevel(sec.secPolicy, sec.secMode) + + ep := &ua.EndpointDescription{ + EndpointURL: url, // todo: be able to listen on multiple adapters + SecurityLevel: secLevel, + Server: &ua.ApplicationDescription{ + ApplicationURI: s.cfg.applicationURI, + ProductURI: "urn:github.com:gopcua:server", + ApplicationName: &ua.LocalizedText{ + EncodingMask: ua.LocalizedTextText, + Text: s.cfg.applicationName, + }, + ApplicationType: ua.ApplicationTypeServer, + GatewayServerURI: "", + DiscoveryProfileURI: "", + DiscoveryURLs: s.URLs(), + }, + ServerCertificate: s.cfg.certificate, + SecurityMode: sec.secMode, + SecurityPolicyURI: sec.secPolicy, + TransportProfileURI: "http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary", + } + + for _, auth := range s.cfg.enabledAuth { + for _, authSec := range s.cfg.enabledSec { + if auth.tokenType == ua.UserTokenTypeAnonymous { + authSec.secPolicy = "http://opcfoundation.org/UA/SecurityPolicy#None" + } + + if auth.tokenType != ua.UserTokenTypeAnonymous && authSec.secPolicy == "http://opcfoundation.org/UA/SecurityPolicy#None" { + continue + } + + policyID := strings.ToLower( + strings.TrimPrefix(auth.tokenType.String(), "UserTokenType") + + "_" + + strings.TrimPrefix(authSec.secPolicy, "http://opcfoundation.org/UA/SecurityPolicy#"), + ) + + var dup bool + for _, uit := range ep.UserIdentityTokens { + if uit.PolicyID == policyID { + dup = true + break + } + } + + if dup { + continue + } + tok := &ua.UserTokenPolicy{ + PolicyID: policyID, + TokenType: auth.tokenType, + IssuedTokenType: "", + IssuerEndpointURL: "", + SecurityPolicyURI: authSec.secPolicy, + } + + ep.UserIdentityTokens = append(ep.UserIdentityTokens, tok) + } + } + endpoints = append(endpoints, ep) + } + } + + s.mu.Lock() + s.endpoints = endpoints + s.mu.Unlock() +} + +func (s *Server) Node(nid *ua.NodeID) *Node { + ns := int(nid.Namespace()) + if ns < len(s.namespaces) { + return s.namespaces[ns].Node(nid) + } + return nil +} diff --git a/server/server_config.go b/server/server_config.go new file mode 100644 index 00000000..bf5c6587 --- /dev/null +++ b/server/server_config.go @@ -0,0 +1,168 @@ +// Copyright 2018-2019 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package server + +import ( + "crypto/rsa" + "crypto/x509" + "fmt" + "log" + "strings" + "time" + + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uapolicy" + "github.com/gopcua/opcua/uasc" +) + +// Option is an option function type to modify the configuration. +type Option func(*serverConfig) + +// PrivateKey sets the RSA private key in the secure channel configuration. +func PrivateKey(key *rsa.PrivateKey) Option { + return func(s *serverConfig) { + s.privateKey = key + } +} + +// EndPointHostName adds an additional endpoint to the server based on the host name +func EndPoint(host string, port int) Option { + return func(s *serverConfig) { + if s.endpoints == nil { + s.endpoints = make([]string, 0) + } + ep := fmt.Sprintf("opc.tcp://%s:%d", host, port) + s.endpoints = append(s.endpoints, ep) + } +} + +// Certificate sets the client X509 certificate in the secure channel configuration +// and also detects and sets the ApplicationURI from the URI within the certificate +func Certificate(cert []byte) Option { + return func(s *serverConfig) { + s.certificate = cert + + // Extract the application URI from the certificate. + var appURI string + x509cert, err := x509.ParseCertificate(cert) + if err == nil && len(x509cert.URIs) > 0 { + appURI = x509cert.URIs[0].String() + } + + s.applicationURI = appURI + } +} + +// EnableSecurity registers a new endpoint security mode to the server. +// This will also register the security policy against each enabled auth mode +func EnableSecurity(secPolicy string, secMode ua.MessageSecurityMode) Option { + return func(s *serverConfig) { + if !strings.HasPrefix(secPolicy, "http://opcfoundation.org/UA/SecurityPolicy#") { + secPolicy = "http://opcfoundation.org/UA/SecurityPolicy#" + secPolicy + } + + var ok bool + ss := uapolicy.SupportedPolicies() + for _, sp := range ss { + if sp == secPolicy { + ok = true + break + } + } + if !ok { + log.Printf("error adding endpoint to config, %s is unsupported", secPolicy) + return + } + + for _, sec := range s.enabledSec { + if sec.secPolicy == secPolicy && sec.secMode == secMode { + if s.logger != nil { + s.logger.Warn("security policy already exists, skipping") + } + return + } + } + + sec := security{ + secPolicy: secPolicy, + secMode: secMode, + } + + s.enabledSec = append(s.enabledSec, sec) + } +} + +// EnableAuthMode registers a new user authentication mode to the server. +// All AuthModes except Anonymous require encryption by default, so EnableSecurity() +// must also be called with at least one non-"None" SecurityPolicy +func EnableAuthMode(tokenType ua.UserTokenType) Option { + return func(s *serverConfig) { + + for _, a := range s.enabledAuth { + if a.tokenType == tokenType { + if s.logger != nil { + s.logger.Warn("auth mode already registered, skipping") + } + return + } + } + + a := authMode{ + tokenType: tokenType, + } + + s.enabledAuth = append(s.enabledAuth, a) + } +} + +func defaultChannelConfig() *uasc.Config { + return &uasc.Config{ + SecurityPolicyURI: ua.SecurityPolicyURINone, + SecurityMode: ua.MessageSecurityModeNone, + Lifetime: uint32(time.Hour / time.Millisecond), + } +} + +func ServerName(name string) Option { + return func(s *serverConfig) { + s.applicationName = name + } +} + +func ManufacturerName(name string) Option { + return func(s *serverConfig) { + s.manufacturerName = name + } +} + +func ProductName(name string) Option { + return func(s *serverConfig) { + s.productName = name + } +} + +func SoftwareVersion(name string) Option { + return func(s *serverConfig) { + s.softwareVersion = name + } +} + +// this logger interface is used to allow the user to provide their own logger +// it is compatible with slog.Logger +type Logger interface { + Debug(msg string, args ...any) + Error(msg string, args ...any) + Info(msg string, args ...any) + Warn(msg string, args ...any) +} + +// the server.SetLogger takes a server.Logger interface. This interface is met by +// slog.Logger{}. A simple wrapper could be made for other loggers if they don't already +// meet the interface. +func SetLogger(logger Logger) Option { + return func(s *serverConfig) { + s.logger = logger + } +} diff --git a/server/server_nodes.go b/server/server_nodes.go new file mode 100644 index 00000000..77d0a238 --- /dev/null +++ b/server/server_nodes.go @@ -0,0 +1,242 @@ +package server + +import ( + "time" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server/attrs" + "github.com/gopcua/opcua/ua" +) + +func CurrentTimeNode() *Node { + return NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_CurrentTime), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("CurrentTime")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(time.Now()) }, + ) +} + +func NamespacesNode(s *Server) *Node { + return NewNode( + ua.NewNumericNodeID(0, id.Server_NamespaceArray), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("Namespaces")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassObject)), + }, + nil, + func() *ua.Variant { + n := s.Namespaces() + ns := make([]string, len(n)) + for i := range ns { + ns[i] = n[i].Name() + } + return ua.MustVariant(ns) + }, + ) +} + +func ServerCapabilitiesNodes(s *Server) []*Node { + var nodes []*Node + nodes = append(nodes, NewNode( + ua.NewNumericNodeID(0, id.Server_ServerCapabilities_OperationLimits_MaxNodesPerRead), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("MaxNodesPerRead")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(s.cfg.cap.OperationalLimits.MaxNodesPerRead) }, + )) + return nodes +} + +func RootNode() *Node { + return NewNode( + ua.NewNumericNodeID(0, id.RootFolder), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDNodeClass: ua.MustVariant(attrs.NodeClass(ua.NodeClassObject)), + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("Root")), + ua.AttributeIDDataType: ua.MustVariant(ua.NewNumericExpandedNodeID(0, id.DataTypesFolder)), + }, + nil, + nil, + ) +} + +func ServerStatusNodes(s *Server, ServerNode *Node) []*Node { + + /* + Server_ServerArray = 2254 + Server_NamespaceArray = 2255 + Server_ServerStatus_BuildInfo = 2260 + Server_ServerStatus_BuildInfo_ProductName = 2261 + Server_ServerStatus_BuildInfo_ProductURI = 2262 + Server_ServerStatus_BuildInfo_ManufacturerName = 2263 + Server_ServerStatus_BuildInfo_SoftwareVersion = 2264 + Server_ServerStatus_BuildInfo_BuildNumber = 2265 + Server_ServerStatus_BuildInfo_BuildDate = 2266 + Server_ServiceLevel = 2267 + Server_ServerCapabilities = 2268 + Server_ServerCapabilities_ServerProfileArray = 2269 + Server_ServerCapabilities_LocaleIDArray = 2271 + Server_ServerCapabilities_MinSupportedSampleRate = 2272 + Server_ServerDiagnostics = 2274 + Server_ServerDiagnostics_ServerDiagnosticsSummary = 2275 + Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 2276 + Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 2277 + Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 2278 + Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 2279 + Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 2281 + Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 2282 + Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 2284 + Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 2285 + Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 2286 + Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 2287 + Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 2288 + Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray = 2289 + Server_ServerDiagnostics_SubscriptionDiagnosticsArray = 2290 + Server_ServerDiagnostics_EnabledFlag = 2294 + Server_VendorServerInfo = 2295 + Server_ServerRedundancy = 2296 + */ + + sStatus := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("Status")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(ua.NewExtensionObject(s.Status())) }, + ) + + sState := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_State), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("ServerStatus")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(int32(s.Status().State)) }, + ) + mName := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_BuildInfo_ManufacturerName), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("ProductName")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(s.cfg.manufacturerName) }, + ) + pName := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_BuildInfo_ProductName), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("ProductName")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(s.cfg.productName) }, + ) + + pURI := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_BuildInfo_ProductURI), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("ProductURI")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(s.cfg.applicationURI) }, + ) + + bInfo := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_BuildInfo), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("BuildInfo")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant("") }, + ) + sVersion := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_BuildInfo_SoftwareVersion), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("SoftwareVersion")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(s.cfg.softwareVersion) }, + ) + + bNumber := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_BuildInfo_BuildNumber), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("BuildNumber")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(s.cfg.softwareVersion) }, + ) + + ts := time.Now() + bDate := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_BuildInfo_BuildDate), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("BuildDate")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(ts) }, + ) + timeStart := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_StartTime), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("StartTime")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(ts) }, + ) + timeCurrent := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_CurrentTime), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("CurrentTime")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(time.Now()) }, + ) + + //Server_ServerStatus_SecondsTillShutdown = 2992 + //Server_ServerStatus_ShutdownReason = 2993 + sTillShutdown := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_SecondsTillShutdown), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("SecondsTillShutdown")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(int32(0)) }, + ) + sReason := NewNode( + ua.NewNumericNodeID(0, id.Server_ServerStatus_ShutdownReason), + map[ua.AttributeID]*ua.Variant{ + ua.AttributeIDBrowseName: ua.MustVariant(attrs.BrowseName("ShutdownReason")), + ua.AttributeIDNodeClass: ua.MustVariant(uint32(ua.NodeClassVariable)), + }, + nil, + func() *ua.Variant { return ua.MustVariant(int32(0)) }, + ) + + nodes := []*Node{sState, mName, pName, pURI, sVersion, bNumber, bDate, timeStart, timeCurrent, bInfo, sTillShutdown, sReason} + for i := range nodes { + sStatus.AddRef(nodes[i], id.HasComponent, true) + } + ServerNode.AddRef(sStatus, id.HasComponent, true) + + nodes = append(nodes, sStatus) + + return nodes +} diff --git a/server/service_handlers.go b/server/service_handlers.go new file mode 100644 index 00000000..0b4708e4 --- /dev/null +++ b/server/service_handlers.go @@ -0,0 +1,183 @@ +// Copyright 2018-2019 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package server + +import ( + "context" + "time" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +type Handler func(*uasc.SecureChannel, ua.Request, uint32) (ua.Response, error) + +func (s *Server) initHandlers() { + // s.registerHandlerFunc(id.ServiceFault_Encoding_DefaultBinary, handleServiceFault) + + discovery := &DiscoveryService{s} + s.RegisterHandler(id.FindServersRequest_Encoding_DefaultBinary, discovery.FindServers) + s.RegisterHandler(id.FindServersOnNetworkRequest_Encoding_DefaultBinary, discovery.FindServersOnNetwork) + s.RegisterHandler(id.GetEndpointsRequest_Encoding_DefaultBinary, discovery.GetEndpoints) + s.RegisterHandler(id.RegisterServerRequest_Encoding_DefaultBinary, discovery.RegisterServer) + s.RegisterHandler(id.RegisterServer2Request_Encoding_DefaultBinary, discovery.RegisterServer2) + + // SecureChannel service (handled in the uasc stack) + // s.registerHandlerFunc(id.OpenSecureChannelRequest_Encoding_DefaultBinary, handleOpenSecureChannel) + // s.registerHandlerFunc(id.CloseSecureChannelRequest_Encoding_DefaultBinary, handleCloseSecureChannel) + + session := &SessionService{s} + s.RegisterHandler(id.CreateSessionRequest_Encoding_DefaultBinary, session.CreateSession) + s.RegisterHandler(id.ActivateSessionRequest_Encoding_DefaultBinary, session.ActivateSession) + s.RegisterHandler(id.CloseSessionRequest_Encoding_DefaultBinary, session.CloseSession) + s.RegisterHandler(id.CancelRequest_Encoding_DefaultBinary, session.Cancel) + + node := &NodeManagementService{s} + s.RegisterHandler(id.AddNodesRequest_Encoding_DefaultBinary, node.AddNodes) + s.RegisterHandler(id.AddReferencesRequest_Encoding_DefaultBinary, node.AddReferences) + s.RegisterHandler(id.DeleteNodesRequest_Encoding_DefaultBinary, node.DeleteNodes) + s.RegisterHandler(id.DeleteReferencesRequest_Encoding_DefaultBinary, node.DeleteReferences) + + view := &ViewService{s} + s.RegisterHandler(id.BrowseRequest_Encoding_DefaultBinary, view.Browse) + s.RegisterHandler(id.BrowseNextRequest_Encoding_DefaultBinary, view.BrowseNext) + s.RegisterHandler(id.TranslateBrowsePathsToNodeIDsRequest_Encoding_DefaultBinary, view.TranslateBrowsePathsToNodeIDs) + s.RegisterHandler(id.RegisterNodesRequest_Encoding_DefaultBinary, view.RegisterNodes) + s.RegisterHandler(id.UnregisterNodesRequest_Encoding_DefaultBinary, view.UnregisterNodes) + + query := &QueryService{s} + s.RegisterHandler(id.QueryFirstRequest_Encoding_DefaultBinary, query.QueryFirst) + s.RegisterHandler(id.QueryNextRequest_Encoding_DefaultBinary, query.QueryNext) + + attr := &AttributeService{s} + s.RegisterHandler(id.ReadRequest_Encoding_DefaultBinary, attr.Read) + s.RegisterHandler(id.HistoryReadRequest_Encoding_DefaultBinary, attr.HistoryRead) + s.RegisterHandler(id.WriteRequest_Encoding_DefaultBinary, attr.Write) + s.RegisterHandler(id.HistoryUpdateRequest_Encoding_DefaultBinary, attr.HistoryUpdate) + + method := &MethodService{s} + // s.registerHandler(id.CallMethodRequest_Encoding_DefaultBinary, method.CallMethod) // todo(fs): I think this is bogus + s.RegisterHandler(id.CallRequest_Encoding_DefaultBinary, method.Call) + + sub := &SubscriptionService{ + srv: s, + Subs: make(map[uint32]*Subscription), + } + s.SubscriptionService = sub + s.RegisterHandler(id.CreateSubscriptionRequest_Encoding_DefaultBinary, sub.CreateSubscription) + s.RegisterHandler(id.ModifySubscriptionRequest_Encoding_DefaultBinary, sub.ModifySubscription) + s.RegisterHandler(id.SetPublishingModeRequest_Encoding_DefaultBinary, sub.SetPublishingMode) + s.RegisterHandler(id.PublishRequest_Encoding_DefaultBinary, sub.Publish) + s.RegisterHandler(id.RepublishRequest_Encoding_DefaultBinary, sub.Republish) + s.RegisterHandler(id.TransferSubscriptionsRequest_Encoding_DefaultBinary, sub.TransferSubscriptions) + s.RegisterHandler(id.DeleteSubscriptionsRequest_Encoding_DefaultBinary, sub.DeleteSubscriptions) + + item := &MonitoredItemService{ + SubService: sub, + Items: make(map[uint32]*MonitoredItem), + Nodes: make(map[string][]*MonitoredItem), + Subs: make(map[uint32][]*MonitoredItem), + } + s.MonitoredItemService = item + // s.registerHandler(id.MonitoredItemCreateRequest_Encoding_DefaultBinary, item.MonitoredItemCreate) + s.RegisterHandler(id.CreateMonitoredItemsRequest_Encoding_DefaultBinary, item.CreateMonitoredItems) + //s.RegisterHandler(id.CreateMonitoredItemsRequest_Encoding_DefaultBinary, s.CreateMonitoredItems) + // s.registerHandler(id.MonitoredItemModifyRequest_Encoding_DefaultBinary, item.MonitoredItemModify) + s.RegisterHandler(id.ModifyMonitoredItemsRequest_Encoding_DefaultBinary, item.ModifyMonitoredItems) + s.RegisterHandler(id.SetMonitoringModeRequest_Encoding_DefaultBinary, item.SetMonitoringMode) + s.RegisterHandler(id.SetTriggeringRequest_Encoding_DefaultBinary, item.SetTriggering) + s.RegisterHandler(id.DeleteMonitoredItemsRequest_Encoding_DefaultBinary, item.DeleteMonitoredItems) +} + +// This function allows you to overwrite a handler before you call start. +func (s *Server) RegisterHandler(typeID uint16, h Handler) { + _, ok := s.handlers[typeID] + if !ok { + s.handlers[typeID] = h + } +} + +func (s *Server) handleService(ctx context.Context, sc *uasc.SecureChannel, reqID uint32, req ua.Request) { + if s.cfg.logger != nil { + s.cfg.logger.Debug("handleService: Got: %T\n", req) + } + + var resp ua.Response + var err error + + typeID := ua.ServiceTypeID(req) + h, ok := s.handlers[typeID] + if ok { + resp, err = h(sc, req, reqID) + } else { + if typeID == 0 { + if s.cfg.logger != nil { + s.cfg.logger.Warn("unknown service %T. Did you call register?", req) + } + } + err = ua.StatusBadServiceUnsupported + } + + if err != nil { + if statusCode, ok := err.(ua.StatusCode); ok { + resp = &ua.ServiceFault{ResponseHeader: responseHeader(0, statusCode)} + } else { + resp = &ua.ServiceFault{ResponseHeader: responseHeader(0, ua.StatusBadUnexpectedError)} + } + } + + if resp == nil { + return + } + + err = sc.SendResponseWithContext(ctx, reqID, resp) + if err != nil { + if s.cfg.logger != nil { + s.cfg.logger.Warn("Error sending response: %s\n", err) + } + } +} + +func responseHeader(reqID uint32, statusCode ua.StatusCode) *ua.ResponseHeader { + return &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: reqID, + ServiceResult: statusCode, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + } +} + +func serviceUnsupported(hdr *ua.RequestHeader) ua.Response { + return &ua.ServiceFault{ + ResponseHeader: responseHeader(hdr.RequestHandle, ua.StatusBadServiceUnsupported), + } +} + +func safeReq[T ua.Request](r ua.Request) (T, error) { + var t T + req, ok := r.(T) + if !ok { + //debug.Printf("expected %T, got %T", t, r) + return t, ua.StatusBadRequestTypeInvalid + } + return req, nil +} + +// func handleServiceFault(s *Server, sc *uasc.SecureChannel, r ua.Request) (ua.Response, error) { +// debug.Printf("Handling %T", r) + +// req, ok := r.(*ua.ServiceFault) +// if !ok { +// debug.Printf("handleServiceFault: Expected *ua.ServiceFault, got %T", r) +// return nil, ua.StatusBadRequestTypeInvalid +// } +// debug.Printf("Got ServiceFault: %s", req.ResponseHeader.ServiceResult) + +// // No response required +// return nil, nil +// } diff --git a/server/session_broker.go b/server/session_broker.go new file mode 100644 index 00000000..6d2cd783 --- /dev/null +++ b/server/session_broker.go @@ -0,0 +1,84 @@ +package server + +import ( + mrand "math/rand" + "sync" + "time" + + "github.com/google/uuid" + + "github.com/gopcua/opcua/ua" +) + +type session struct { + cfg sessionConfig + + ID *ua.NodeID + AuthTokenID *ua.NodeID + serverNonce []byte + remoteCertificate []byte + + PublishRequests chan PubReq +} + +type sessionConfig struct { + sessionTimeout time.Duration +} + +type sessionBroker struct { + // mu protects concurrent modification of s + mu sync.Mutex + + // s contains all sessions watched by the session broker + s map[string]*session + logger Logger +} + +func newSessionBroker(logger Logger) *sessionBroker { + return &sessionBroker{ + s: make(map[string]*session), + logger: logger, + } +} + +func (sb *sessionBroker) NewSession() *session { + s := &session{ + ID: ua.NewGUIDNodeID(1, uuid.New().String()), + AuthTokenID: ua.NewNumericNodeID(0, uint32(mrand.Int31())), + PublishRequests: make(chan PubReq, 100), + } + + sb.mu.Lock() + sb.s[s.AuthTokenID.String()] = s + sb.mu.Unlock() + + return s +} + +func (sb *sessionBroker) Close(authToken *ua.NodeID) error { + sb.mu.Lock() + defer sb.mu.Unlock() + + if sb.s[authToken.String()] == nil { + if sb.logger != nil { + sb.logger.Warn("sessionBroker.Close: error looking up session %v", authToken) + } + } + delete(sb.s, authToken.String()) + + return nil +} + +func (sb *sessionBroker) Session(authToken *ua.NodeID) *session { + sb.mu.Lock() + defer sb.mu.Unlock() + + s := sb.s[authToken.String()] + if s == nil { + if sb.logger != nil { + sb.logger.Warn("sessionBroker.Session: error looking up session %v", authToken) + } + } + + return s +} diff --git a/server/session_service.go b/server/session_service.go new file mode 100644 index 00000000..af62401b --- /dev/null +++ b/server/session_service.go @@ -0,0 +1,163 @@ +package server + +import ( + "crypto/rand" + "log" + "time" + + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +const ( + sessionTimeoutMin = 100 // 100ms + sessionTimeoutMax = 30 * 60 * 1000 // 30 minutes + sessionTimeoutDefault = 60 * 1000 // 60s + + sessionNonceLength = 32 +) + +// SessionService implements the Session Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.6 +type SessionService struct { + srv *Server +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.6.2 +func (s *SessionService) CreateSession(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.CreateSessionRequest](r) + if err != nil { + return nil, err + } + + // New session + sess := s.srv.sb.NewSession() + + // Ensure session timeout is reasonable + sess.cfg.sessionTimeout = time.Duration(req.RequestedSessionTimeout) * time.Millisecond + if sess.cfg.sessionTimeout > sessionTimeoutMax || sess.cfg.sessionTimeout < sessionTimeoutMin { + sess.cfg.sessionTimeout = sessionTimeoutDefault + } + + nonce := make([]byte, sessionNonceLength) + if _, err := rand.Read(nonce); err != nil { + log.Printf("error creating session nonce") + return nil, ua.StatusBadInternalError + } + sess.serverNonce = nonce + sess.remoteCertificate = req.ClientCertificate + + sig, alg, err := sc.NewSessionSignature(req.ClientCertificate, req.ClientNonce) + if err != nil { + log.Printf("error creating session signature") + return nil, ua.StatusBadInternalError + } + + matching_endpoints := make([]*ua.EndpointDescription, 0) + for i := range s.srv.endpoints { + ep := s.srv.endpoints[i] + if ep.EndpointURL == req.EndpointURL { + matching_endpoints = append(matching_endpoints, ep) + } + } + + response := &ua.CreateSessionResponse{ + ResponseHeader: responseHeader(req.RequestHeader.RequestHandle, ua.StatusOK), + SessionID: sess.ID, + AuthenticationToken: sess.AuthTokenID, + RevisedSessionTimeout: float64(sess.cfg.sessionTimeout / time.Millisecond), + MaxRequestMessageSize: 0, // Not used + ServerSignature: &ua.SignatureData{ + Signature: sig, + Algorithm: alg, + }, + ServerCertificate: s.srv.cfg.certificate, + ServerNonce: nonce, + ServerEndpoints: matching_endpoints, + } + + return response, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.6.3 +func (s *SessionService) ActivateSession(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.ActivateSessionRequest](r) + if err != nil { + return nil, err + } + + sess := s.srv.sb.Session(req.RequestHeader.AuthenticationToken) + if sess == nil { + return nil, ua.StatusBadSessionIDInvalid + } + + err = sc.VerifySessionSignature(sess.remoteCertificate, sess.serverNonce, req.ClientSignature.Signature) + if err != nil { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Warn("error verifying session signature with nonce: %s", err) + } + return nil, ua.StatusBadSecurityChecksFailed + } + + nonce := make([]byte, sessionNonceLength) + if _, err := rand.Read(nonce); err != nil { + log.Printf("error creating session nonce") + return nil, ua.StatusBadInternalError + } + sess.serverNonce = nonce + + response := &ua.ActivateSessionResponse{ + ResponseHeader: responseHeader(req.RequestHeader.RequestHandle, ua.StatusOK), + ServerNonce: nonce, + // Results: []ua.StatusCode{}, + // DiagnosticInfos: []*ua.DiagnosticInfo{}, + } + + return response, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.6.4 +func (s *SessionService) CloseSession(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.CloseSessionRequest](r) + if err != nil { + return nil, err + } + + err = s.srv.sb.Close(req.RequestHeader.AuthenticationToken) + if err != nil { + return nil, ua.StatusBadSessionIDInvalid + } + + //TODO: deal with 'delete subscriptions' field in request + response := &ua.CloseSessionResponse{ + ResponseHeader: responseHeader(req.RequestHeader.RequestHandle, ua.StatusOK), + } + + return response, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.6.5 +func (s *SessionService) Cancel(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.CancelRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} diff --git a/server/subscription_service.go b/server/subscription_service.go new file mode 100644 index 00000000..bb3c65e0 --- /dev/null +++ b/server/subscription_service.go @@ -0,0 +1,511 @@ +package server + +import ( + "context" + "sync" + "time" + + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +// SubscriptionService implements the Subscription Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13 +type SubscriptionService struct { + srv *Server + // pub sub stuff + Mu sync.Mutex + Subs map[uint32]*Subscription +} + +// get rid of all references to a subscription and all monitored items that are pointed at this subscription. +func (s *SubscriptionService) DeleteSubscription(id uint32) { + s.Mu.Lock() + defer s.Mu.Unlock() + + sub, ok := s.Subs[id] + if ok { + sub.Mu.Lock() + if sub.running { + sub.running = false + close(sub.shutdown) + } + sub.Mu.Unlock() + } + + delete(s.Subs, id) + + // ask the monitored item service to purge out any items that use this subscription + s.srv.MonitoredItemService.DeleteSub(id) + +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.2 +func (s *SubscriptionService) CreateSubscription(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.CreateSubscriptionRequest](r) + if err != nil { + return nil, err + } + + s.Mu.Lock() + defer s.Mu.Unlock() + + newsubid := uint32(len(s.Subs)) + 1 + + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Info("New Sub %d for %v", newsubid, sc.RemoteAddr()) + } + + sub := NewSubscription() + sub.srv = s + sub.Session = s.srv.Session(r.Header()) + sub.Channel = sc + sub.ID = newsubid + sub.RevisedPublishingInterval = req.RequestedPublishingInterval + sub.RevisedLifetimeCount = req.RequestedLifetimeCount + sub.RevisedMaxKeepAliveCount = req.RequestedMaxKeepAliveCount + + s.Subs[newsubid] = sub + sub.running = true + sub.Start() + + resp := &ua.CreateSubscriptionResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + SubscriptionID: uint32(newsubid), + RevisedPublishingInterval: req.RequestedPublishingInterval, + RevisedLifetimeCount: req.RequestedLifetimeCount, + RevisedMaxKeepAliveCount: req.RequestedMaxKeepAliveCount, + } + return resp, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.3 +func (s *SubscriptionService) ModifySubscription(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.ModifySubscriptionRequest](r) + if err != nil { + return nil, err + } + + // When this gets implemented, be sure to check the subscription session vs the request session! + + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.4 +func (s *SubscriptionService) SetPublishingMode(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.SetPublishingModeRequest](r) + if err != nil { + return nil, err + } + // When this gets implemented, be sure to check the subscription session vs the request session! + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.5 +func (s *SubscriptionService) Publish(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Raw Publish req") + } + + req, err := safeReq[*ua.PublishRequest](r) + if err != nil { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Error("ERROR: bad PublishRequest Struct") + } + return nil, err + } + + session := s.srv.Session(req.RequestHeader) + + if session == nil { + response := &ua.PublishResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusBadSessionIDInvalid, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + SubscriptionID: 0, + MoreNotifications: false, + NotificationMessage: &ua.NotificationMessage{NotificationData: []*ua.ExtensionObject{}}, + AvailableSequenceNumbers: []uint32{}, // an empty array indicates taht we don't support retransmission of messages + Results: []ua.StatusCode{}, + DiagnosticInfos: []*ua.DiagnosticInfo{}, + } + + return response, nil + } + + select { + case session.PublishRequests <- PubReq{Req: req, ID: reqID}: + default: + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Warn("Too many publish reqs.") + } + } + + // per opcua spec, we don't respond now. When data is available on the subscription, + // the Subscription will respond in the background. + return nil, nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.6 +func (s *SubscriptionService) Republish(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.RepublishRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.7 +func (s *SubscriptionService) TransferSubscriptions(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.TransferSubscriptionsRequest](r) + if err != nil { + return nil, err + } + // When this gets implemented, be sure to check the subscription session vs the request session! + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.13.8 +func (s *SubscriptionService) DeleteSubscriptions(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.DeleteSubscriptionsRequest](r) + if err != nil { + return nil, err + } + session := s.srv.Session(req.Header()) + + s.Mu.Lock() + defer s.Mu.Unlock() + + results := make([]ua.StatusCode, len(req.SubscriptionIDs)) + for i := range req.SubscriptionIDs { + + subid := req.SubscriptionIDs[i] + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Info("Subscription %d deleted by client", subid) + } + sub, ok := s.Subs[subid] + if !ok { + results[i] = ua.StatusBadSubscriptionIDInvalid + continue + } + if session.AuthTokenID.String() != sub.Session.AuthTokenID.String() { + results[i] = ua.StatusBadSessionIDInvalid + continue + } + // delete subscription gets the lock so we set them up to run in the background + // once this function releases its lock + go s.DeleteSubscription(subid) + results[i] = ua.StatusOK + } + return &ua.DeleteSubscriptionsResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + Results: results, // []StatusCode + DiagnosticInfos: []*ua.DiagnosticInfo{}, // []*DiagnosticInfo + }, nil +} + +type PubReq struct { + // The data of the publish request + Req *ua.PublishRequest + + // The request ID (from the header) of the publish request. This has to be used when replying. + ID uint32 +} + +// This is the type that with its run() function will work in the bakground fullfilling subscription +// publishes. +// +// MonitoredItems will send updates on the NotifyChannel to let the background task know that +// an event has occured that needs to be published. +type Subscription struct { + srv *SubscriptionService + Session *session + ID uint32 + RevisedPublishingInterval float64 + RevisedLifetimeCount uint32 + RevisedMaxKeepAliveCount uint32 + Channel *uasc.SecureChannel + SequenceID uint32 + //SeqNums map[uint32]struct{} + T *time.Ticker + + NotifyChannel chan *ua.MonitoredItemNotification + ModifyChannel chan *ua.ModifySubscriptionRequest + + // the running flag and shutdown channel are used to signal the background task that it should stop. + // multiple places can kill the subscription so make sure you check the running flag using the mutex + // before closing the shutdown channel. + Mu sync.Mutex + running bool + shutdown chan struct{} +} + +func NewSubscription() *Subscription { + return &Subscription{ + //SeqNums: map[uint32]struct{}{}, + NotifyChannel: make(chan *ua.MonitoredItemNotification, 100), + ModifyChannel: make(chan *ua.ModifySubscriptionRequest, 2), + shutdown: make(chan struct{}), + } +} + +func (s *Subscription) Update(req *ua.ModifySubscriptionRequest) { + s.RevisedPublishingInterval = req.RequestedPublishingInterval + s.RevisedLifetimeCount = req.RequestedLifetimeCount + s.RevisedMaxKeepAliveCount = req.RequestedMaxKeepAliveCount +} + +func (s *Subscription) Start() { + go s.run() + +} + +func (s *Subscription) keepalive(pubreq PubReq) error { + eo := make([]*ua.ExtensionObject, 0) + + msg := ua.NotificationMessage{ + SequenceNumber: s.SequenceID + 1, // not sure why but ua expert wants the next sequence number on keepalives. + PublishTime: time.Now(), + NotificationData: eo, + } + + response := &ua.PublishResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: pubreq.Req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + SubscriptionID: s.ID, + MoreNotifications: false, + NotificationMessage: &msg, + AvailableSequenceNumbers: []uint32{}, // an empty array indicates taht we don't support retransmission of messages + Results: []ua.StatusCode{}, + DiagnosticInfos: []*ua.DiagnosticInfo{}, + } + err := s.Channel.SendResponseWithContext(context.Background(), pubreq.ID, response) + if err != nil { + return err + } + return nil +} + +// this function should be run as a go-routine and will handle sending data out +// to the client at the correct rate assuming there are publish requests queued up. +// if the function returns it deletes the subscription +func (s *Subscription) run() { + // if this go routine dies, we need to delete ourselves. + defer func() { + if s.srv.srv.cfg.logger != nil { + s.srv.srv.cfg.logger.Info("Subscription %d shutting down.", s.ID) + } + s.srv.DeleteSubscription(s.ID) + }() + + keepalive_counter := 0 + lifetime_counter := 0 + //TODO: if a sub is modified, this ticker time may need to change. + s.T = time.NewTicker(time.Millisecond * time.Duration(s.RevisedPublishingInterval)) + defer s.T.Stop() + + // This is the master run event loop. It has effectively 3 states that it can be in. The first two are designated with + // the labels L0, and L2. Everything after the L2 loop is the third state where we send any pending notifications. + // The states always go L0 -> L2 -> Sending -> L0. L0 and L2 are both places where we wait so they are done as for loops with + // breaks to go to the next state. + // The sending state always runs to completion. + // + // L0 waits for our notification interval to expire. Any notifications that come in + // while waiting will be stored in the publishQueue. Once the interval expires, we'll move on to L2 if we've got notifications. + // In L2 we wait for a publish request. If we get one, we'll publish the notifications in the publishQueue. If we don't + // get a publish request, we'll continue to count intervals without a publish request. + // + // In L0 and L2, If we get to the lifetime count without a publish request, we'll kill the subscription. + for { + // we don't need to do anything if we don't have at least one thing to publish so lets get that first + publishQueue := make(map[uint32]*ua.MonitoredItemNotification) + + // Collect notifications until our publication interval is ready + L0: + for { + select { + case <-s.shutdown: + return + case newNotification := <-s.NotifyChannel: + publishQueue[newNotification.ClientHandle] = newNotification + case <-s.T.C: + if len(publishQueue) == 0 { + // nothing to publish, increment the keepalive counter and send a keepalive if it + // has been enough intervals. + keepalive_counter++ + if keepalive_counter > int(s.RevisedMaxKeepAliveCount) { + keepalive_counter = 0 + select { + case pubreq := <-s.Session.PublishRequests: + err := s.keepalive(pubreq) + if err != nil { + if s.srv.srv.cfg.logger != nil { + s.srv.srv.cfg.logger.Warn("problem sending keepalive to subscription #%d: %v", s.ID, err) + } + return + } + default: + lifetime_counter++ + if lifetime_counter > int(s.RevisedLifetimeCount) { + if s.srv.srv.cfg.logger != nil { + s.srv.srv.cfg.logger.Warn("Subscription #%d timed out.", s.ID) + } + return + } + } + } + continue // nothing to publish this interval + } + // we have things to publish so we'll break out to do that. + break L0 + case update := <-s.ModifyChannel: + s.Update(update) + } + } + var pubreq PubReq + + // now we need to continue to collect notifications until we've got a publish request + L2: + for { + select { + case <-s.shutdown: + return + case pubreq = <-s.Session.PublishRequests: + // once we get a publish request, we should move on to publish them back + break L2 + case newNotification := <-s.NotifyChannel: + publishQueue[newNotification.ClientHandle] = newNotification + + case <-s.T.C: + // we had another tick without a publish request. + lifetime_counter++ + if lifetime_counter > int(s.RevisedLifetimeCount) { + if s.srv.srv.cfg.logger != nil { + s.srv.srv.cfg.logger.Warn("Subscription %d timed out.", s.ID) + } + return + } + } + } + lifetime_counter = 0 + keepalive_counter = 0 + + s.SequenceID++ + if s.SequenceID == 0 { + // per the spec, the sequence ID cannot be 0 + s.SequenceID = 1 + } + if s.srv.srv.cfg.logger != nil { + s.srv.srv.cfg.logger.Debug("Got publish req on sub #%d. Sequence %d", s.ID, s.SequenceID) + } + // then get all the tags and send them back to the client + + //for x := range pubreq.Req.SubscriptionAcknowledgements { + //a := pubreq.Req.SubscriptionAcknowledgements[x] + //delete(s.SeqNums, a.SequenceNumber) + //} + + final_items := make([]*ua.MonitoredItemNotification, len(publishQueue)) + i := 0 + for k := range publishQueue { + final_items[i] = publishQueue[k] + i++ + } + + dcn := ua.DataChangeNotification{ + MonitoredItems: final_items, + DiagnosticInfos: []*ua.DiagnosticInfo{}, + } + eo := make([]*ua.ExtensionObject, 1) + eo[0] = ua.NewExtensionObject(&dcn) + eo[0].UpdateMask() + + msg := ua.NotificationMessage{ + SequenceNumber: s.SequenceID, + PublishTime: time.Now(), + NotificationData: eo, + } + //s.SeqNums[s.SequenceID] = struct{}{} + + response := &ua.PublishResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: pubreq.Req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + SubscriptionID: s.ID, + MoreNotifications: false, + NotificationMessage: &msg, + AvailableSequenceNumbers: []uint32{}, // an empty array indicates taht we don't support retransmission of messages + Results: []ua.StatusCode{}, + DiagnosticInfos: []*ua.DiagnosticInfo{}, + } + err := s.Channel.SendResponseWithContext(context.Background(), pubreq.ID, response) + if err != nil { + if s.srv.srv.cfg.logger != nil { + s.srv.srv.cfg.logger.Error("problem sending channel response: %v", err) + s.srv.srv.cfg.logger.Error("Killing subscription %d", s.ID) + } + return + } + if s.srv.srv.cfg.logger != nil { + s.srv.srv.cfg.logger.Debug("Published %d items OK for %d", len(publishQueue), s.ID) + } + // wait till we've got a publish request. + } +} + +//PublishRequest_Encoding_DefaultBinary diff --git a/server/view_service.go b/server/view_service.go new file mode 100644 index 00000000..5f3a2524 --- /dev/null +++ b/server/view_service.go @@ -0,0 +1,190 @@ +package server + +import ( + "time" + + "golang.org/x/exp/slices" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/ua" + "github.com/gopcua/opcua/uasc" +) + +var ( + hasSubtype = ua.NewNumericNodeID(0, id.HasSubtype) +) + +// ViewService implements the View Service Set. +// +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.8 +type ViewService struct { + srv *Server +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.8.2 +func (s *ViewService) Browse(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + + req, err := safeReq[*ua.BrowseRequest](r) + if err != nil { + return nil, err + } + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("=== Browse incoming") + } + + resp := &ua.BrowseResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: time.Now(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceResult: ua.StatusOK, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + Results: make([]*ua.BrowseResult, len(req.NodesToBrowse)), + + DiagnosticInfos: []*ua.DiagnosticInfo{{}}, + } + + for i := range req.NodesToBrowse { + br := req.NodesToBrowse[i] + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug(" Browse of %s", br.NodeID.String()) + } + ns, err := s.srv.Namespace(int(br.NodeID.Namespace())) + if err != nil { + resp.Results[i] = &ua.BrowseResult{StatusCode: ua.StatusBad} + continue + } + resp.Results[i] = ns.Browse(br) + } + + return resp, nil + +} + +func suitableRef(srv *Server, desc *ua.BrowseDescription, ref *ua.ReferenceDescription) bool { + if !suitableDirection(desc.BrowseDirection, ref.IsForward) { + if srv.cfg.logger != nil { + srv.cfg.logger.Debug("%v not suitable because of direction", ref) + } + return false + } + if !suitableRefType(srv, desc.ReferenceTypeID, ref.ReferenceTypeID, desc.IncludeSubtypes) { + if srv.cfg.logger != nil { + srv.cfg.logger.Debug("%v not suitable because of ref type", ref) + } + return false + } + if desc.NodeClassMask > 0 && desc.NodeClassMask&uint32(ref.NodeClass) == 0 { + if srv.cfg.logger != nil { + srv.cfg.logger.Debug("%v not suitable because of node class", ref) + } + return false + } + return true +} + +func suitableDirection(bd ua.BrowseDirection, isForward bool) bool { + switch { + case bd == ua.BrowseDirectionBoth: + return true + case bd == ua.BrowseDirectionForward && isForward: + return true + case bd == ua.BrowseDirectionInverse && !isForward: + return true + default: + return false + } +} + +func suitableRefType(srv *Server, ref1, ref2 *ua.NodeID, subtypes bool) bool { + if ref1.Equal(ua.NewNumericNodeID(0, 0)) { + // refType is not specified in browse description. Return all types + return true + } + if ref1.Equal(ref2) { + return true + } + hasRef2Fn := func(nid *ua.NodeID) bool { return nid.Equal(ref2) } + hasSubtypeFn := func(nid *ua.NodeID) bool { return nid.Equal(hasSubtype) } + oktypes := getSubRefs(srv, ref1) + if !subtypes && slices.ContainsFunc(oktypes, hasSubtypeFn) { + for n := slices.IndexFunc(oktypes, hasSubtypeFn); n > 0; { + slices.Delete(oktypes, n, n+1) + } + } + return slices.ContainsFunc(oktypes, hasRef2Fn) +} + +func getSubRefs(srv *Server, nid *ua.NodeID) []*ua.NodeID { + var refs []*ua.NodeID + ns, err := srv.Namespace(int(nid.Namespace())) + if err != nil { + // TODO: return error + return nil + } + node := ns.Node(nid) + if node == nil { + return nil + } + for _, ref := range node.refs { + if ref.ReferenceTypeID.Equal(hasSubtype) && ref.IsForward && ref.NodeID != nil { + refs = append(refs, ref.NodeID.NodeID) + refs = append(refs, getSubRefs(srv, ref.NodeID.NodeID)...) + } + } + return refs +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.8.3 +func (s *ViewService) BrowseNext(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.BrowseNextRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.8.4 +func (s *ViewService) TranslateBrowsePathsToNodeIDs(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.TranslateBrowsePathsToNodeIDsRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.8.5 +func (s *ViewService) RegisterNodes(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.RegisterNodesRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} + +// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.8.6 +func (s *ViewService) UnregisterNodes(sc *uasc.SecureChannel, r ua.Request, reqID uint32) (ua.Response, error) { + if s.srv.cfg.logger != nil { + s.srv.cfg.logger.Debug("Handling %T", r) + } + + req, err := safeReq[*ua.UnregisterNodesRequest](r) + if err != nil { + return nil, err + } + return serviceUnsupported(req.RequestHeader), nil +} diff --git a/subscription.go b/subscription.go index 5436856d..80f5a6d1 100644 --- a/subscription.go +++ b/subscription.go @@ -94,7 +94,7 @@ func (s *Subscription) delete(ctx context.Context) error { } var res *ua.DeleteSubscriptionsResponse - err := s.c.Send(ctx, req, func(v interface{}) error { + err := s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) @@ -123,7 +123,7 @@ func (s *Subscription) Monitor(ctx context.Context, ts ua.TimestampsToReturn, it } var res *ua.CreateMonitoredItemsResponse - err := s.c.Send(ctx, req, func(v interface{}) error { + err := s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) @@ -156,7 +156,7 @@ func (s *Subscription) Unmonitor(ctx context.Context, monitoredItemIDs ...uint32 } var res *ua.DeleteMonitoredItemsResponse - err := s.c.Send(ctx, req, func(v interface{}) error { + err := s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) if err != nil { @@ -198,7 +198,9 @@ func (s *Subscription) ModifyMonitoredItems(ctx context.Context, ts ua.Timestamp ItemsToModify: items, } var res *ua.ModifyMonitoredItemsResponse - err = s.c.Send(ctx, req, func(v interface{}) error { + + err = s.c.Send(ctx, req, func(v ua.Response) error { + return safeAssign(v, &res) }) if err != nil { @@ -250,7 +252,7 @@ func (s *Subscription) SetMonitoringMode(ctx context.Context, monitoringMode ua. MonitoredItemIDs: monitoredItemIDs, } var res *ua.SetMonitoringModeResponse - err = s.c.Send(ctx, req, func(v interface{}) error { + err = s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) if err != nil { @@ -275,7 +277,7 @@ func (s *Subscription) SetTriggering(ctx context.Context, triggeringItemID uint3 } var res *ua.SetTriggeringResponse - err := s.c.Send(ctx, req, func(v interface{}) error { + err := s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) return res, err @@ -372,7 +374,7 @@ func (s *Subscription) recreate_NeedsSubMuxLock(ctx context.Context) error { SubscriptionIDs: []uint32{s.SubscriptionID}, } var res *ua.DeleteSubscriptionsResponse - _ = s.c.Send(ctx, req, func(v interface{}) error { + _ = s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) dlog.Print("subscription deleted") @@ -389,7 +391,7 @@ func (s *Subscription) recreate_NeedsSubMuxLock(ctx context.Context) error { Priority: params.Priority, } var res *ua.CreateSubscriptionResponse - err := s.c.Send(ctx, req, func(v interface{}) error { + err := s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) if err != nil { @@ -432,7 +434,7 @@ func (s *Subscription) recreate_NeedsSubMuxLock(ctx context.Context) error { } var res *ua.CreateMonitoredItemsResponse - err := s.c.Send(ctx, req, func(v interface{}) error { + err := s.c.Send(ctx, req, func(v ua.Response) error { return safeAssign(v, &res) }) if err != nil { diff --git a/tests/go/generate_cert.go b/tests/go/generate_cert.go new file mode 100644 index 00000000..0f19c155 --- /dev/null +++ b/tests/go/generate_cert.go @@ -0,0 +1,109 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Generate a self-signed X.509 certificate for a TLS server. Outputs to +// 'cert.pem' and 'key.pem' and will overwrite existing files. + +// Based on src/crypto/tls/generate_cert.go from the Go SDK +// Modified by the Gopcua Authors for use in creating an OPC-UA compliant client certificate + +package uatest2 + +import ( + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "net/url" + "os" + "strings" + "time" +) + +func GenerateCert(host string, rsaBits int, validFor time.Duration) (certPEM, keyPEM []byte, err error) { + if len(host) == 0 { + return nil, nil, fmt.Errorf("missing required host parameter") + } + if rsaBits == 0 { + rsaBits = 2048 + } + + priv, err := rsa.GenerateKey(rand.Reader, rsaBits) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate private key: %s", err) + } + + notBefore := time.Now() + notAfter := notBefore.Add(validFor) + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + Organization: []string{"Gopcua Test Client"}, + }, + NotBefore: notBefore, + NotAfter: notAfter, + + KeyUsage: x509.KeyUsageContentCommitment | x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageDataEncipherment | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + BasicConstraintsValid: true, + } + + hosts := strings.Split(host, ",") + for _, h := range hosts { + if ip := net.ParseIP(h); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, h) + } + if uri, err := url.Parse(h); err == nil { + template.URIs = append(template.URIs, uri) + } + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv) + if err != nil { + return nil, nil, fmt.Errorf("Failed to create certificate: %s", err) + } + + return pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}), pem.EncodeToMemory(pemBlockForKey(priv)), nil +} + +func publicKey(priv interface{}) interface{} { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &k.PublicKey + case *ecdsa.PrivateKey: + return &k.PublicKey + default: + return nil + } +} + +func pemBlockForKey(priv interface{}) *pem.Block { + switch k := priv.(type) { + case *rsa.PrivateKey: + return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} + case *ecdsa.PrivateKey: + b, err := x509.MarshalECPrivateKey(k) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to marshal ECDSA private key: %v", err) + os.Exit(2) + } + return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + default: + return nil + } +} diff --git a/tests/go/namespace_test.go b/tests/go/namespace_test.go new file mode 100644 index 00000000..ff91b974 --- /dev/null +++ b/tests/go/namespace_test.go @@ -0,0 +1,61 @@ +//go:build integration +// +build integration + +package uatest2 + +import ( + "context" + "testing" + "time" + + "github.com/pascaldekloe/goe/verify" + + "github.com/gopcua/opcua" + "github.com/gopcua/opcua/ua" +) + +func TestNamespace(t *testing.T) { + ctx := context.Background() + + srv := startServer() + defer srv.Close() + + c, err := opcua.NewClient("opc.tcp://localhost:4840", opcua.SecurityMode(ua.MessageSecurityModeNone)) + if err != nil { + t.Fatal(err) + } + if err := c.Connect(ctx); err != nil { + t.Fatal(err) + } + defer c.Close(ctx) + + time.Sleep(2 * time.Second) + + t.Run("NamespaceArray", func(t *testing.T) { + got, err := c.NamespaceArray(ctx) + if err != nil { + t.Fatal(err) + } + want := []string{ + "http://opcfoundation.org/UA/", + "NodeNamespace", + "http://gopcua.com/", + } + verify.Values(t, "", got, want) + }) + t.Run("FindNamespace", func(t *testing.T) { + ns, err := c.FindNamespace(ctx, "http://gopcua.com/") + if err != nil { + t.Fatal(err) + } + if got, want := ns, uint16(2); got != want { + t.Fatalf("got namespace id %d want %d", got, want) + } + }) + t.Run("UpdateNamespaces", func(t *testing.T) { + err := c.UpdateNamespaces(ctx) + if err != nil { + t.Fatal(err) + } + }) +} diff --git a/tests/go/read_test.go b/tests/go/read_test.go new file mode 100644 index 00000000..9cad5166 --- /dev/null +++ b/tests/go/read_test.go @@ -0,0 +1,104 @@ +//go:build integration +// +build integration + +package uatest2 + +import ( + "context" + "testing" + "time" + + "github.com/pascaldekloe/goe/verify" + + "github.com/gopcua/opcua" + "github.com/gopcua/opcua/ua" +) + +// TestRead performs an integration test to read values +// from an OPC/UA server. +func TestRead(t *testing.T) { + tests := []struct { + id *ua.NodeID + v interface{} + }{ + {ua.NewStringNodeID(1, "ro_bool"), true}, + {ua.NewStringNodeID(1, "rw_bool"), true}, + {ua.NewStringNodeID(1, "ro_int32"), int32(5)}, + {ua.NewStringNodeID(1, "rw_int32"), int32(5)}, + // TODO: not implemented in server yet. + //{ua.NewStringNodeID(2, "array_int32"), []int32{1, 2, 3}}, + //{ua.NewStringNodeID(2, "2d_array_int32"), [][]int32{{1}, {2}, {3}}}, + } + + ctx := context.Background() + + srv := startServer() + defer srv.Close() + + time.Sleep(2 * time.Second) + + c, err := opcua.NewClient("opc.tcp://localhost:4840", opcua.SecurityMode(ua.MessageSecurityModeNone)) + if err != nil { + t.Fatal(err) + } + if err := c.Connect(ctx); err != nil { + t.Fatal(err) + } + defer c.Close(ctx) + + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + t.Run("Read", func(t *testing.T) { + testRead(t, ctx, c, tt.v, tt.id) + }) + t.Run("RegisteredRead", func(t *testing.T) { + t.Skip("Not implemented in server") + testRegisteredRead(t, ctx, c, tt.v, tt.id) + }) + }) + } +} + +func testRead(t *testing.T, ctx context.Context, c *opcua.Client, v interface{}, id *ua.NodeID) { + t.Helper() + + resp, err := c.Read(ctx, &ua.ReadRequest{ + NodesToRead: []*ua.ReadValueID{ + {NodeID: id}, + }, + TimestampsToReturn: ua.TimestampsToReturnBoth, + }) + if err != nil { + t.Fatalf("Read failed: %s", err) + } + if resp.Results[0].Status != ua.StatusOK { + t.Fatalf("Status not OK: %v", resp.Results[0].Status) + } + if got, want := resp.Results[0].Value.Value(), v; !verify.Values(t, "", got, want) { + t.Fail() + } +} + +func testRegisteredRead(t *testing.T, ctx context.Context, c *opcua.Client, v interface{}, id *ua.NodeID) { + t.Helper() + + resp, err := c.RegisterNodes(ctx, &ua.RegisterNodesRequest{ + NodesToRegister: []*ua.NodeID{id}, + }) + if err != nil { + t.Fatalf("RegisterNodes failed: %s", err) + } + + testRead(t, ctx, c, v, resp.RegisteredNodeIDs[0]) + testRead(t, ctx, c, v, resp.RegisteredNodeIDs[0]) + testRead(t, ctx, c, v, resp.RegisteredNodeIDs[0]) + testRead(t, ctx, c, v, resp.RegisteredNodeIDs[0]) + testRead(t, ctx, c, v, resp.RegisteredNodeIDs[0]) + + _, err = c.UnregisterNodes(ctx, &ua.UnregisterNodesRequest{ + NodesToUnregister: []*ua.NodeID{id}, + }) + if err != nil { + t.Fatalf("UnregisterNodes failed: %s", err) + } +} diff --git a/tests/go/readme.md b/tests/go/readme.md new file mode 100644 index 00000000..136cdc12 --- /dev/null +++ b/tests/go/readme.md @@ -0,0 +1 @@ +this package is for testing the gopcua client against the gopcua server \ No newline at end of file diff --git a/tests/go/server.go b/tests/go/server.go new file mode 100644 index 00000000..46cfb9d2 --- /dev/null +++ b/tests/go/server.go @@ -0,0 +1,85 @@ +// Copyright 2018-2020 opcua authors. All rights reserved. +// Use of this source code is governed by a MIT-style license that can be +// found in the LICENSE file. + +package uatest2 + +import ( + "context" + "log" + + "github.com/gopcua/opcua/id" + "github.com/gopcua/opcua/server" + "github.com/gopcua/opcua/ua" +) + +func startServer() *server.Server { + var opts []server.Option + port := 4840 + + opts = append(opts, + server.EnableSecurity("None", ua.MessageSecurityModeNone), + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic128Rsa15", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSign), + server.EnableSecurity("Basic256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Basic256Sha256", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes128_Sha256_RsaOaep", ua.MessageSecurityModeSignAndEncrypt), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSign), + server.EnableSecurity("Aes256_Sha256_RsaPss", ua.MessageSecurityModeSignAndEncrypt), + ) + + opts = append(opts, + server.EnableAuthMode(ua.UserTokenTypeAnonymous), + server.EnableAuthMode(ua.UserTokenTypeUserName), + server.EnableAuthMode(ua.UserTokenTypeCertificate), + // server.EnableAuthWithoutEncryption(), // Dangerous and not recommended, shown for illustration only + ) + + opts = append(opts, + server.EndPoint("localhost", port), + ) + + s := server.New(opts...) + + root_ns, _ := s.Namespace(0) + obj_node := root_ns.Objects() + + // Create a new node namespace. You can add namespaces before or after starting the server. + nodeNS := server.NewNodeNameSpace(s, "NodeNamespace") + // add it to the server. + s.AddNamespace(nodeNS) + nns_obj := nodeNS.Objects() + // add the reference for this namespace's root object folder to the server's root object folder + obj_node.AddRef(nns_obj, id.HasComponent, true) + + // Create some nodes for it. + n := nodeNS.AddNewVariableStringNode("ro_bool", true) + n.SetAttribute(ua.AttributeIDUserAccessLevel, ua.DataValue{EncodingMask: ua.DataValueValue, Value: ua.MustVariant(uint32(1))}) + nns_obj.AddRef(n, id.HasComponent, true) + n = nodeNS.AddNewVariableStringNode("rw_bool", true) + nns_obj.AddRef(n, id.HasComponent, true) + + n = nodeNS.AddNewVariableStringNode("ro_int32", int32(5)) + n.SetAttribute(ua.AttributeIDUserAccessLevel, ua.DataValue{EncodingMask: ua.DataValueValue, Value: ua.MustVariant(uint32(1))}) + nns_obj.AddRef(n, id.HasComponent, true) + n = nodeNS.AddNewVariableStringNode("rw_int32", int32(5)) + nns_obj.AddRef(n, id.HasComponent, true) + + // Create a new node namespace. You can add namespaces before or after starting the server. + gopcuaNS := server.NewNodeNameSpace(s, "http://gopcua.com/") + // add it to the server. + s.AddNamespace(gopcuaNS) + nns_obj = gopcuaNS.Objects() + // add the reference for this namespace's root object folder to the server's root object folder + obj_node.AddRef(nns_obj, id.HasComponent, true) + + // Create a new node namespace. You can add namespaces before or after starting the server. + // Start the server + if err := s.Start(context.Background()); err != nil { + log.Fatalf("Error starting server, exiting: %s", err) + } + return s +} diff --git a/tests/go/stats_test.go b/tests/go/stats_test.go new file mode 100644 index 00000000..4e9df96f --- /dev/null +++ b/tests/go/stats_test.go @@ -0,0 +1,72 @@ +package uatest2 + +import ( + "context" + "expvar" + "testing" + + "github.com/pascaldekloe/goe/verify" + + "github.com/gopcua/opcua" + "github.com/gopcua/opcua/stats" + "github.com/gopcua/opcua/ua" +) + +func newExpVarInt(i int64) *expvar.Int { + v := &expvar.Int{} + v.Set(i) + return v +} + +func TestStats(t *testing.T) { + stats.Reset() + + ctx := context.Background() + + srv := startServer() + defer srv.Close() + + c, err := opcua.NewClient("opc.tcp://localhost:4840", opcua.SecurityMode(ua.MessageSecurityModeNone)) + if err != nil { + t.Fatal(err) + } + if err := c.Connect(ctx); err != nil { + t.Fatal(err) + } + c.Close(ctx) + + want := map[string]*expvar.Int{ + "Dial": newExpVarInt(1), + "ActivateSession": newExpVarInt(1), + "NamespaceArray": newExpVarInt(1), + "UpdateNamespaces": newExpVarInt(1), + "NodesToRead": newExpVarInt(1), + "Read": newExpVarInt(1), + "Send": newExpVarInt(2), + "Close": newExpVarInt(1), + "CloseSession": newExpVarInt(2), + "SecureChannel": newExpVarInt(3), + "Session": newExpVarInt(4), + "State": newExpVarInt(0), + } + + got := map[string]expvar.Var{} + stats.Client().Do(func(kv expvar.KeyValue) { got[kv.Key] = kv.Value }) + for k := range got { + if _, ok := want[k]; !ok { + t.Fatalf("got unexpected key %q", k) + } + } + for k := range want { + if _, ok := got[k]; !ok { + t.Fatalf("missing expected key %q", k) + } + } + + for k, ev := range want { + v := stats.Client().Get(k) + if !verify.Values(t, "", v, ev) { + t.Errorf("got %s for %q, want %s", v.String(), k, ev.String()) + } + } +} diff --git a/tests/go/write_test.go b/tests/go/write_test.go new file mode 100644 index 00000000..475bbbae --- /dev/null +++ b/tests/go/write_test.go @@ -0,0 +1,82 @@ +//go:build integration +// +build integration + +package uatest2 + +import ( + "context" + "testing" + "time" + + "github.com/gopcua/opcua" + "github.com/gopcua/opcua/ua" +) + +// TestWrite performs an integration test to first write +// and then read values from an OPC/UA server. +func TestWrite(t *testing.T) { + tests := []struct { + id *ua.NodeID + v interface{} + status ua.StatusCode + }{ + // happy flows + {ua.NewStringNodeID(1, "rw_bool"), false, ua.StatusOK}, + {ua.NewStringNodeID(1, "rw_int32"), int32(9), ua.StatusOK}, + + // error flows + {ua.NewStringNodeID(1, "ro_bool"), false, ua.StatusBadUserAccessDenied}, + } + + ctx := context.Background() + + srv := startServer() + defer srv.Close() + + time.Sleep(2 * time.Second) + + c, err := opcua.NewClient("opc.tcp://localhost:4840", opcua.SecurityMode(ua.MessageSecurityModeNone)) + if err != nil { + t.Fatal(err) + } + if err := c.Connect(ctx); err != nil { + t.Fatal(err) + } + defer c.Close(ctx) + + for _, tt := range tests { + t.Run(tt.id.String(), func(t *testing.T) { + testWrite(t, ctx, c, tt.status, &ua.WriteRequest{ + NodesToWrite: []*ua.WriteValue{ + &ua.WriteValue{ + NodeID: tt.id, + AttributeID: ua.AttributeIDValue, + Value: &ua.DataValue{ + EncodingMask: ua.DataValueValue, + Value: ua.MustVariant(tt.v), + }, + }, + }, + }) + + // skip read tests if the write is expected to fail + if tt.status != ua.StatusOK { + return + } + + testRead(t, ctx, c, tt.v, tt.id) + }) + } +} + +func testWrite(t *testing.T, ctx context.Context, c *opcua.Client, status ua.StatusCode, req *ua.WriteRequest) { + t.Helper() + + resp, err := c.Write(ctx, req) + if err != nil { + t.Fatalf("Write failed: %s", err) + } + if got, want := resp.Results[0], status; got != want { + t.Fatalf("got status %v want %v", got, want) + } +} diff --git a/uatest/generate_cert.go b/tests/python/generate_cert.go similarity index 100% rename from uatest/generate_cert.go rename to tests/python/generate_cert.go diff --git a/uatest/method_server.py b/tests/python/method_server.py old mode 100755 new mode 100644 similarity index 100% rename from uatest/method_server.py rename to tests/python/method_server.py diff --git a/uatest/method_test.go b/tests/python/method_test.go similarity index 97% rename from uatest/method_test.go rename to tests/python/method_test.go index 77172714..4739af5f 100644 --- a/uatest/method_test.go +++ b/tests/python/method_test.go @@ -58,7 +58,7 @@ func TestCallMethod(t *testing.T) { ctx := context.Background() - srv := NewServer("method_server.py") + srv := NewPythonServer("method_server.py") defer srv.Close() c, err := opcua.NewClient(srv.Endpoint, srv.Opts...) diff --git a/uatest/namespace_test.go b/tests/python/namespace_test.go similarity index 96% rename from uatest/namespace_test.go rename to tests/python/namespace_test.go index ddec547b..bf59d1f3 100644 --- a/uatest/namespace_test.go +++ b/tests/python/namespace_test.go @@ -15,7 +15,7 @@ import ( func TestNamespace(t *testing.T) { ctx := context.Background() - srv := NewServer("rw_server.py") + srv := NewPythonServer("rw_server.py") defer srv.Close() c, err := opcua.NewClient(srv.Endpoint, srv.Opts...) diff --git a/uatest/server.go b/tests/python/py_server.go similarity index 82% rename from uatest/server.go rename to tests/python/py_server.go index 1ed9441e..1fd50ff4 100644 --- a/uatest/server.go +++ b/tests/python/py_server.go @@ -15,8 +15,14 @@ import ( "github.com/gopcua/opcua/ua" ) -// Server runs a python test server. -type Server struct { +// todo(fs): not sure we need this here +type Server interface { + URL() string + Close() error +} + +// PythonServer runs a python test server. +type PythonServer struct { // Path is the path to the Python server. Path string @@ -32,17 +38,17 @@ type Server struct { waitch chan error } -// NewServer creates a test server and starts it. The function +// NewPythonServer creates a test server and starts it. The function // panics if the server cannot be started. -func NewServer(path string) *Server { - s := &Server{Path: path, waitch: make(chan error)} +func NewPythonServer(path string) *PythonServer { + s := &PythonServer{Path: path, waitch: make(chan error)} if err := s.Run(); err != nil { panic(err) } return s } -func (s *Server) Run() error { +func (s *PythonServer) Run() error { wd, err := os.Getwd() if err != nil { return err @@ -93,7 +99,7 @@ func (s *Server) Run() error { } } -func (s *Server) Close() error { +func (s *PythonServer) Close() error { if s.cmd == nil { return errors.Errorf("not running") } diff --git a/uatest/read_test.go b/tests/python/read_test.go similarity index 98% rename from uatest/read_test.go rename to tests/python/read_test.go index b23c46cf..1f8e5207 100644 --- a/uatest/read_test.go +++ b/tests/python/read_test.go @@ -30,7 +30,7 @@ func TestRead(t *testing.T) { ctx := context.Background() - srv := NewServer("rw_server.py") + srv := NewPythonServer("rw_server.py") defer srv.Close() c, err := opcua.NewClient(srv.Endpoint, srv.Opts...) diff --git a/uatest/read_unknow_node_id_server.py b/tests/python/read_unknow_node_id_server.py old mode 100755 new mode 100644 similarity index 100% rename from uatest/read_unknow_node_id_server.py rename to tests/python/read_unknow_node_id_server.py diff --git a/uatest/read_unknow_node_id_test.go b/tests/python/read_unknow_node_id_test.go similarity index 95% rename from uatest/read_unknow_node_id_test.go rename to tests/python/read_unknow_node_id_test.go index b5fd4249..c3335652 100644 --- a/uatest/read_unknow_node_id_test.go +++ b/tests/python/read_unknow_node_id_test.go @@ -17,7 +17,7 @@ import ( func TestReadUnknowNodeID(t *testing.T) { ctx := context.Background() - srv := NewServer("read_unknow_node_id_server.py") + srv := NewPythonServer("read_unknow_node_id_server.py") defer srv.Close() c, err := opcua.NewClient(srv.Endpoint, srv.Opts...) diff --git a/tests/python/readme.md b/tests/python/readme.md new file mode 100644 index 00000000..7df18d21 --- /dev/null +++ b/tests/python/readme.md @@ -0,0 +1 @@ +This test package is for testing the gopcua client against an external OPC server (python) \ No newline at end of file diff --git a/uatest/reconnection_server.py b/tests/python/reconnection_server.py similarity index 100% rename from uatest/reconnection_server.py rename to tests/python/reconnection_server.py diff --git a/uatest/reconnection_test.go b/tests/python/reconnection_test.go similarity index 98% rename from uatest/reconnection_test.go rename to tests/python/reconnection_test.go index e919c53c..ff7899ad 100644 --- a/uatest/reconnection_test.go +++ b/tests/python/reconnection_test.go @@ -24,7 +24,7 @@ const ( func TestAutoReconnection(t *testing.T) { ctx := context.Background() - srv := NewServer("reconnection_server.py") + srv := NewPythonServer("reconnection_server.py") defer srv.Close() c, err := opcua.NewClient(srv.Endpoint, srv.Opts...) diff --git a/uatest/rw_server.py b/tests/python/rw_server.py old mode 100755 new mode 100644 similarity index 100% rename from uatest/rw_server.py rename to tests/python/rw_server.py diff --git a/uatest/stats_test.go b/tests/python/stats_test.go similarity index 97% rename from uatest/stats_test.go rename to tests/python/stats_test.go index f15bf333..1a99bdf3 100644 --- a/uatest/stats_test.go +++ b/tests/python/stats_test.go @@ -25,7 +25,7 @@ func TestStats(t *testing.T) { ctx := context.Background() - srv := NewServer("rw_server.py") + srv := NewPythonServer("rw_server.py") defer srv.Close() c, err := opcua.NewClient(srv.Endpoint, srv.Opts...) diff --git a/uatest/timeout_test.go b/tests/python/timeout_test.go similarity index 100% rename from uatest/timeout_test.go rename to tests/python/timeout_test.go diff --git a/uatest/write_test.go b/tests/python/write_test.go similarity index 97% rename from uatest/write_test.go rename to tests/python/write_test.go index f1b76b7b..3b72edf1 100644 --- a/uatest/write_test.go +++ b/tests/python/write_test.go @@ -29,7 +29,7 @@ func TestWrite(t *testing.T) { ctx := context.Background() - srv := NewServer("rw_server.py") + srv := NewPythonServer("rw_server.py") defer srv.Close() c, err := opcua.NewClient(srv.Endpoint, srv.Opts...) diff --git a/ua/expanded_node_id.go b/ua/expanded_node_id.go index 404a6edb..0e351438 100644 --- a/ua/expanded_node_id.go +++ b/ua/expanded_node_id.go @@ -104,12 +104,19 @@ func (e *ExpandedNodeID) Decode(b []byte) (int, error) { func (e *ExpandedNodeID) Encode() ([]byte, error) { buf := NewBuffer(nil) - buf.WriteStruct(e.NodeID) - if e.HasNamespaceURI() { - buf.WriteString(e.NamespaceURI) - } - if e.HasServerIndex() { - buf.WriteUint32(e.ServerIndex) + if e == nil { + return []byte{}, errors.New("e was nil") + } + if e.NodeID == nil { + buf.WriteInt16(0) + } else { + buf.WriteStruct(e.NodeID) + if e.HasNamespaceURI() { + buf.WriteString(e.NamespaceURI) + } + if e.HasServerIndex() { + buf.WriteUint32(e.ServerIndex) + } } return buf.Bytes(), buf.Error() diff --git a/ua/node_id.go b/ua/node_id.go index 81c892ea..bae34aac 100644 --- a/ua/node_id.go +++ b/ua/node_id.go @@ -7,6 +7,7 @@ package ua import ( "encoding/base64" "encoding/json" + "encoding/xml" "fmt" "math" @@ -290,8 +291,13 @@ func (n *NodeID) SetStringID(v string) error { // String returns the string representation of the NodeID // in the format described by ParseNodeID. func (n *NodeID) String() string { + if n == nil { + return "" + } + switch n.Type() { case NodeIDTypeTwoByte: + return fmt.Sprintf("i=%d", n.nid) case NodeIDTypeFourByte: @@ -391,6 +397,10 @@ func (n *NodeID) Encode() ([]byte, error) { return buf.Bytes(), buf.Error() } +func (n *NodeID) Equal(o *NodeID) bool { + return n.String() == o.String() +} + func (n *NodeID) MarshalJSON() ([]byte, error) { if n == nil { return []byte(`null`), nil @@ -410,3 +420,17 @@ func (n *NodeID) UnmarshalJSON(b []byte) error { *n = *nid return nil } + +// todo(fs): not sure if this should exist here. Maybe there are multiple different xml formats? +func (n *NodeID) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + var s string + if err := d.DecodeElement(&s, &start); err != nil { + return err + } + id, err := ParseNodeID(s) + if err != nil { + return err + } + *n = *id + return nil +} diff --git a/ua/variant.go b/ua/variant.go index 21d4f43f..60fda05d 100644 --- a/ua/variant.go +++ b/ua/variant.go @@ -505,6 +505,8 @@ func (m *Variant) String() string { return m.value.(*LocalizedText).Text case TypeIDQualifiedName: return m.value.(*QualifiedName).Name + case TypeIDFloat: + return fmt.Sprintf("%f", m.value) default: return "" } diff --git a/uacp/conn.go b/uacp/conn.go index c2acb79c..5dcf15bd 100644 --- a/uacp/conn.go +++ b/uacp/conn.go @@ -298,10 +298,12 @@ func (c *Conn) srvhandshake(endpoint string) error { c.SendError(ua.StatusBadTCPInternalError) return err } - if hel.EndpointURL != endpoint { - c.SendError(ua.StatusBadTCPEndpointURLInvalid) - return errors.Errorf("uacp: invalid endpoint url %s", hel.EndpointURL) - } + // TODO (dh): Temporarily disabled until a proper fix can be implemented. + // Problem is that when listening on a random port, (eg. :0), this check fails + //if hel.EndpointURL != endpoint { + // c.SendError(ua.StatusBadTCPEndpointURLInvalid) + // return fmt.Errorf("uacp: invalid endpoint url %s", hel.EndpointURL) + //} if err := c.Send("ACKF", c.ack); err != nil { c.SendError(ua.StatusBadTCPInternalError) return err diff --git a/uapolicy/securitypolicy.go b/uapolicy/securitypolicy.go index 3b309338..d31f0488 100644 --- a/uapolicy/securitypolicy.go +++ b/uapolicy/securitypolicy.go @@ -183,3 +183,19 @@ type policy struct { asymmetric func(localKey *rsa.PrivateKey, remoteKey *rsa.PublicKey) (*EncryptionAlgorithm, error) symmetric func(localNonce []byte, remoteNonce []byte) (*EncryptionAlgorithm, error) } + +// SecurityLevel returns the recommended security level for endpoints +// It is a ranking of security quality, higher is better +var securityLevels = map[string][4]uint8{ + // Array indicies are : {Invalid, None, Sign, SignAndEncrypt} + ua.SecurityPolicyURINone: {00, 01, 00, 00}, + ua.SecurityPolicyURIBasic128Rsa15: {00, 00, 12, 13}, + ua.SecurityPolicyURIBasic256: {00, 00, 22, 23}, + ua.SecurityPolicyURIBasic256Sha256: {00, 00, 32, 33}, + ua.SecurityPolicyURIAes128Sha256RsaOaep: {00, 00, 42, 43}, + ua.SecurityPolicyURIAes256Sha256RsaPss: {00, 00, 52, 53}, +} + +func SecurityLevel(policy string, mode ua.MessageSecurityMode) uint8 { + return securityLevels[policy][mode] +} diff --git a/uasc/message.go b/uasc/message.go index 8657d111..64806695 100644 --- a/uasc/message.go +++ b/uasc/message.go @@ -7,6 +7,7 @@ package uasc import ( "math" + "github.com/gopcua/opcua/debug" "github.com/gopcua/opcua/errors" "github.com/gopcua/opcua/ua" ) @@ -129,6 +130,13 @@ func (m *Message) EncodeChunks(maxBodySize uint32) ([][]byte, error) { return nil, dataBody.Error() } + // todo(fs): sometimes maxBodySize == 0 probably we get an invalid channel instance + // todo(fs): log this and investigate + if maxBodySize == 0 { + debug.Printf("maxBodySize == 0 !!!") + maxBodySize = 1 << 12 + } + nrChunks := uint32(dataBody.Len())/(maxBodySize) + 1 chunks := make([][]byte, nrChunks) diff --git a/uasc/secure_channel.go b/uasc/secure_channel.go index 78822642..a8e8f6ed 100644 --- a/uasc/secure_channel.go +++ b/uasc/secure_channel.go @@ -6,11 +6,15 @@ package uasc import ( "context" + "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/binary" "io" + "log" "math" + "net" + "strings" "sync" "sync/atomic" "time" @@ -27,11 +31,40 @@ const ( MaxTimeout = math.MaxUint32 * time.Millisecond ) -type response struct { - ReqID uint32 - SCID uint32 - V interface{} - Err error +type channelKind int + +const ( + client channelKind = iota + server +) + +// ResponseHandler handles the response of a service request and +// is used by the client. +type ResponseHandler func(ua.Response) error + +// MessageBody is the content of a secure channel message sent +// between a client and a server and represents a service +// request or response. +type MessageBody struct { + RequestID uint32 + SecureChannelID uint32 + Err error + + body any +} + +func (b MessageBody) Request() ua.Request { + if x, ok := b.body.(ua.Request); ok { + return x + } + return nil +} + +func (b MessageBody) Response() ua.Response { + if x, ok := b.body.(ua.Response); ok { + return x + } + return nil } type conditionLocker struct { @@ -100,8 +133,8 @@ type SecureChannel struct { rcvLocker *conditionLocker pendingReq sync.WaitGroup - // handles maps request IDs to response channels - handlers map[uint32]chan *response + // handles maps requestIDs to response channels + handlers map[uint32]chan *MessageBody handlersMu sync.Mutex // chunks maintains a temporary list of chunks for a given request ID @@ -115,12 +148,55 @@ type SecureChannel struct { openingMu sync.Mutex // errorCh receive dispatcher errors - errCh chan<- error + errch chan<- error + + // required for the server channel + + // // secureChannelID is a unique identifier for the SecureChannel assigned by the Server. + // // If a Server receives a SecureChannelId which it does not recognize it shall return an + // // appropriate transport layer error. + // // + // // When a Server starts the first SecureChannelId used should be a value that is likely to + // // be unique after each restart. This ensures that a Server restart does not cause + // // previously connected Clients to accidentally ‘reuse’ SecureChannels that did not belong + // // to them. + // secureChannelID uint32 + + // // sequenceNumber is a monotonically increasing sequence number assigned by the sender to each + // // MessageChunk sent over the SecureChannel. + // sequenceNumber uint32 + + // // securityTokenID is a unique identifier for the SecureChannel SecurityToken used to secure the Message. + // // This identifier is returned by the Server in an OpenSecureChannel response Message. + // // If a Server receives a TokenId which it does not recognize it shall return an appropriate + // // transport layer error. + // securityTokenID uint32 + + // kind indicates whether this is a server or a client channel. + kind channelKind closeOnce sync.Once } func NewSecureChannel(endpoint string, c *uacp.Conn, cfg *Config, errCh chan<- error) (*SecureChannel, error) { + return newSecureChannel(endpoint, c, cfg, client, errCh, 0, 0, 0) +} + +func NewServerSecureChannel(endpoint string, c *uacp.Conn, cfg *Config, errCh chan<- error, secureChannelID, sequenceNumber, securityTokenID uint32) (*SecureChannel, error) { + s, err := newSecureChannel(endpoint, c, cfg, server, errCh, secureChannelID, sequenceNumber, securityTokenID) + if err != nil { + return nil, err + } + + s.openingInstance = newChannelInstance(s) + s.openingInstance.secureChannelID = secureChannelID + s.openingInstance.sequenceNumber = sequenceNumber + s.openingInstance.securityTokenID = securityTokenID + + return s, nil +} + +func newSecureChannel(endpoint string, c *uacp.Conn, cfg *Config, kind channelKind, errCh chan<- error, secureChannelID, sequenceNumber, securityTokenID uint32) (*SecureChannel, error) { if c == nil { return nil, errors.Errorf("no connection") } @@ -143,23 +219,31 @@ func NewSecureChannel(endpoint string, c *uacp.Conn, cfg *Config, errCh chan<- e } s := &SecureChannel{ - endpointURL: endpoint, - c: c, - cfg: cfg, - requestID: cfg.RequestIDSeed, + endpointURL: endpoint, + c: c, + cfg: cfg, + requestID: cfg.RequestIDSeed, + kind: kind, + // secureChannelID: secureChannelID, + // sequenceNumber: sequenceNumber, + // securityTokenID: securityTokenID, reqLocker: newConditionLocker(), rcvLocker: newConditionLocker(), - errCh: errCh, + errch: errCh, closing: make(chan struct{}), disconnected: make(chan struct{}), instances: make(map[uint32][]*channelInstance), chunks: make(map[uint32][]*MessageChunk), - handlers: make(map[uint32]chan *response), + handlers: make(map[uint32]chan *MessageBody), } return s, nil } +func (s *SecureChannel) RemoteAddr() net.Addr { + return s.c.TCPConn.RemoteAddr() +} + func (s *SecureChannel) getActiveChannelInstance() (*channelInstance, error) { s.instancesMu.Lock() defer s.instancesMu.Unlock() @@ -182,48 +266,47 @@ func (s *SecureChannel) dispatcher() { case <-s.closing: return default: - resp := s.receive(ctx) - - if resp.Err != nil { + msg := s.Receive(ctx) + if msg.Err != nil { select { case <-s.closing: return default: select { - case s.errCh <- resp.Err: + case s.errch <- msg.Err: default: } } } - if resp.Err == io.EOF { + if msg.Err == io.EOF { return } - if resp.Err != nil { - debug.Printf("uasc %d/%d: err: %v", s.c.ID(), resp.ReqID, resp.Err) + if msg.Err != nil { + debug.Printf("uasc %d/%d: err: %v", s.c.ID(), msg.RequestID, msg.Err) } else { - debug.Printf("uasc %d/%d: recv %T", s.c.ID(), resp.ReqID, resp.V) + debug.Printf("uasc %d/%d: recv %T", s.c.ID(), msg.RequestID, msg.body) } - ch, ok := s.popHandler(resp.ReqID) + ch, ok := s.popHandler(msg.RequestID) if !ok { - debug.Printf("uasc %d/%d: no handler for %T", s.c.ID(), resp.ReqID, resp.V) + debug.Printf("uasc %d/%d: no handler for %T", s.c.ID(), msg.RequestID, msg.body) continue } // HACK - if _, ok := resp.V.(*ua.OpenSecureChannelResponse); ok { + if _, ok := msg.Response().(*ua.OpenSecureChannelResponse); ok { s.rcvLocker.lock() } - debug.Printf("uasc %d/%d: sending %T to handler", s.c.ID(), resp.ReqID, resp.V) + debug.Printf("uasc %d/%d: sending %T to handler", s.c.ID(), msg.RequestID, msg.body) select { - case ch <- resp: + case ch <- msg: default: // this should never happen since the chan is of size one - debug.Printf("uasc %d/%d: unexpected state. channel write should always succeed.", s.c.ID(), resp.ReqID) + debug.Printf("uasc %d/%d: unexpected state. channel write should always succeed.", s.c.ID(), msg.RequestID) } s.rcvLocker.waitIfLock() @@ -231,32 +314,37 @@ func (s *SecureChannel) dispatcher() { } } -// receive receives message chunks from the secure channel, decodes and forwards +// Receive receives message chunks from the secure channel, decodes and forwards // them to the registered callback channel, if there is one. Otherwise, // the message is dropped. -func (s *SecureChannel) receive(ctx context.Context) *response { +func (s *SecureChannel) Receive(ctx context.Context) *MessageBody { for { select { case <-ctx.Done(): - return &response{Err: ctx.Err()} + return &MessageBody{Err: ctx.Err()} default: chunk, err := s.readChunk() if err == io.EOF { debug.Printf("uasc %d: readChunk EOF", s.c.ID()) - return &response{Err: err} + return &MessageBody{Err: err} } if err != nil { - return &response{Err: err} + return &MessageBody{Err: err} } hdr := chunk.Header reqID := chunk.SequenceHeader.RequestID - resp := &response{ - ReqID: reqID, - SCID: chunk.MessageHeader.Header.SecureChannelID, + strdat := string(chunk.Data) + if strings.Contains(strdat, "CurrentTime") { + debug.Printf("Requested CurrentTime.") + } + + msg := &MessageBody{ + RequestID: reqID, + SecureChannelID: chunk.MessageHeader.Header.SecureChannelID, } debug.Printf("uasc %d/%d: recv %s%c with %d bytes", s.c.ID(), reqID, hdr.MessageType, hdr.ChunkType, hdr.MessageSize) @@ -271,19 +359,19 @@ func (s *SecureChannel) receive(ctx context.Context) *response { msga := new(MessageAbort) if _, err := msga.Decode(chunk.Data); err != nil { debug.Printf("uasc %d/%d: invalid MSGA chunk. %s", s.c.ID(), reqID, err) - resp.Err = ua.StatusBadDecodingError - return resp + msg.Err = ua.StatusBadDecodingError + return msg } - return &response{ReqID: reqID, Err: ua.StatusCode(msga.ErrorCode)} + return &MessageBody{RequestID: reqID, Err: ua.StatusCode(msga.ErrorCode)} case 'C': s.chunks[reqID] = append(s.chunks[reqID], chunk) if n := len(s.chunks[reqID]); uint32(n) > s.c.MaxChunkCount() { delete(s.chunks, reqID) s.chunksMu.Unlock() - resp.Err = errors.Errorf("too many chunks: %d > %d", n, s.c.MaxChunkCount()) - return resp + msg.Err = errors.Errorf("too many chunks: %d > %d", n, s.c.MaxChunkCount()) + return msg } s.chunksMu.Unlock() continue @@ -297,15 +385,18 @@ func (s *SecureChannel) receive(ctx context.Context) *response { b, err := mergeChunks(all) if err != nil { - resp.Err = err - return resp + msg.Err = err + return msg } if uint32(len(b)) > s.c.MaxMessageSize() { - resp.Err = errors.Errorf("message too large: %d > %d", uint32(len(b)), s.c.MaxMessageSize()) - return resp + msg.Err = errors.Errorf("message too large: %d > %d", uint32(len(b)), s.c.MaxMessageSize()) + return msg } + // todo(fs): Why are we talking about ResponseHeaders here? + // todo(fs): this should apply to both requests and responses + // since we are not decoding the ResponseHeader separately // we need to drop every message that has an error since we // cannot get to the RequestHandle in the ResponseHeader. @@ -313,24 +404,34 @@ func (s *SecureChannel) receive(ctx context.Context) *response { // and subsequently remove it and the TypeID from all service // structs and tests. We also need to add a deadline to all // handlers and check them periodically to time them out. - _, svc, err := ua.DecodeService(b) + _, body, err := ua.DecodeService(b) if err != nil { - resp.Err = err - return resp + msg.Err = err + return msg } - resp.V = svc + msg.body = body + + // todo(fs): not sure this is correct + if req, ok := msg.Request().(*ua.OpenSecureChannelRequest); ok { + err := s.handleOpenSecureChannelRequest(reqID, req) + if err != nil { + debug.Printf("uasc %d/%d: handling %T failed: %v", s.c.ID(), reqID, req, err) + return &MessageBody{Err: err} + } + return &MessageBody{} + } // If the service status is not OK then bubble // that error up to the caller. - if r, ok := svc.(ua.Response); ok { - if status := r.Header().ServiceResult; status != ua.StatusOK { - resp.Err = status - return resp + if resp := msg.Response(); resp != nil { + if status := resp.Header().ServiceResult; status != ua.StatusOK { + msg.Err = status + return msg } } - return resp + return msg } } } @@ -375,12 +476,31 @@ func (s *SecureChannel) readChunk() (*MessageChunk, error) { return nil, errors.Errorf("sechan: invalid state. openingInstance is nil.") } + s.cfg.SecurityPolicyURI = m.SecurityPolicyURI if m.SecurityPolicyURI != ua.SecurityPolicyURINone { s.cfg.RemoteCertificate = m.AsymmetricSecurityHeader.SenderCertificate debug.Printf("uasc %d: setting securityPolicy to %s", s.c.ID(), m.SecurityPolicyURI) - } - s.cfg.SecurityPolicyURI = m.SecurityPolicyURI + // TODO: where does this need to actually be set? It should be independent of the securitypolicy + // but here I'm just assuming it is sign and encrypt when we have anything other than None + // The problem is we need to know whether the message has to be decrypted before we can look at the + // security mode field in the open request to see if it is encrypted! + s.cfg.SecurityMode = ua.MessageSecurityModeSignAndEncrypt + remoteCert, err := x509.ParseCertificate(s.cfg.RemoteCertificate) + if err != nil { + return nil, err + } + remoteKey, ok := remoteCert.PublicKey.(*rsa.PublicKey) + if !ok { + return nil, ua.StatusBadCertificateInvalid + } + algo, err := uapolicy.Asymmetric(s.cfg.SecurityPolicyURI, s.openingInstance.sc.cfg.LocalKey, remoteKey) + if err != nil { + return nil, err + } + + s.openingInstance.algo = algo + } decryptWith = s.openingInstance case "CLO": @@ -438,7 +558,7 @@ func (s *SecureChannel) getInstancesBySecureChannelID(id uint32) []*channelInsta defer s.instancesMu.Unlock() instances := s.instances[id] - if instances == nil { + if len(instances) == 0 { return nil } @@ -458,6 +578,7 @@ func (s *SecureChannel) Open(ctx context.Context) error { } func (s *SecureChannel) open(ctx context.Context, instance *channelInstance, requestType ua.SecurityTokenRequestType) error { + debug.Printf("sc.open") defer s.rcvLocker.unlock() s.openingMu.Lock() @@ -502,6 +623,9 @@ func (s *SecureChannel) open(ctx context.Context, instance *channelInstance, req } s.openingInstance = newChannelInstance(s) + // s.openingInstance.secureChannelID = s.secureChannelID + // s.openingInstance.sequenceNumber = s.sequenceNumber + // s.openingInstance.securityTokenID = s.securityTokenID if requestType == ua.SecurityTokenRequestTypeRenew { // TODO: lock? sequenceNumber++? @@ -537,7 +661,8 @@ func (s *SecureChannel) open(ctx context.Context, instance *channelInstance, req RequestedLifetime: s.cfg.Lifetime, } - return s.sendRequestWithTimeout(ctx, req, reqID, s.openingInstance, nil, s.cfg.RequestTimeout, func(v interface{}) error { + return s.sendRequestWithTimeout(ctx, req, reqID, s.openingInstance, nil, s.cfg.RequestTimeout, func(v ua.Response) error { + debug.Printf("OpenSecureChannelResponse handler") resp, ok := v.(*ua.OpenSecureChannelResponse) if !ok { return errors.Errorf("got %T, want OpenSecureChannelResponse", v) @@ -547,6 +672,7 @@ func (s *SecureChannel) open(ctx context.Context, instance *channelInstance, req } func (s *SecureChannel) handleOpenSecureChannelResponse(resp *ua.OpenSecureChannelResponse, localNonce []byte, instance *channelInstance) (err error) { + debug.Printf("sc.handleOpenSecureChannelResponse") instance.state = channelActive instance.secureChannelID = resp.SecurityToken.ChannelID instance.securityTokenID = resp.SecurityToken.TokenID @@ -576,12 +702,135 @@ func (s *SecureChannel) handleOpenSecureChannelResponse(resp *ua.OpenSecureChann debug.Printf("uasc %d: received security token. channelID=%d tokenID=%d createdAt=%s lifetime=%s", s.c.ID(), instance.secureChannelID, instance.securityTokenID, instance.createdAt.Format(time.RFC3339), instance.revisedLifetime) - go s.scheduleRenewal(instance) - go s.scheduleExpiration(instance) + // depending on whether the channel is used in a client + // or a server we need to trigger different behavior. + // client channels trigger token renewals and need to cleanup old + // channel crypto configs. server channels only need to do the + // channel cleanup. + switch s.kind { + case client: + go s.scheduleRenewal(instance) + go s.scheduleExpiration(instance) + + case server: + go s.scheduleExpiration(instance) + } return } +func (s *SecureChannel) handleOpenSecureChannelRequest(reqID uint32, svc ua.Request) error { + debug.Printf("handleOpenSecureChannelRequest: Got OPN Request\n") + + var err error + + req, ok := svc.(*ua.OpenSecureChannelRequest) + if !ok { + debug.Printf("Expected OpenSecureChannel Request, got %T\n", svc) + } + + // Part 6.7.4: https://reference.opcfoundation.org/Core/Part6/v105/docs/6.7.4 + // todo(fs): check that ClientProtocolVersion matches HELLO.Version + // todo(fs): respond with Bad_ProtocolVersionUnsupported if they don't match + // todo(fs): also make sure that ServerProtocolVersion in the response is the + // todo(fs): the same as ACK.Version. Return the error if we don't support + // todo(fs): the client protocol version. + // todo(fs): how do we get the HELLO.Version here? + // if hello.Version != req.ClientProtocolVersion || req.ClientProtocolVersion != 0 { + if req.ClientProtocolVersion != 0 { + return ua.StatusBadProtocolVersionUnsupported + } + + // Part 6.7.4: The AuthenticationToken should be nil. ??? + if req.RequestHeader.AuthenticationToken.IntID() != 0 { + return ua.StatusBadSecureChannelTokenUnknown + } + + s.cfg.Lifetime = req.RequestedLifetime + s.cfg.SecurityMode = req.SecurityMode + + // I had to do the encryption setup in the chunk decoding logic because you have to + // decrypt the thing before you even know you have an open message. + // so this is redundant. + var ( + localKey *rsa.PrivateKey + remoteKey *rsa.PublicKey + ) + + // Set the encryption methods to Asymmetric with the appropriate + // public keys. OpenSecureChannel is always encrypted with the + // asymmetric algorithms. + // The default value of the encryption algorithm method is the + // SecurityModeNone so no additional work is required for that case + if s.cfg.SecurityMode != ua.MessageSecurityModeNone { + localKey = s.cfg.LocalKey + // todo(dh): move this into the uapolicy package proper or + // adjust the Asymmetric method to receive a certificate instead + remoteCert, err := x509.ParseCertificate(s.cfg.RemoteCertificate) + if err != nil { + return err + } + var ok bool + if remoteKey, ok = remoteCert.PublicKey.(*rsa.PublicKey); !ok { + return ua.StatusBadCertificateInvalid + } + } + + algo, err := uapolicy.Asymmetric(s.cfg.SecurityPolicyURI, localKey, remoteKey) + if err != nil { + return err + } + + instance := s.openingInstance + instance.algo = algo + instance.sc.requestID = req.RequestHeader.RequestHandle // todo(fs): is this correct? + + nonce := make([]byte, instance.algo.NonceLength()) + if _, err := rand.Read(nonce); err != nil { + return err + } + resp := &ua.OpenSecureChannelResponse{ + ResponseHeader: &ua.ResponseHeader{ + Timestamp: s.timeNow(), + RequestHandle: req.RequestHeader.RequestHandle, + ServiceDiagnostics: &ua.DiagnosticInfo{}, + StringTable: []string{}, + AdditionalHeader: ua.NewExtensionObject(nil), + }, + ServerProtocolVersion: 0, + SecurityToken: &ua.ChannelSecurityToken{ + ChannelID: instance.secureChannelID, + TokenID: instance.securityTokenID, + CreatedAt: s.timeNow(), + RevisedLifetime: req.RequestedLifetime, + }, + ServerNonce: nonce, + } + + ctx := context.Background() // todo(fs): fixme + if err := s.sendResponseWithContext(ctx, instance, reqID, resp); err != nil { + return err + } + + instance.algo, err = uapolicy.Symmetric(s.cfg.SecurityPolicyURI, nonce, req.ClientNonce) + if err != nil { + return err + } + + instance.state = channelActive // todo(fs): is this correct? + // s.setState(secureChannelOpen) + + s.instancesMu.Lock() + s.instances[instance.secureChannelID] = append( + s.instances[instance.secureChannelID], + instance, + ) + s.activeInstance = instance + s.instancesMu.Unlock() + + return nil +} + func (s *SecureChannel) scheduleRenewal(instance *channelInstance) { // https://reference.opcfoundation.org/v104/Core/docs/Part4/5.5.2/#5.5.2.1 // Clients should request a new SecurityToken after 75 % of its lifetime has elapsed. This should ensure that @@ -661,7 +910,7 @@ func (s *SecureChannel) sendRequestWithTimeout( instance *channelInstance, authToken *ua.NodeID, timeout time.Duration, - h func(interface{}) error) error { + h ResponseHandler) error { s.pendingReq.Add(1) respRequired := h != nil @@ -687,21 +936,21 @@ func (s *SecureChannel) sendRequestWithTimeout( case <-s.disconnected: s.popHandler(reqID) return io.EOF - case resp := <-ch: - if resp.Err != nil { - if resp.V != nil { - _ = h(resp.V) // ignore result because resp.Err takes precedence + case msg := <-ch: + if msg.Err != nil { + if msg.Response() != nil { + _ = h(msg.Response()) // ignore result because msg.Err takes precedence } - return resp.Err + return msg.Err } - return h(resp.V) + return h(msg.Response()) case <-timer.C: s.popHandler(reqID) return ua.StatusBadTimeout } } -func (s *SecureChannel) popHandler(reqID uint32) (chan *response, bool) { +func (s *SecureChannel) popHandler(reqID uint32) (chan *MessageBody, bool) { s.handlersMu.Lock() defer s.handlersMu.Unlock() @@ -721,12 +970,12 @@ func (s *SecureChannel) Renew(ctx context.Context) error { return s.renew(instance) } -// SendRequest sends the service request and calls h with the response. -func (s *SecureChannel) SendRequest(ctx context.Context, req ua.Request, authToken *ua.NodeID, h func(interface{}) error) error { +func (s *SecureChannel) SendRequest(ctx context.Context, req ua.Request, authToken *ua.NodeID, h ResponseHandler) error { + // SendRequest sends the service request and calls h with the response. return s.SendRequestWithTimeout(ctx, req, authToken, s.cfg.RequestTimeout, h) } -func (s *SecureChannel) SendRequestWithTimeout(ctx context.Context, req ua.Request, authToken *ua.NodeID, timeout time.Duration, h func(interface{}) error) error { +func (s *SecureChannel) SendRequestWithTimeout(ctx context.Context, req ua.Request, authToken *ua.NodeID, timeout time.Duration, h ResponseHandler) error { s.reqLocker.waitIfLock() active, err := s.getActiveChannelInstance() if err != nil { @@ -744,7 +993,7 @@ func (s *SecureChannel) sendAsyncWithTimeout( authToken *ua.NodeID, respRequired bool, timeout time.Duration, -) (<-chan *response, error) { +) (<-chan *MessageBody, error) { instance.Lock() defer instance.Unlock() @@ -754,11 +1003,11 @@ func (s *SecureChannel) sendAsyncWithTimeout( return nil, err } - var resp chan *response + var resp chan *MessageBody if respRequired { // register the handler if a callback was passed - resp = make(chan *response, 1) + resp = make(chan *MessageBody, 1) s.handlersMu.Lock() @@ -784,6 +1033,7 @@ func (s *SecureChannel) sendAsyncWithTimeout( } if i > 0 { // fix sequence number on subsequent chunks number := instance.nextSequenceNumber() + log.Printf("burning sequence number %d", number) binary.LittleEndian.PutUint32(chunk[16:], uint32(number)) } @@ -807,6 +1057,108 @@ func (s *SecureChannel) sendAsyncWithTimeout( return resp, nil } +func (s *SecureChannel) SendResponseWithContext(ctx context.Context, reqID uint32, resp ua.Response) error { + return s.sendResponseWithContext(ctx, nil, reqID, resp) +} + +func (s *SecureChannel) SendMsgWithContext(ctx context.Context, instance *channelInstance, reqID uint32, resp any) error { + typeID := ua.ServiceTypeID(resp) + if typeID == 0 { + return errors.Errorf("uasc: unknown service %T. Did you call register?", resp) + } + + var err error + if instance == nil { + instance, err = s.getActiveChannelInstance() + if err != nil { + return err + } + } + + // we need to get a lock on the sequence number so we are sure to send them in the correct order. + // encode the message + m := instance.newMessage(resp, typeID, reqID) + b, err := m.Encode() + if err != nil { + return err + } + + // encrypt the message prior to sending it + // if SecurityMode == None, this returns the byte stream untouched + b, err = instance.signAndEncrypt(m, b) + if err != nil { + return err + } + + // send the message + n, err := s.c.Write(b) + if err != nil { + return err + } + + // todo(fs): what if len(b) != n? Can this happen? + if len(b) != n { + return errors.Errorf("uasc: incomplete message %T sent len=%d sent=%d", resp, len(b), n) + } + + atomic.AddUint64(&instance.bytesSent, uint64(n)) + atomic.AddUint32(&instance.messagesSent, 1) + + debug.Printf("uasc %d/%d: send %T with %d bytes", s.c.ID(), reqID, resp, len(b)) + + return nil +} + +func (s *SecureChannel) sendResponseWithContext(ctx context.Context, instance *channelInstance, reqID uint32, resp ua.Response) error { + typeID := ua.ServiceTypeID(resp) + if typeID == 0 { + return errors.Errorf("uasc: unknown service %T. Did you call register?", resp) + } + + var err error + if instance == nil { + instance, err = s.getActiveChannelInstance() + if err != nil { + return err + } + } + instance.Lock() + defer instance.Unlock() + + // encode the message + m := instance.newMessage(resp, typeID, reqID) + b, err := m.Encode() + if err != nil { + log.Printf("Error encoding msg: %v", err) + return err + } + + // encrypt the message prior to sending it + // if SecurityMode == None, this returns the byte stream untouched + b, err = instance.signAndEncrypt(m, b) + if err != nil { + return err + } + + // send the message + n, err := s.c.Write(b) + if err != nil { + return err + } + + // todo(fs): what if len(b) != n? Can this happen? + if len(b) != n { + return errors.Errorf("uasc: incomplete message %T sent len=%d sent=%d", resp, len(b), n) + } + + atomic.AddUint64(&instance.bytesSent, uint64(n)) + atomic.AddUint32(&instance.messagesSent, 1) + + debug.Printf("uasc %d/%d: send %T with %d bytes", s.c.ID(), reqID, resp, len(b)) + + return nil +} + func (s *SecureChannel) nextRequestID() uint32 { s.requestIDMu.Lock() defer s.requestIDMu.Unlock() diff --git a/uasc/secure_channel_instance.go b/uasc/secure_channel_instance.go index bf123eb8..895041a5 100644 --- a/uasc/secure_channel_instance.go +++ b/uasc/secure_channel_instance.go @@ -10,6 +10,7 @@ import ( "sync" "time" + "github.com/gopcua/opcua/debug" "github.com/gopcua/opcua/errors" "github.com/gopcua/opcua/id" "github.com/gopcua/opcua/ua" @@ -85,6 +86,7 @@ func (c *channelInstance) newRequestMessage(req ua.Request, reqID uint32, authTo func (c *channelInstance) newMessage(srv interface{}, typeID uint16, requestID uint32) *Message { sequenceNumber := c.nextSequenceNumber() + debug.Printf("got sequence number %d", sequenceNumber) switch typeID { case id.OpenSecureChannelRequest_Encoding_DefaultBinary, id.OpenSecureChannelResponse_Encoding_DefaultBinary: diff --git a/uasc/secure_channel_test.go b/uasc/secure_channel_test.go index c31f1d99..0065e739 100644 --- a/uasc/secure_channel_test.go +++ b/uasc/secure_channel_test.go @@ -12,10 +12,10 @@ import ( "time" "github.com/gopcua/opcua/id" + uatest "github.com/gopcua/opcua/tests/python" "github.com/gopcua/opcua/ua" "github.com/gopcua/opcua/uacp" "github.com/gopcua/opcua/uapolicy" - "github.com/gopcua/opcua/uatest" "github.com/pascaldekloe/goe/verify" )