From 10acb204389c845e8e08f4e29eeedd9b195cd0ef Mon Sep 17 00:00:00 2001 From: Conal Logan Date: Thu, 12 Jan 2017 15:47:50 +0000 Subject: [PATCH 1/9] Added all mkdocs files --- docs/Overview.md | 407 ++++ docs/Processes.md | 1235 ++++++++++++ docs/_config.yml | 1 - docs/conn.md | 224 +++ docs/gettingstarted.md | 286 +++ docs/graphics/AquaQ-TorQ-symbol.png | Bin 0 -> 125149 bytes docs/graphics/TorQ-logo.png | Bin 0 -> 108699 bytes docs/graphics/async.png | Bin 0 -> 138698 bytes docs/graphics/discovery1.png | Bin 0 -> 30996 bytes docs/graphics/discovery2.png | Bin 0 -> 37928 bytes docs/graphics/discovery3.png | Bin 0 -> 43736 bytes docs/graphics/fullarchitecture.gliffy | 1 + docs/graphics/fullarchitecture.png | Bin 0 -> 108103 bytes docs/graphics/fullarchitecture2.gliffy | 1 + docs/graphics/fullarchitecture2.png | Bin 0 -> 113571 bytes docs/graphics/html5frontend.jpg | Bin 0 -> 157632 bytes docs/graphics/logo.pdf | Bin 0 -> 212032 bytes docs/graphics/logo.png | Bin 0 -> 14209 bytes docs/graphics/reporter.png | Bin 0 -> 19542 bytes docs/graphics/simpletickdiagram.png | Bin 0 -> 16225 bytes docs/graphics/torq-logo.png | Bin 0 -> 18931 bytes docs/handlers.md | 455 +++++ docs/index.md | 12 +- docs/utilities.md | 844 ++++++++ docs/visualisation.md | 193 ++ mkdocs.yml | 24 + site/Overview/index.html | 828 ++++++++ site/Processes/index.html | 1747 +++++++++++++++++ site/assets/fonts/icon.eot | Bin 0 -> 2224 bytes site/assets/fonts/icon.svg | 22 + site/assets/fonts/icon.ttf | Bin 0 -> 2072 bytes site/assets/fonts/icon.woff | Bin 0 -> 2148 bytes site/assets/images/favicon-e565ddfa3b.ico | Bin 0 -> 1150 bytes site/assets/images/favicon.ico | Bin 0 -> 1150 bytes .../javascripts/application-997097ee0c.js | 1 + site/assets/javascripts/application.js | 1 + .../javascripts/modernizr-4ab42b99fd.js | 1 + site/assets/javascripts/modernizr.js | 1 + .../stylesheets/application-a422ff04cc.css | 1 + site/assets/stylesheets/application.css | 1 + .../stylesheets/palettes-05ab2406df.css | 1 + site/assets/stylesheets/palettes.css | 1 + site/conn/index.html | 612 ++++++ site/gettingstarted/index.html | 757 +++++++ site/graphics/AquaQ-TorQ-symbol.png | Bin 0 -> 125149 bytes site/graphics/TorQ-logo.png | Bin 0 -> 108699 bytes site/graphics/async.png | Bin 0 -> 138698 bytes site/graphics/discovery1.png | Bin 0 -> 30996 bytes site/graphics/discovery2.png | Bin 0 -> 37928 bytes site/graphics/discovery3.png | Bin 0 -> 43736 bytes site/graphics/fullarchitecture.gliffy | 1 + site/graphics/fullarchitecture.png | Bin 0 -> 108103 bytes site/graphics/fullarchitecture2.gliffy | 1 + site/graphics/fullarchitecture2.png | Bin 0 -> 113571 bytes site/graphics/html5frontend.jpg | Bin 0 -> 157632 bytes site/graphics/logo.pdf | Bin 0 -> 212032 bytes site/graphics/logo.png | Bin 0 -> 14209 bytes site/graphics/reporter.png | Bin 0 -> 19542 bytes site/graphics/simpletickdiagram.png | Bin 0 -> 16225 bytes site/graphics/torq-logo.png | Bin 0 -> 18931 bytes site/handlers/index.html | 999 ++++++++++ site/index.html | 353 ++++ site/mkdocs/js/lunr.min.js | 7 + site/mkdocs/js/mustache.min.js | 1 + site/mkdocs/js/require.js | 36 + .../js/search-results-template.mustache | 4 + site/mkdocs/js/search.js | 88 + site/mkdocs/js/text.js | 390 ++++ site/mkdocs/search_index.json | 524 +++++ site/sitemap.xml | 68 + site/utilities/index.html | 1423 ++++++++++++++ site/visualisation/index.html | 560 ++++++ 72 files changed, 12110 insertions(+), 2 deletions(-) create mode 100755 docs/Overview.md create mode 100755 docs/Processes.md delete mode 100644 docs/_config.yml create mode 100755 docs/conn.md create mode 100755 docs/gettingstarted.md create mode 100755 docs/graphics/AquaQ-TorQ-symbol.png create mode 100755 docs/graphics/TorQ-logo.png create mode 100755 docs/graphics/async.png create mode 100755 docs/graphics/discovery1.png create mode 100755 docs/graphics/discovery2.png create mode 100755 docs/graphics/discovery3.png create mode 100755 docs/graphics/fullarchitecture.gliffy create mode 100755 docs/graphics/fullarchitecture.png create mode 100755 docs/graphics/fullarchitecture2.gliffy create mode 100755 docs/graphics/fullarchitecture2.png create mode 100755 docs/graphics/html5frontend.jpg create mode 100755 docs/graphics/logo.pdf create mode 100755 docs/graphics/logo.png create mode 100755 docs/graphics/reporter.png create mode 100755 docs/graphics/simpletickdiagram.png create mode 100755 docs/graphics/torq-logo.png create mode 100755 docs/handlers.md mode change 100644 => 100755 docs/index.md create mode 100755 docs/utilities.md create mode 100755 docs/visualisation.md create mode 100755 mkdocs.yml create mode 100644 site/Overview/index.html create mode 100644 site/Processes/index.html create mode 100755 site/assets/fonts/icon.eot create mode 100755 site/assets/fonts/icon.svg create mode 100755 site/assets/fonts/icon.ttf create mode 100755 site/assets/fonts/icon.woff create mode 100644 site/assets/images/favicon-e565ddfa3b.ico create mode 100644 site/assets/images/favicon.ico create mode 100644 site/assets/javascripts/application-997097ee0c.js create mode 100644 site/assets/javascripts/application.js create mode 100644 site/assets/javascripts/modernizr-4ab42b99fd.js create mode 100644 site/assets/javascripts/modernizr.js create mode 100644 site/assets/stylesheets/application-a422ff04cc.css create mode 100644 site/assets/stylesheets/application.css create mode 100644 site/assets/stylesheets/palettes-05ab2406df.css create mode 100644 site/assets/stylesheets/palettes.css create mode 100644 site/conn/index.html create mode 100644 site/gettingstarted/index.html create mode 100755 site/graphics/AquaQ-TorQ-symbol.png create mode 100755 site/graphics/TorQ-logo.png create mode 100755 site/graphics/async.png create mode 100755 site/graphics/discovery1.png create mode 100755 site/graphics/discovery2.png create mode 100755 site/graphics/discovery3.png create mode 100755 site/graphics/fullarchitecture.gliffy create mode 100755 site/graphics/fullarchitecture.png create mode 100755 site/graphics/fullarchitecture2.gliffy create mode 100755 site/graphics/fullarchitecture2.png create mode 100755 site/graphics/html5frontend.jpg create mode 100755 site/graphics/logo.pdf create mode 100755 site/graphics/logo.png create mode 100755 site/graphics/reporter.png create mode 100755 site/graphics/simpletickdiagram.png create mode 100755 site/graphics/torq-logo.png create mode 100644 site/handlers/index.html create mode 100644 site/index.html create mode 100644 site/mkdocs/js/lunr.min.js create mode 100644 site/mkdocs/js/mustache.min.js create mode 100644 site/mkdocs/js/require.js create mode 100644 site/mkdocs/js/search-results-template.mustache create mode 100644 site/mkdocs/js/search.js create mode 100644 site/mkdocs/js/text.js create mode 100644 site/mkdocs/search_index.json create mode 100644 site/sitemap.xml create mode 100644 site/utilities/index.html create mode 100644 site/visualisation/index.html diff --git a/docs/Overview.md b/docs/Overview.md new file mode 100755 index 000000000..4926aedff --- /dev/null +++ b/docs/Overview.md @@ -0,0 +1,407 @@ +Overview +======== + + + +What is kdb+? +------------- + +kdb+ is the market leading timeseries database from Kx Systems. kdb+ +is used predominently in the Financial Services sector to capture, +process and analyse billions of records on a daily basis, with Kx +counting almost all of the top tier investment banks as customers. kdb+ +incorporates a programming language, q, which is known for its +performance and expressive power. Given the unsurpassed data management +and analytical capabilities of kdb+, the applicability of kdb+ +technology extends beyond the financial domain into any sector where +rapid pre-built or adhoc analysis of large datasets is required. Other +sectors which have good use cases for kdb+ include utilities, +pharmaceuticals, telecoms, manufacturing, retail and any sector +utilising telemetry or sensor data. + + + +What is AquaQ TorQ? +------------------- + +AquaQ TorQ is a framework which forms the basis of a production kdb+ +system by implementing some core functionality and utilities on top of +kdb+, allowing developers to concentrate on the application business +logic. We have incorporated as many best practices as possible, with +particular focus on performance, process management, diagnostic +information, maintainability and extensibility. We have kept the code as +readable as possible using descriptive comments, error messages, +function names and variable names. Wherever possible, we have tried to +avoid re-inventing the wheel and instead have used contributed code from +code.kx.com (either directly or modified). All code sections taken from +code.kx.com are referenced in this document. + +AquaQ TorQ can be extended or modified as required. We have chosen some +default behaviour, but it can all be overridden. The features of AquaQ +TorQ are: + +- Process Management: Each process is given a type and name. By + default these are used to determine the code base it loads, the + configuration loaded, log file naming and how it reports itself to + discovery services. Whenever possible we have tried to ensure that + all default behaviour can be overridden at the process type level, + and further at the process name level. + +- Code Management: Processes can optionally load common or process + type/name specific code bases. All code loading is error trapped. + +- Configuration Management: Configuration scripts can be loaded as + standard and with specific process type/name configuration + overriding default values. Configuration scripts are loaded in a + specific order; default, then process type specific, then process + name specific. Values loaded last will override values loaded + previously. + +- Usage Logging: All process usage is logged to a single text log file + and periodically rolled. Logging includes opening/closing of + connections, synchronous and asynchronous queries and functions + executed on the timer. Logged values include the request, the + details of where it came from, the time it was received, the time it + took, memory usage before and after, the size of the result set, the + status and any error message. + +- Incoming and Outgoing Connection Management: Incoming (client) and + outgoing (server) connections are stored and their usage monitored + through query counts and total data size counts. Connections are + stored and retrieved and can be set to automatically be re-opened as + required. The password used for outgoing connections can be + overridden at default, process type and process name level. + +- Access Controls: Basic access controls are provided, and could be + extended. These apply restrictions on the IP addresses of remote + connections, the users who can access the process, and the functions + that each user can execute. A similar hierarchical approach is used + for access control management as for configuration management. + +- Timer Extensions: Mechanism to allow multiple functions to be added + to the timer either on a repeating or one-off basis. Multiple + re-scheduling algorithms supplied for repeating timers. + +- Standard Out/Error Logging: Functions to print formatted messages to + standard out and error. Hooks are provided to extend these as + required, e.g. publication to centralised logging database. Standard + out and error are redirected to appropriately named, timestamped and + aliased log files, which are periodically rolled. + +- Error Handling: Different failure options are supplied in case code + fails to load; either exit upon failure, stop at the point of + failure or trap and continue. + +- Visualisation: Utilities to ease GUI development using websockets + and HTML5. + +- Documentation and Development Tools: Functionality to document the + system is built into AquaQ TorQ, and can be accessed directly from + every q session. Developers can extend the documentation as they add + new functions. Functionality for searching for functions and + variables by name and definition is provided, and for ordering + variables by memory usage. The standard help.q from code.kx is also + included. + +- Utilities: We intend to build out and add utilities as we find them + to be suitably useful and generic. So far we have: + + 1. Caching: allows a result set cache to be declared and result + sets to be stored and retrieved from the cache. Suitable for + functions which may be run multiple times with the same + parameters, with the underlying data not changing in a short + time frame; + + 2. Timezone Handling: derived from code.kx, allows conversion + between timestamps in different timezones; + + 3. Email: an library to send emails; + + 4. Async Messaging: allows easy use of advanced async messaging + methods such as deferred synchronous communication and async + communication using postback functions; + + 5. Heartbeating: each process can be set to publish heartbeats, and + subscribe to and manage heartbeats from other processes in the + environment; + + 6. Data Loading: utility wrapper around .Q.fsn to read a data file + from disk, manipulate it and write it out in chunks; + + 7. Subscriptions: allow processes to dynamically detect and + subscribe to datasources; + + 8. Tickerplant Log File Recovery: recover as many messages as + possible from corrupt log files; + + 9. Database Writing: utility functions for writing to, sorting and + parting on disk databases; + + 10. Compression: allows compression of a database. This can be + performed using a set of parameters for the entire database, but + also gives the flexibilty of compressing user-specified tables + and/or columns of those tables with different parameters if + required, and also offers decompression. + +AquaQ TorQ will wrap easily around kdb+tick and therefore around any +tickerplant, RDB, HDB or real time processing application. We currently +have several customised processes of our own: + +- Discovery Service: Every process has a type, name and set of + available attributes, which are used by other processes to connect + to it. The Discovery Service is a central point that can be used to + find other available processes. Client processes can subscribe to + updates from the discovery service as new processes become + available- the discovery service will notify its subscribers, which + can then use the supplied hook to implement required behavior e.g. + connect to the newly available process; + +- Gateway: A fully synchronous and asynchronous gateway is provided. + + + The gateway will connect to a defined list of process types (can be + homogenous or heterogeneous processes) and will route queries across + them according to the priority of received requests. The routing + algorithms can be easily modified e.g. give priority to user X, or + only route queries to processes which exist in the same data centre + or geographical region to avoid the WAN (this would entail using the + process attributes). The gateway can either return the result to the + client back down the same handle, or it can wrap it in a callback + function to be invoked on the client; + +- Real Time Database (RDB): A customized version of the kdb+tick RDB, + to allow dynamic tickerplant subscriptions, reloading of multiple + HDBs using authenticated connections, and customized end-of-day save + downs. The RDB, WDB and tickerplant log replay share a common code + base to ensure that a save-down modification to a table is applied + across each of these processes. + +- Write Database (WDB): The job of a WDB is to write data to disk + rather than to serve client queries. WDBs usually write data out + periodically throughout the day, and are useful when there is too + much data to fit into memory and/or the end of day save operation + needs to be speeded up. The concept is based on + [w.q](http://code.kx.com/wiki/Cookbook/w.q) + +- Tickerplant Log Replay: A process for replaying tickerplant log + files to create on-disk data sets. Extended features are provided + for only replaying subsets of log files (by message number and/or + table name), replaying in chunks, invoking bespoke final behaviour + etc.; + +- Reporter: The Reporter Process runs defined reports (q queries or + parameterized functions) against specific database or gateways on a + schedule. The results are retrieved and processed. Processing can be + user defined, or can be a standard operation such as writing the + data to disk, or emailing the results to a list of recipients. This + can be useful for running system checks or generating management + reports. + +- Housekeeping: A process to undertake housekeeping tasks + periodically, such as compressing and removing files that are no + longer used. Housekeeping looks up a file of instructions and + performs maintenance tasks on directories accordingly. Features + allow selective file deletion and zipping according to file age, + including a search string parameter and the ability to exclude items + from the search. The process can be scheduled, or run immediately + from the command line and can be extended as required to incorporate + more tasks. + +- File Alerter: A process to periodically scan a set of directories + and execute a function based on the availability of a file. This is + useful where files may arrive to the system during the day and must + be acted upon (e.g. files are uploaded to a shared directory by + users/clients). The functions to execute are defined by the user and + the whole process is driven by a csv file detailing the file to + search for, the function to execute and, optionally, a directory to + move the file to after it has been processed. + +- Monitor: A basic monitoring process which uses the Discovery Service + to locate the other processes within the system, listens for + heartbeats, and subscribes for log messages. This should be extended + as required but provides a basic central point for system health + checks; + +- Kill: A process used to kill other processes, optionally using the + Discovery Service to locate them. + + + +A Large Scale Data Processing Platform +-------------------------------------- + +One of the key drivers behind TorQ development has been to ensure all +the tools necessary to build a large scale data processing platform are +available. [kdb+tick](http://code.kx.com/wsvn/code/kx/kdb+tick) +provides the basic building blocks, and a standard set-up usually looks +something like this: + +![Simple kdb+tick Setup](graphics/simpletickdiagram.png) + +However, in reality it is usually more complicated. A larger scale +architecture serving large numbers of client queries and receiving data +from multiple sources may look like this: + +![Production Data Capture](graphics/fullarchitecture.png) + +A common practice is to use a gateway (section gateway) to +manage client queries across back-end processes. The gateway can load +balance across processes and make failures transparent to the client. If +the clients access the gateway with asynchronous calls, then the gateway +can serve many requests at once and additionally implement client +queuing algorithms. + +Other common production features include: + +- A modified version of the RDB (section sec:rdb) which does + different operations at end-of-day, reloads multiple HDB processes + etc. + +- A Write Database (section \[sec:wdb\]) which receives data from the + tickerplant and periodically writes it to disk. WDBs are used when + there is too much data in a day to fit into memory and/or to speed + up the end-of-day rollover job + +- Processes that load data from other sources either into the HDB + directly or to the RDB potentially via the tickerplant (section + \[sec:dataloader\]). The data may be dropped in specific locations + which have to be monitored (section \[sec:filealerter\]) + +- A Reporting Engine (section \[sec:reporter\]) to run periodic + reports and do something with the result (e.g. generate an xls file + from the database and email it to senior management). Reporting + engines can also be used to run periodic checks of the system + +- A Discovery Service (section \[sec:discovery\]) to allow processes + to locate each other, and to allow processes to dynamically register + availability and push notifications around the system. + +- Basic Monitoring (section \[sec:monitor\]) of process availability + +- Housekeeping (section \[sec:housekeeping\]) to ensure log files are + tidied up, tickerplant log files are compressed/moved in a timely + fashion etc. + + + +Do I Really Have to Read This Whole Document? +----------------------------------------------- + +Hopefully not. The core of AquaQ TorQ is a script called torq.q and we +have tried to make it as descriptive as possible, so perhaps that will +suffice. The first place to look will be in the config files, the main +one being \$KDBCONFIG/settings/default.q. This should contain a lot of +information on what can be modified. In addition: + +- We have added a load of usage information: + + aquaq$ q torq.q -usage + KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems + + General: + This script should form the basis of a production kdb+ environment. + It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags + ... etc ... + + If sourcing from another script there are hooks to modify and extend + the usage information as required. + +- We have some pretty extensive logging: + + aquaq$ q torq.q -p 9999 -debug + KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems + + 2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0 + 2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0 + 2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv + 2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1 + 2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found + ... etc ... + +- We have added functionality to find functions or variables defined + in the session, and also to search function definitions. + + q).api.f`max + name | vartype namespace public descrip .. + --------------------| ------------------------------------------------.. + maxs | function .q 1 "" .. + mmax | function .q 1 "" .. + .clients.MAXIDLE | variable .clients 0 "" .. + .access.MAXSIZE | variable .access 0 "" .. + .cache.maxsize | variable .cache 1 "The maximum size in .. + .cache.maxindividual| variable .cache 1 "The maximum size in .. + max | primitive 1 "" .. + + q)first 0!.api.p`.api + name | `.api.f + vartype | `function + namespace| `.api + public | 1b + descrip | "Find a function/variable/table/view in the current process" + params | "[string:search string]" + return | "table of matching elements" + + q).api.p`.api + name | vartype namespace public descrip .. + ------------| --------------------------------------------------------.. + .api.f | function .api 1 "Find a function/variable/tabl.. + .api.p | function .api 1 "Find a public function/variab.. + .api.u | function .api 1 "Find a non-standard q public .. + .api.s | function .api 1 "Search all function definitio.. + .api.find | function .api 1 "Generic method for finding fu.. + .api.search | function .api 1 "Generic method for searching .. + .api.add | function .api 1 "Add a function to the api des.. + .api.fullapi| function .api 1 "Return the full function api .. + +- We have incorporated help.q. + + q)help` + adverb | adverbs/operators + attributes| data attributes + cmdline | command line parameters + data | data types + define | assign, define, control and debug + dotz | .z locale contents + errors | error messages + save | save/load tables + syscmd | system commands + temporal | temporal - date & time casts + verbs | verbs/functions + +- We have separated and commented all of our config: + + aquaq$ head config/default.q + /- Default configuration - loaded by all processes + + /- Process initialisation + \d .proc + loadcommoncode:1b /- whether to load the common code defined at + /- ${KDBCODE}/common + loadprocesscode:0b /- whether to load the process specific code defined at + /- ${KDBCODE}/{process type} + loadnamecode:0b /- whether to load the name specific code defined at + /- ${KDBCODE}/{name of process} + loadhandlers:1b /- whether to load the message handler code defined at + /- ${KDBCODE}/handlers + logroll:1b /- whether to roll the std out/err logs daily + ... etc ... + + + +Operating System and kdb+ Version +---------------------------------- + +AquaQ TorQ has been built and tested on the linux and OSX operating +systems though as far as we are aware there is nothing that would make +this incompatible with Solaris or Windows. It has also been tested with +kdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+ +versions or operating systems. + + + +License +------- + +This code is released under the MIT license. + + diff --git a/docs/Processes.md b/docs/Processes.md new file mode 100755 index 000000000..c03ba8f43 --- /dev/null +++ b/docs/Processes.md @@ -0,0 +1,1235 @@ + + +Processes +========= + +A set of processes is included. These processes build upon AquaQ TorQ, +providing specific functionality. All the process scripts are contained +in $KDBCODE/processes. All processes should have an entry in +$KDBCONFIG/process.csv. All processes can have any type and name, +except for discovery services which must have a process type of +“discovery”. An example process.csv is: + + aquaq$ cat config/process.csv + host,port,proctype,procname + aquaq,9998,rdb,rdb_europe_1 + aquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1 + aquaq,9996,discovery,discovery1 + aquaq,9995,discovery,discovery2 + aquaq,8000,gateway,gateway1 + aquaq,5010,tickerplant,tickerplant1 + aquaq,5011,rdb,rdb1 + aquaq,5012,hdb,hdb1 + aquaq,5013,hdb,hdb2 + aquaq,9990,tickerlogreplay,tpreplay1 + aquaq,20000,kill,killhdbs + aquaq,20001,monitor,monitor1 + aquaq,20002,housekeeping,hk1 + + + +Discovery Service +----------------- + +### Overview + +Processes use the discovery service to register their own availability, +find other processes (by process type) and subscribe to receive updates +for new process availability (by process type). The discovery service +does not manage connections- it simply returns tables of registered +processes, irrespective of their current availability. It is up to each +individual process to manage its own connections. + +The discovery service uses the process.csv file to make connections to +processes on start up. After start up it is up to each individual +process to attempt connections and register with the discovery service. +This is done automatically, depending on the configuration parameters. +Multiple discovery services can be run in which case each process will +try to register and retrieve process details from each discovery process +it finds in its process.csv file. Discovery services do not replicate +between themselves. A discovery process must have its process type +listed as discovery. + +To run the discovery service, use a start line such as: + + aquaq $ q torq.q -load code/processes/discovery.q -p 9995 + +Modify the configuration as required. + +### Operation + +1. Processes register with the discovery service. + + ![Discovery service + registration](graphics/discovery1.png) + +2. Processes use the discovery service to locate other processes. + + ![Process location](graphics/discovery2.png) + +3. When new services register, any processes which have registered an + interest in that process type are notified. + + ![Notification](graphics/discovery3.png) + +### Available Processes + +The list of available processes can be found in the .servers.SERVERS +table. + + q).servers.SERVERS + procname proctype hpup w hits startp lastp endp attributes + ------------------------------------------------------------------------------------- + discovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() + discovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() + hdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() + killtick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() + tpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() + tickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() + monitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() + rdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) + hdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades) + gateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!() + + + +Gateway +------- + +A synchronous and asynchronous gateway is provided. The gateway can be +used for load balancing and/or to join the results of queries across +heterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should +only be used with asynchronous calls. Synchronous calls cause the +gateway to block so limits the gateway to serving one query at a time +(although if querying across multiple backend servers the backend +queries will be run in parallel). When using asynchronous calls the +client can either block and wait for the result (deferred synchronous) +or post a call back function which the gateway will call back to the +client with. With both asynchronous and synchronous queries the backend +servers to execute queries against are selected using process type. The +gateway API can be seen by querying .api.p“.gw.\*” within a gateway +process. + +![Gateway behaviour](graphics/async.png) + +### Asynchronous Behaviour + +Asynchronous queries allow much greater flexibility. They allow multiple +queries to be serviced at once, prioritisation, and queries to be timed +out. When an asynchronous query is received the following happens: + +- the query is placed in a queue; + +- the list of available servers is retrieved; + +- the queue is prioritised, so those queries with higher priority are + serviced first; + +- queries are sent to back end servers as they become available. Once + the backend server returns its result, it is given another query; + +- when all the partial results from the query are returned the results + are aggregated and returned to the client. They are either returned + directly, or wrapped in a callback and posted back asynchronously to + the client. + +The two main customisable features of the gateway are the selection of +available servers (.gw.availableservers) and the queue prioritisation +(.gw.getnextqueryid). With default configuration, the available servers +are those servers which are not currently servicing a query from the +gateway, and the queue priority is a simple FIFO queue. The available +servers could be extended to handle process attributes, such as the +available datasets or the location of the process, and the queue +prioritisation could be modified to anything required e.g. based on the +query itself, the username, host of the client etc. + +An asynchronous query can be timed out using a timeout defined by the +client. The gateway will periodically check if any client queries have +not completed in the alotted time, and return a timeout error to the +client. If the query is already running on any backend servers then they +cannot be timed out other than by using the standard -T flag. + +### Synchronous Behaviour + +When using synchronous queries the gateway can only handle one query at +a time and cannot timeout queries other than with the standard -T flag. +All synchronous queries will be immediately dispatched to the back end +processes. They will be dispatched using an asyhcnronous call, allowing +them to run in parallel rather than serially. When the results are +received they are aggregated and returned to the client. + +### Process Discovery + +The gateway uses the discovery service to locate processes to query +across. The discovery service will notify the gateway when new processes +become available and the gateway will automatically connect and start +using them. The gateway can also use the static information in +process.csv, but this limits the gateway to a predefined list of +processes rather than allowing new services to come online as demand +requires. + +### Error Handling + +When synchronous calls are used, q errors are returned to clients as +they are encountered. When using asynchronous calls there is no way to +return actual errors and appropriately prefixed strings must be used +instead. It is up to the client to check the type of the received result +and if it is a string then whether it contains the error prefix. The +error prefix can be changed, but the default is “error: ”. Errors will +be returned when: + +- the client requests a query against a server type which the gateway + does not currently have any active instances of (this error is + returned immediately); + +- the query is timed out; + +- a back end server returns an error; + +- a back end server fails; + +- the join function fails. + +If postback functions are used, the error string will be posted back +within the postback function (i.e. it will be packed the same way as a +valid result). + +### Client Calls + +There are four main client calls. The .gw.sync\* methods should only be +invoked synchronously, and the .gw.async\* methods should only be +invoked asynchronously. Each of these are documented more extensively in +the gateway api. Use .api.p“.gw.\*” for more details. + +| Function | Description | +| :--------------------------------------: | :--------------------------------------: | +| .gw.syncexec\[query; servertypes\] | Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed. | +| .gw.syncexecj\[query; servertypes; joinfunction\] | Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. | +| .gw.asyncexec\[query; servertypes\] | Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results. | +| .gw.asyncexecjpt\[query; servertypes; joinfunction; postback; timeout\] | Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded. | + + +For the purposes of demonstration, assume that the queries must be run +across an RDB and HDB process, and the gateway has one RDB and two HDB +processes available to it. + + q).gw.servers + handle| servertype inuse active querycount lastquery usage attributes + ------| -------------------------------------------------------------------- + 7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk + 8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk + 9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk + 12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk + +Both the RDB and HDB processes have a function f and table t defined. f +will run for 2 seconds longer on the HDB processes then it will the RDB. + + q)f + {system"sleep ",string x+$[`hdb=.proc.proctype;2;0]; t} + q)t + a + ---- + 5013 + 5014 + 5015 + 5016 + 5017 + +Run the gateway. The main parameter which should be set is the +.servers.CONNECTIONS parameter, which dictates the process types the +gateway queries across. Also, we need to explicitly allow sync calls. We +can do this from the config or from the command line. + + q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb + +Start a client and connect to the gateway. Start with a sync query. The +HDB query should take 4 seconds and the RDB query should take 2 seconds. +If the queries run in parallel, the total query time should be 4 +seconds. + + q)h:hopen 8000 + q)h(`.gw.syncexec;(`f;2);`hdb`rdb) + a + ---- + 5014 + 5015 + 5016 + 5017 + 5018 + 5012 + 5013 + 5014 + 5015 + 5016 + q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb) + 4009 + +If a query is done for a server type which is not registered, an error +is returned: + + q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) + `not all of the requested server types are available; missing other + +Custom join functions can be specified: + + q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) + a | x + ----| - + 5014| 2 + 5015| 2 + 5016| 2 + 5017| 1 + 5018| 1 + 5012| 1 + 5013| 1 + +Custom joins can fail with appropriate errors: + + q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) + `failed to apply supplied join function to results: b + +Asynchronous queries must be sent in async and blocked: + + q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) + /- This white space is from pressing return + /- the client is blocked and unresponsive + + q)q)q) + q) + q)r + a + ---- + 5014 + 5015 + 5016 + 5017 + 5018 + 5012 + 5013 + 5014 + 5015 + 5016 + q) + +We can send multiple async queries at once. Given the gateway has two +RDBs and two HDBs avaialble to it, it should be possible to service two +of these queries at the same time. + + q)h:hopen each 8000 8000 + q)\t (neg h)@\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\:(::); r:h@\:(::) + 4012 + q)r + +(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016 + +(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003 + +Alternatively async queries can specify a postback so the client does +not have to block and wait for the result. The postback function must +take two parameters- the first is the function that was sent up, the +second is the results. The postback can either be a lambda, or the name +of a function. + + q)h:hopen 8000 + q)handleresults:{-1(string .z.z)," got results"; -3!x; show y} + q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) + q) + q) /- These q prompts are from pressing enter + q) /- The q client is not blocked, unlike the previous example + q) + q)2014.01.07T16:53:42.481 got results + a + ---- + 5014 + 5015 + 5016 + 5017 + 5018 + 5012 + 5013 + 5014 + 5015 + 5016 + + /- Can also use a named function rather than a lambda + q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn) + q) + q) + q)2014.01.07T16:55:12.235 got results + a + ---- + 5014 + 5015 + 5016 + 5017 + 5018 + 5012 + 5013 + 5014 + 5015 + 5016 + +Asynchronous queries can also be timed out. This query will run for 22 +seconds, but should be timed out after 5 seconds. There is a tolerance +of +5 seconds on the timeout value, as that is how often the query list +is checked. This can be reduced as required. + + q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) + + q)q)q)r + "error: query has exceeded specified timeout value" + q)\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) + 6550 + +### Non kdb+ Clients + +All the examples in the previous section are from clients written in q. +However it should be possible to do most of the above from non kdb+ +clients. The officially supported APIs for Java, C\# and C allow the +asynchronous methods above. For example, we can modify the try block in +the main function of the [Java Grid +Viewer](http://code.kx.com/wiki/Cookbook/InterfacingWithJava): + + import java.awt.BorderLayout; + import java.awt.Color; + import java.io.IOException; + import java.lang.reflect.Array; + import java.util.logging.Level; + import java.util.logging.Logger; + import javax.swing.JFrame; + import javax.swing.JScrollPane; + import javax.swing.JTable; + import javax.swing.table.AbstractTableModel; + import kx.c; + + public class Main { + public static class KxTableModel extends AbstractTableModel { + private c.Flip flip; + public void setFlip(c.Flip data) { + this.flip = data; + } + + public int getRowCount() { + return Array.getLength(flip.y[0]); + } + + public int getColumnCount() { + return flip.y.length; + } + + public Object getValueAt(int rowIndex, int columnIndex) { + return c.at(flip.y[columnIndex], rowIndex); + } + + public String getColumnName(int columnIndex) { + return flip.x[columnIndex]; + } + }; + + public static void main(String[] args) { + KxTableModel model = new KxTableModel(); + c c = null; + try { + c = new c("localhost", 8000,"username:password"); + // Create the query to send + String query=".gw.asyncexec[(`f;2);`hdb`rdb]"; + // Send the query + c.ks(query); + // Block on the socket and wait for the result + model.setFlip((c.Flip) c.k()); + } catch (Exception ex) { + Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); + } finally { + if (c != null) {try{c.close();} catch (IOException ex) {} + } + } + JTable table = new JTable(model); + table.setGridColor(Color.BLACK); + String title = "kdb+ Example - "+model.getRowCount()+" Rows"; + JFrame frame = new JFrame(title); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); + frame.setSize(300, 300); + frame.setVisible(true); + } + } + +Some of the unofficially supported APIs may only allow synchronous calls +to be made. + + + +Real Time Database (RDB) +------------------------ + +The Real Time Database is a modified version of r.q found in kdb+tick. +The modifications from the standard r.q include: + +- Tickerplant (data source) and HDB location derived from processes + defined by the discovery service or from config file; + +- Automatic re-connection and resubscription to tickerplant; + +- List of tables to subscribe to supplied as configuration setting; + +- More pre-built flexibility in end-of-day; + +- More verbose end-of-day logging; + +- Reload multiple authenticated HDBs after end-of-day; + +- End-of-day save down manipulation code is shared between RDB, WDB + and tickerplant log replay + +See the top of the file for more information. + + + +Write Database (WDB) +-------------------- + +The Write Database or WDB is based on w.q. This process features a +number of modifications and enhancements over w.q: + +1. Provides the option to write down to a custom partition scheme, + defined by parted columns in sort.csv, which removes the need for + end of day sorting; + +2. Greater configuration options; max rows on a per table basis, list + subscription tables, upd function etc. See the top of the process + file for the options; + +3. Use of common code with the RDB and Tickerplant Log Replay process + to manipulate tables before save, sort and apply attributes; + +4. Checks whether to persist data to disk on a timer rather than on + each tick; + +5. Informs other RDB, HDB and GW processes that end of day save and + sort has completed; + +6. More log information supplied. + +The WDB process can broken down into two main functions: + +1. Periodically saving data to disk and + +2. Sorting data at end of day + +The WDB process provides flexibility so it can be set-up as a +stand-alone process that will both save and sort data or two separate +processes (one that saves the data and another that will sort the data +on disk). This allows greater flexibility around the end of day event as +sorting data can be time consuming. It is also helps when implementing +seemless rollovers (i.e. no outage window at end-of-day). + +The behaviour of the WDB process is controlled by the `.wdb.mode` +parameter. This should be set to one of following three values: + +- saveandsort - the process will subscribe for data, periodically + write data to disk and at EOD it will flush remaining data to disk + before sorting it and informing GWs, RDBs and HDBs etc. + +- save - the process will subscribe for data, periodically write data + to disk and at EOD it will flush remaining data to disk. It will + then inform its respective sort mode process to sort the data + +- sort - the process will wait to get a trigger from its respective + save mode process. When this is triggered it will sort the data on + disk, apply attributes and the trigger a reload on the RDB, HDB and + GW processes + +When running a system with separate save and sort process, the sort +process should be configured in the processes.csv file with a proctype +of sort. The save process will check for processes with a proctype of +sort when it attempts to trigger the end of day sort of the data. + +The wdb process provides two methods for persisting data to disk and +sorting at the end of the day. + +- default - Data is persisted into a partition defined by the + \[partitiontype\] variable, similar to the hdb partition scheme. The + general scheme is of the form + \[wdbdir\]/\[partitiontype\]/\[table\]/. And a typical partition + directory would be similar to wdb/database/2015.11.26/trades/. At + the end of the day, before being moved to the hdb, the data is + sorted according to parameters defined in sort.csv. For each table, + sort.csv will specify the columns to sort (using xasc) and apply + attributes to. + +- partbyattr - Data is persisted to a custom partition scheme, derived + from parameters in the sort.csv file. The write down scheme is taken + from sort.csv, to reflect the effect of using xasc at the end of + day. For each table, the columns defined in sort.csv, with the + parted attribute, are used to create custom partitions in the wdb. + Multiple columns can be defined with the parted attribute and + distinct combinations of each are generated for custom partitions. + The general partition scheme is of the form + \[wdbdir\]/\[partitiontype\]/\[table\]/\[parted column(s)\]/. And a + typical partition directory would be similar to + wdb/database/2015.11.26/trade/MSFT\_N. In the above example, the + data is parted by sym and source, and so a unique partition + directory MSFT\_N is created in the wdb directory. + + At the end of the day, data is upserted into the hdb without the + need for sorting. The number of rows that are joined at once is + limited by the mergenumrows and mergenumtab parameters. + +The optional partbyattr method may provide a significant saving in time +at the end of day, allowing the hdb to be accessed sooner. For large +data sets with a low cardinality (ie. small number of distinct elements) +the optional method may provide a significant time saving, upwards of +50%. The optional method should also reduce the memory usage at the end +of day event, as joining data is generally less memory intensive than +sorting. + + + +Tickerplant Log Replay +---------------------- + +The Tickerplant Log Replay script is for replaying tickerplant logs. +This is useful for: + +1. handling end of day save down failures; + +2. handling large volumes of data (larger than can fit into RAM). + +The process takes as the main input either an individual log file to +replay, or a directory containing a set of log files. Amongst other +functionality, the process can: + +- replay specific message ranges; + +- replay in manageable message chunks; + +- recover as many messages as possible from a log file rather than + just stopping at the first bad message; + +- ignore specific tables; + +- modify the tables before or after they are saved; + +- apply sorting and parting after all the data is written out. + +The process must have some variables set (the tickerplant log file or +directory, the schema file, and the on-disk database directory to write +to) or it will fail on startup. These can either be set in the config +file, or overridden from the command line in the usual way. An example +start line would be: + + q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1 + +The tickerplant log replay script has extended usage information which +can be accessed with -.replay.usage. + + q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage + + + +Housekeeping +------------ + +The housekeeping process is used to undertake periodic system +housekeeping and maintenance, such as compressing or removing files +which are no longer required. The process will run the housekeeping jobs +periodically on a timer. Amongst other functionality the process: + +- Allows for removing and zipping of directory files; + +- Provides an inbuilt search utility and selectively searches using a + ‘find’ and ‘exclude’ string, and an ‘older than’ parameter; + +- Reads all tasks from a single CSV; + +- Runs on a user defined timer; + +- Can be run immediately from command line or within the process; + +- Can be easily extended to include new user defined housekeeping + tasks. + +The process has two main parameters that should be set prior to use; +runtimes and inputcsv.‘Runtimes’ sets the timer to run housekeeping at +the set time(s), and ‘Inputcsv’ provides the location of the +housekeeping csv file. These can either be set in the config file, or +overridden via the command line. If these are not set, then default +parameters are used; 12.00 and ‘KDBCONFIG/housekeeping.csv’ +respectively. The process is designed to run from a single csv file with +five headings: + +- Function details the action that you wish to be carried out on the + files, initially, this can be rm (remove) and zip (zipping); + +- Path specifies the directory that the files are in; + +- Match provides the search string to the find function, files + returned will have names that match this string; + +- Exclude provides a second string to the find function, and these + files are excluded from the match list; + +- Age is the ‘older than’ parameter, and the function will only be + carried out on files older than the age given (in days). + +An example csv file would be: + + function,path,match,exclude,age + zip,./logs/,*.log,*tick*,2 + rm,./logs/,*.log*,*tick*,4 + zip,./logs/,*tick*,,1 + rm,./logs/,*tick*,,3 + + function path match exclude age + ---------------------------------------- + zip "./logs/" "*.log" "*tick*" 2 + rm "./logs/" "*.log*" "*tick*" 4 + zip "./logs/" "*tick*" "" 1 + rm "./logs/" "*tick*" "" 3 + +The process reads in the csv file, and passes it line by line to a +‘find’ function; providing a dictionary of values that can be used to +locate the files required. The find function takes advantage of system +commands to search for the files according to the specifications in the +dictionary. A search is performed for both the match string and the +exclude string, and cross referenced to produce a list of files that +match the parameters given. The files are then each passed to a further +set of system commands to perform the task of either zipping or +removing. Note that an incomplete csv or non-existant path will throw an +error. + +The remove and zipping functions form only basic implimentations of the +housekeeping process; it is designed to be exended to include more +actions than those provided. Any user function defined in the +housekeeping code can be employed in the same fashion by providing the +name of the function,search string and age of files to the csv. + +As well as being scheduled on a timer, the process can also be run +immediately. Adding ‘-hk.runnow 1’ to the command line when starting the +process will force immediate running of the actions in the housekeeping +csv. Likewise, setting runnow to 1b in the config file will immediately +run the cleaning process. Both methods will cause the process to exit +upon completion. Calling hkrun\[\] from within the q process will also +run the csv instructions immediately. This will not affect any timer +scheduling and the process will remain open upon completion. + +Housekeeping works both on windows and unix based systems. Since the +process utilizes inbuilt system commands to perform maintenances, a +unix/windows switch detects the operating system of the host and applies +either unix or widows functions appropriately. Extensions need only be +made in the namespace of the hosting operating system (i.e. if you are +using a unix system, and wish to add a new function, you do not need to +add the function to the windows namespace to). Usage information can be +accessed using the ‘-hkusage’ flag: + + q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage + + + +File Alerter +------------ + +The file alerter process is a long-running process which periodically +scans a set of directories for user-specified files. If a matching file +is found it will then carry out a user-defined function on it. The files +to search for and the functions to run are read in from a csv file. +Additionally, the file alerter process can: + +- run more than one function on the specified file. + +- optionally move the file to a new directory after running the + function. + +- store a table of files that have already been processed. + +- run the function only on new files or run it every time the file is + modified. + +- ignore any matching files already on the system when the process + starts and only run a function if a new file is added or a file is + modified. + +The file alerter process has four parameters which should be set prior +to use. These parameters can either be set in the config file or +overridden on the command-line. If they are not set, the default +parameters will be used. The parameters are as follows. + +**inputcsv** - The name and location of the csv file which defines the +behaviour of the process. The default is KDBCONFIG/filealerter.csv. + +**polltime** - How often the process will scan for matching files. The +default is 0D:00:01, i.e., every minute. + +**alreadyprocessed** - The name and location of the already-processed +table. The default is KDBCONFIG/filealerterprocessed. This table will +be created automatically the first time the process is ran. + +**skipallonstart** - If this is set to 1, it will ignore all files +already on the system; if it is set to 0, it will not. The default +value is 0. + +The files to find and the functions to run are read in from a csv file +created by the user. This file has five columns, which are detailed +below. + +**path** - This is the path to the directory that will be scanned for +the file. + +**match** - This is a search string matching the name of the file to be +found. Wildcards can be used in this search, for example, “file\*” will +find all files starting with “fil”. + +**function** - This is the name of the function to be run on the file. +This function must be defined in the script +KDBCODE/processes/filealerter.q. If the function is not defined or fails +to run, the process will throw an error and ignore that file from then +on. + +**newonly** - This is a boolean value. If it is set to 1, it will +only run the function on the file if it has been newly created. If it is +set to 0, then it will run the function every time the file is +modified. + +**movetodirectory** - This is the path of the directory you would like +to move the file to after it has been processed. If this value is left +blank, the file will not be moved. + +It is possible to run two separate functions on the same file by adding +them as separate lines in the csv file. If the file is to be moved after +it is processed, the file alerter will run both functions on the file +and then attempt to move it. A typical csv file to configure the file +alerter would look like: + + path,match,function,newonly,movetodirectory + /path/to/dirA,fileA.*,copy,0,/path/to/newDir + /path/to/dirB,fileB.txt,email,1, + /path/to/dirA,fileA.*,delete,0,/path/to/newDir + + path match function newonly movetodirectory + --------------------------------------------------- + "/path/to/dirA" "fileA.*" copy 0 "/path/to/newDir" + "/path/to/dirB" "fileB.txt" email 1 "" + "/path/to/dirA" "fileA.*" delete 0 "/path/to/newDir" + +The file alerter process reads in each line of the csv file and searches +files matching the search string specified in that line. Note that there +may be more than one file found if a wildcard is used in the search +string. If it finds any files, it will check that they are not in the +already processed table. If newonly is set to 1, it only checks if +the filename is already in the table. If newonly is set to 0, it +checks against the filename, filesize and a md5 hash of the file. The +md5 hash and the filesize are used to determine if the file has been +modified since it was processed last. If the found files have not been +processed already, it then attempts to run the specified function to +these files. + +After the process has run through each line of the csv, it generates a +table of all files that were processed on that run. These files are +appended to the already processed table which is then saved to disk. The +file alerter will attempt to move the files to the ‘movetodirectory’, if +specified. If the file has already been moved during the process (for +example, if the function to run on it was ‘delete’), the file alerter +will not attempt to move it. + +The file alerter is designed to be extended by the user. Customised +functions should be defined within the filealerter.q script. They should +be diadic functions, i.e., they take two parameters: the path and the +filename. As an example, a simple function to make a copy of a file in +another directory could be: + + copy:{[path;file] system "cp ", path,"/", file, " /path/to/newDir"} + +Although the process is designed to run at regular intervals throughout +the day, it can be called manually by invoking the FArun\[\] command +from within the q session. Similarly, if new lines are added to the csv +file, then it can be re-loaded by calling the loadcsv\[\] command +from the q session. + +Each stage of the process, along with any errors which may occur, are +appropriately logged in the usual manner. + +The file alerter process is designed to work on both Windows and Unix +based systems. Since many of the functions defined will use inbuilt +system command they will be need to written to suit the operating system +in use. It should also be noted that Windows does not have an inbuilt +md5 hashing function so the file alerter will only detect different +versions of files if the filename or filesize changes. + + + +Reporter +-------- + +### Overview + +The reporter process is used to run periodic reports on specific +processes. A report is the result of a query that is run on a process at +a specific time. The result of the query is then handled by one of the +inbuilt result handlers, with the ability to add custom result handlers. + +![Reporter process](graphics/reporter.png) + +Features: + +- Easily create a report for information that you want; + +- Fully customizable scheduling such as start time, end time and days + of the week; + +- Run reports repeatedly with a custom period between them; + +- Asynchronous querying with custom timeout intervals; + +- Inbuilt result handlers allow reports to be written to file or + published; + +- Custom result handlers can be defined; + +- Logs each step of the report process; + +- Fully integrated with the TorQ gateway to allow reports to be run + across backend processes. + +The reporter process has three parameters that are read in on +initialisation from the reporter.q file found in the +$KDBCONFIG/settings directory. These settings are the string filepath +of the input csv file, a boolean to output log messages and timestamp +for flushing the query log table. + +To run the reporter process: + + q torq.q -load code/processes/reporter.q -p 20004 + +Once the reporter process has been initiated, the reports will be +scheduled and no further input is required from the user. + +### Report Configuration + +By default, the process takes its inputs from a file called reporter.csv +which is found in the $KDBCONFIG directory. This allows the user +complete control over the configuration of the reports. As the queries +are evaluated on the target process, local variables can be referenced +or foreign functions can be run. Table \[table:reportertable\] shows the +meaning of the csv schema. + +| Column Header | Description and Example | +| :-------------: | :--------------------------------------: | +| name | Report name e.g. Usage | +| query | Query to be evaluated on that process. It can be a string query or function | +| resulthandler | Result handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[“./output”;“usage”] | +| gateway | If non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. \`gateway | +| joinfunction | Used to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze | +| proctype | The type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. \`rdb | +| procname | The name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. \`hdb1 | +| start | Time on that day to start at e.g. 12:00 | +| end | Time on that day that the report will stop at e.g. 23:00 | +| period | The period between each report query e.g. 00:00:10 | +| timeoutinterval | The amount of time the reporter waits before timing out a report e.g. 00:00:30 | +| daysofweek | Numeric value required for the day of the week. Where 0 is Saturday and 2 is Monday | + + + + +When running a report on a gateway, the gateway field must be set to the +proctype of the gateway that will be queried. It will then run the +report on the processes which are listed in the proctype field and join +the results by using the function specified in the joinfunction field. +If there is no join function then the reporter process will not start. +Multiple entries in the proctype field must be separated by a space and +are only allowed when the gateway field is not empty. If gateway field +is empty and there are multiple entries in the proctype field then the +reporter process will not load. + +Listing \[code:csvschema\] shows an example of the schema needed in the +input csv file. + + name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek + usage|10#.usage.usage|writetofiletype["./output/";"usage";"csv"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6 + memory|.Q.w[]|writetofile["./output/";"memory.csv"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6 + usage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6 + +### Result Handlers + +There are several default result handlers which are listed below. Custom +result handlers can be defined as required. The result handler will be +invoked with a single parameter (the result of the query). + +**writetofiletype** - Accepts 3 parameters: path, filename, filetype and +data. When writing to file it uses a date time suffix so the resultant +filename will be `usage_rdb_2014_01_02_15_00_12.txt` e.g. + + writetofiletype["./output/";"usage";"csv"] + +**splaytable** - This accepts 3 parameters: path, file and data. This +splays the result to a directory. The result must be a table in order to +use this function e.g. + + splaytable["./output/";"usage"] + +**emailalert** - This accepts 3 parameters: period, recipient list and +data. The period dictates the throttle i.e. emails will be sent at most +every period. The result of the report must be a table with a single +column called messages which contains the character list of the email +message. This is used with the monitoring checks to raise alerts, but +can be used with other functions. + + emailalert[0D00:30;("test@aquaq.co.uk";"test1@aquaq.co.uk")] + +**emailreport** - This accepts 3 parameters: temporary path, recipient +list, file name, file type and data. The data is written out as the file +type (e.g. csv, xml, txt, xls, json) with the given file name to the +temporary path. It is then emailed to the recipient list, and the +temporary file removed. + + emailreport["./tempdir/"; ("test@aquaq.co.uk";"test1@aquaq.co.uk"); "EndOfDayReport"; "csv"] + +**publishresult** - Accepts 1 parameter and that is the data. This is +discussed later in the subsection subresults. +Custom result handlers can be added to $KDBCODE/processes/reporter.q . +It is important to note that the result handler is referencing local +functions as it is executed in the reporter process and not the target +process. When the query has been successful the result handler will be +passed a dictionary with the following keys: queryid, time, name, +procname, proctype and result. + +### Report Process Tracking + +Each step of the query is logged by the reporter process. Each query is +given a unique id and regular system messages are given the id 0. The +stage column specifies what stage the query is in and these are shown in +table \[table:stagetable\]. An appropriate log message is also shown so +any problems can easily be diagnosed. The in memory table is flushed +every interval depending on the value of the flushqueryloginterval +variable in the reporter.q file found in the $KDBCONFIG/settings +directory. + +| Stage symbol | Explanation | +| ------------ | ---------------------------------------- | +| R | The query is currently running | +| E | An error has occurred during the query | +| C | The query has been completed with no errors | +| T | The query has exceeded the timeout interval | +| S | System message e.g. “Reporter Process Initialised” | + + + time | queryid stage message + -----------------------------| ------------------------------------------------------------------------ + 2014.10.20D22:20:06.597035000| 37 R "Received result" + 2014.10.20D22:20:06.600692000| 37 R "Running resulthandler" + 2014.10.20D22:20:06.604455000| 37 C "Finished report" + 2014.10.20D22:30:00.984572000| 38 R "Running report: rdbtablecount against proctype: rdb on handle: 7i" + 2014.10.20D22:30:00.991862000| 38 R "Received result" + 2014.10.20D22:30:00.995527000| 38 R "Running resulthandler" + 2014.10.20D22:30:00.999236000| 38 C "Finished report" + 2014.10.20D22:30:06.784419000| 39 R "Running report: rdbtablecount against proctype: rdb on handle: 7i" + 2014.10.20D22:30:06.796431000| 39 R "Received result" + +### Subscribing for Results + +To publish the results of the report, the reporter process uses the pub +sub functionality of TorQ. This is done by using the using the inbuilt +result handler called publishresult. In order to subscribe to this feed, +connect to the reporter process and send the function shown below over +the handle. To subscribe to all reports use a backtick as the second +parameter and to subscribe to a specific reports results include the +reporter name as a symbol. + + /- define a upd function + upd:insert + + /- handle to reporter process + h: hopen 20004 + + /- Subscribe to all results that use the publishresult handler + h(`.ps.subscribe;`reporterprocessresults;`) + + /- Subscribe to a specific report called testreport + h(`.ps.subscribe;`reporterprocessresults;`testreport) + +### Example reports + +The following are examples of reports that could be used in the reporter +process. The rdbtablecount report will run hourly and return the count +of all the tables in a rdb process. The memoryusage report will run +every 10 minutes against the gateway for multiple processes and will +return the `.Q.w[]` information. Both of these reports run between +9:30am to 4:00pm during the weekdays. The report onetimequery is an +example of a query that is run one time, in order to run a query once, +the period must be the same as the difference between the start and end +time. + + name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek + rdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6 + memoryusage|.Q.w[]|writetofile["./output/";"memory.csv"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6 + onetimequery|10#.usage.usage|writetofile["./output/";"onetime.csv"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6 + + + +Monitor +------- + +The Monitor process is a simple process to monitor the health of the +other processes in the system. It connects to each process that it finds +(by default using the discovery service, though can use the static file +as well) and subscribes to both heartbeats and log messages. It +maintains a keyed table of heartbeats, and a table of all log messages +received. + +Run it with: + + aquaq $ q torq.q -load code/processes/monitor.q -p 20001 + +It is probably advisable to run the monitor process with the -trap flag, +as there may be some start up errors if the processes it is connecting +to do not have the necessary heartbeating or publish/subscribe code +loaded. + + aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap + +The current heartbeat statuses are tracked in .hb.hb, and the log +messages in logmsg + + q)show .hb.hb + sym procname | time counter warning error + ----------------------| --------------------------------------------------- + discovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 + hdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 + rdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 + rdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0 + + q)show select from logmsg where loglevel=`ERR + time sym host loglevel id message + ------------------------------------------------------------------------------------- + 2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload "failed to reload database" + 2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave "failed to save tables : trade, quote" + +### HTML5 front end + +A HTML5 front end has been built to display important process +information that is sent from the monitor process. It uses HTML5, +WebSockets and JavaScript on the front end and interacts with the +monitor process in the kdb+ side. The features of the front end include: + +- Heartbeat table with processes that have warnings highlighted in + orange and errors in red + +- Log message table displaying the last 30 errors + +- Log message error chart that is by default displayed in 5 minute + bins + +- Chart’s bin value can be changed on the fly + +- Responsive design so works on all main devices i.e. phones, tablets + and desktop + +It is accessible by going to the url `http://HOST:PORT/.non?monitorui` + + + +Compression +----------- + +The compression process is a thin wrapper around the compression utility +library. It allows periodic compression of whole or parts of databases +(e.g. data is written out uncompressed and then compressed after a +certain period of time). It uses four variables defined in +KDBCONFIG/settings/compression.q which specify + +- the compression configuration file to use + +- the database directory to compress + +- the maximum age of data to attempt to compress + +- whether the process should exit upon completion + +The process is run like other TorQ processes: + + q torq.q -load code/processes/compression.q -p 20005 + +Modify the settings file or override variables from the command line as +appropriate. + + + +Kill +---- + +The kill process is used to connect to and terminate currently running +processes. It kills the process by sending the exit command therefore +the kill process must have appropriate permissions to send the command, +and it must be able to create a connection (i.e. it will not be able to +kill a blocked process in the same way that the unix command kill -9 +would). By default, the kill process will connect to the discovery +service(s), and kill the processes of the specified types. The kill +process can be modified to not use the discovery service and instead use +the process.csv file via the configuration in the standard way. + +If run without any command line parameters, kill.q will try to kill each +process it finds with type defined by its .servers.CONNECTIONS variable. + + q torq.q -load code/processes/kill.q -p 20000 + +.servers.CONNECTIONS can optionally be overridden from the command line +(as can any other process variable): + + q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant + +The kill process can also be used to kill only specific named processes +within the process types: + + q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2 + + + +Chained Tickerplant +------------------- + +In tick+ architecture the main tickerplant is the most important +component, as it is relied upon by all the real time subscribers. When +the tickerplant goes down data will be lost, compare this to an rdb +which can be recovered after it fails. The chained tickerplant process +is an additional tickerplant that is a real time subscriber to the main +tickerplant but replicates its behaviour. It will have its own real time +subscribers and can be recovered when it fails. This is the recommended +approach when users want to perform their own custom real time analysis. + +The chained tickerplant can: + +- subscribe to specific tables and syms + +- batch publish at an interval or publish tick by tick + +- create a tickerplant log that its real time subscribers can replay + +- replay the source tickerplant log + +To launch the chained tickerplant + + q torq.q -load code/processes/chainedtp.q -p 12009 + +Chained tickerplant settings are found in `config/settings/chainedtp.q` +and are under the `.ctp` namespace. + + |Setting| Explanation | Default| + |------------------------ |------------------------------------------------------------------------------------------------------ |-----------------| + |tickerplantname | list of tickerplant names to try and make a connection to | `tickerplant1| + | pubinterval | publish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick | `0D00:00:00`| + |tpconnsleep | number of seconds between attempts to connect to the source tickerplant | `10`| + |createlogfile | create a log file | `0b`| + |logdir | directory containing chained tickerplant logs | `:hdb| + |subscribeto | subscribe to these tables only (null for all) | `| + | subscribesyms | subscribe to these syms only (null for all) | `| + |replay | replay the tickerplant log file | `0b`| + | schema | retrieve schema from tickerplant | `1b`| + | clearlogonsubscription | clear log on subscription, only called if createlogfile is also enabled | `0b`| + + + + + +Integration with kdb+tick +========================= + +AquaQ TorQ can be fully integrated with kdb+tick. For further details, +use one of the AquaQ TorQ Starter packs to set up a production kdb+ data +capture system. diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index c4192631f..000000000 --- a/docs/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-cayman \ No newline at end of file diff --git a/docs/conn.md b/docs/conn.md new file mode 100755 index 000000000..be761ac66 --- /dev/null +++ b/docs/conn.md @@ -0,0 +1,224 @@ + +Connection Management +===================== + +trackservers.q is used to register and maintain handles to external +servers. It is a heavily modified version of trackservers.q from +code.kx. All the options are described in the default config file. All +connections are tracked in the .servers.SERVERS table. When the handle +is used the count and last query time are updated. + + q).servers.SERVERS + procname proctype hpup w hits startp lastp endp attributes + --------------------------------------------------------------------------------- + discovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() + discovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() + rdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk + rdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk + rdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() + hdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() + hdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk + hdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk + + q)last .servers.SERVERS + procname | `hdb2 + proctype | `hdb + hpup | `:aquaq:5013 + w | 8i + hits | 0i + startp | 2014.01.08D11:51:01.928045000 + lastp | 2014.01.08D11:51:01.925078000 + endp | 0Np + attributes| `datacentre`country!`essex`uk + + +Connections +----------- + +Processes locate other processes based on their process type. The +location is done either statically using the process.csv file or +dynamically using a discovery service. It is recommended to use the +discovery service as it allows the process to be notified as new +processes become available. + +The main configuration variable is .servers.CONNECTIONS, which dictates +which process type(s) to create connections to. .servers.startup\[\] +must be called to initialise the connections. When connections are +closed, the connection table is automatically updated. The process can +be set to periodically retry connections. + + +Process Attributes +------------------ + +Each process can report a set of attributes. When process A connects to +process B, process A will try to retrieve the attributes of process B. +The attributes are defined by the result of the .proc.getattributes +function, which is by default an empty dictionary. Attributes are used +to retrieve more detail about the capabilities of each process, rather +than relying on the broad brush process type and process name +categorization. Attributes can be used for intelligent query routing. +Potential fields for attributes include: + +- range of data contained in the process; + +- available tables; + +- instrument universe; + +- physical location; + +- any other fields of relevance. + + +Connection Passwords +-------------------- + +The password used by a process to connect to external processes is +retrieved using the .servers.loadpassword function call. By default, +this will read the password from a txt file contained in +$KDBCONFIG/passwords. A default password can be used, which is +overridden by one for the process type, which is itself overridden by +one for the process name. For greater security, the +.servers.loadpassword function should be modified. + + +Retrieving and Using Handles +---------------------------- + +A function .servers.getservers is supplied to return a table of handle +information. .servers.getservers takes five parameters: + +- type-or-name: whether the lookup is to be done by type or name (can + be either proctype or procname); + +- types-or-names: the types or names to retrieve e.g. hdb; + +- required-attributes: the dictionary of attributes to match on; + +- open-dead-connections: whether to re-open dead connections; + +- only-one: whether we only require one handle. So for example if 3 + services of the supplied type are registered, and we have an open + handle to 1 of them, the open handle will be returned and the others + left closed irrespective of the open-dead-connections parameter. + +.servers.getservers will compare the required parameters with the +available parameters for each handle. The resulting table will have an +extra column called attribmatch which can be used to determine how good +a match the service is with the required attributes. attribmatch is a +dictionary of (required attribute key) ! (Boolean full match; +intersection of attributes). + + q).servers.SERVERS + procname proctype hpup w hits startp lastp endp attributes + --------------------------------------------------------------------------------- + discovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() + discovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() + rdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() + rdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() + rdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk + hdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk + hdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk + + /- pull back hdbs. Leave the attributes empty + q).servers.getservers[`proctype;`hdb;()!();1b;f0b] + procname proctype lastp w hpup attributes attribmatch + ------------------------------------------------------------------------------- + hdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() + hdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!() + + /- supply some attributes + q).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] + procname proctype lastp w hpup attributes attribmatch + ------------------------------------------------------------------------------- + hdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk) + hdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk) + q).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] + procname proctype lastp w hpup attributes attribmatch + ------------------------------------------------------------------------------- + hdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$())) + hdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$())) + +.servers.getservers will try to automatically re-open connections if +required. + + q).servers.getservers[`proctype;`rdb;()!();1b;0b] + 2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998 + 2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused + 2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997 + 2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused + procname proctype lastp w hpup attributes attribmatch + ------------------------------------------------------------------------------- + rdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!() + + /- If we only require one connection, and we have one open,then it doesn't retry connections + q).servers.getservers[`proctype;`rdb;()!();1b;1b] + procname proctype lastp w hpup attributes attribmatch + ------------------------------------------------------------------------------- + rdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!() + +There are two other functions supplied for retrieving server details, +both of which are based on .servers.getservers. .servers.gethandlebytype +returns a single handle value, .servers.gethpupbytype returns a single +host:port value. Both will re-open connections if there are not any +valid connections. Both take two parameters: + +- types: the type to retrieve e.g. hdb; + +- selection-algorithm: can be one of any, last or roundrobin. + + +Connecting To Non-TorQ Processes +-------------------------------- + +Connections to non-torq (external) processes can also be established. +This is useful if you wish to integrate TorQ with an existing +infrastructure. Any process can connect to external processes, or it can +be managed by the discovery service only. Every external process should +have a type and name in the same way as TorQ processes, to enable them +to be located and used as required. + +Non-TorQ processes need to be listed by default in +$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format +as the standard process.csv file. The location of the non-TorQ process +file can be adjusted using the .servers.NONTORQPROCESSFILE variable. To +enable connections, set .servers.TRACKNONTORQPROCESS to 1b. + +Example of nontorqprocess.csv file: + + host,port,proctype,procname + aquaq,5533,hdb,extproc01 + aquaq,5577,hdb,extproc02 + + +Manually Adding And Using Connections +------------------------------------- + +Connections can also be manually added and used. See .api.p“.servers.\*” +for details. + + +IPC types +--------- + +In version kdb+ v3.4, two new IPC connection types were added. These new +types are unix domain sockets and SSL/TLS (tcps). The incoming +connections to a proctype can be set by updating .servers.SOCKETTYPE. + +In the settings example below, everything that connects to the +tickerplant will use unix domain sockets. + + \d .servers + SOCKETTYPE:enlist[`tickerplant]!enlist `unix + +Attempting to open a unix domain socket connection to a process which +has an older kdb+ version will fail. We allow for processes to fallback +to tcp if this happens by setting .servers.SOCKETFALLBACK to true. It +will not fallback if the connection error message returned is one of the +following : timeout, access. It will also not fallback for SSL/TLS +(tcps) due to security concerns. + +At the time of writing, using unix domain sockets syntax on windows will +appear to work whilst it’s actually falling back to tcp in the +background. This can be misleading so we disabled using them on windows. diff --git a/docs/gettingstarted.md b/docs/gettingstarted.md new file mode 100755 index 000000000..5b4e7ae2a --- /dev/null +++ b/docs/gettingstarted.md @@ -0,0 +1,286 @@ + +Getting Started +=============== + +kdb+ is very customisable. Customisations are contained in q scripts (.q +files), which define functions and variables which modify the behaviour +of a process. Every q process can load a single q script, or a directory +containing q scripts and/or q data files. Hooks are provided to enable +the programmer to apply a custom function to each entry point of the +process (.z.p\*), to be invoked on the timer (.z.ts) or when a variable +in the top level namespace is amended (.z.vs). By default none of these +hooks are implemented. + +We provide a codebase and a single main script, torq.q. torq.q is +essentially a wrapper for bespoke functionality which can load other +scripts/directories, or can be sourced from other scripts. Whenever +possible, torq.q should be invoked directly and used to load other +scripts as required. torq.q will: + +- ensure the environment is set up correctly; + +- define some common utility functions (such as logging); + +- execute process management tasks, such as discovering the name and + type of the process, and re-directing output to log files; + +- load configuration; + +- load the shared code based; + +- set up the message handlers; + +- load any required bespoke scripts. + +The behavior of torq.q is modified by both command line parameters and +configuration. We have tried to keep as much as possible in +configuration files, but if the parameter either has a global effect on +the process or if it is required to be known before the configuration is +read, then it is a command line parameter. + + + +Using torq.q +------------ + +torq.q can be invoked directly from the command line and be set to +source a specified file or directory. torq.q requires the 5 environment +variables to be set (see section envvar). If using a unix +environment, this can be done with the setenv.sh script. To start a +process in the foreground without having to modify any other files (e.g. +process.csv) you need to specify the type and name of the process as +parameters. An example is below. + + $ . setenv.sh + $ q torq.q -debug -proctype testproc -procname test1 + +To load a file, do: + + $ q torq.q -load myfile.q -debug -proctype testproc -procname test1 + +It can also be sourced from another script. If this is the case, some of +the variables can be overridden, and the usage information can be +modified or extended. Any variable that has a definition like below can +be overridden from the loading script. + + myvar:@[value;`myvar;1 2 3] + +The available command line parameters are: + + |Cmd Line Param| Description| + |-------------------------| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + |-procname x -proctype y |The process name and process type| + |-procfile x |The name of the file to get the process information from| + |-load x \[y..z\] |The files or database directory to load| + |-loaddir x \[y..z\] |Load all .q, .k files in specified directories| + |-localtime |Sets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P| + |-trap |Any errors encountered during initialization when loading external files will be caught and logged, processing will continue| + |-stop |Stop loading the file if an error is encountered but do not exit| + |-noredirect |Do not redirect std out/std err to a file (useful for debugging)| + |-noredirectalias |Do not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)| + |-noconfig |Do not load configuration| + |-nopi |Reset the definition of .z.pi to the initial value (useful for debugging)| + |-debug |Equivalent to \[-nopi -noredirect\]| + |-usage |Print usage info and exit| + + + +In addition any process variable in a namespace (.\*.\*) can be +overridden from the command line. Any value supplied on the command line +will take priority over any other predefined value (.e.g. in a +configuration or wrapper). Variable names should be supplied with full +qualification e.g. -.servers.HOPENTIMEOUT 5000. + + + +Environment Variables +--------------------- + +Five environment variables are required: + + |Environment Variable| Description| + |----------------------| -----------------------------------------------------| + |KDBCONFIG |The base configuration directory| + |KDBCODE |The base code directory| + |KDBLOGS |Where standard out/error and usage logs are written| + |KDBHTML |Contains HTML files| + |KDBLIB |Contains supporting library files| + + +torq.q will check for these and exit if they are not set. If torq.q is +being sourced from another script, the required environment variables +can be extended by setting .proc.envvars before loading torq.q. + + + +Process Identification +---------------------- + +At the crux of AquaQ TorQ is how processes identify themselves. This is +defined by two variables - .proc.proctype and .proc.procname which are +the type and name of the process respectively. These two values +determine the code base and configuration loaded, and how they are +connected to by other processes. If both of these are not defined, the +TorQ will attempt to use the port number a process was started on to +determine the code base and configuration loaded. + +The most important of these is the proctype. It is up to the user to +define at what level to specify a process type. For example, in a +production environment it would be valid to specify processes of type +“hdb” (historic database) and “rdb” (real time database). It would also +be valid to segregate a little more granularly based on approximate +functionality, for example “hdbEMEA” and “hdbAmericas”. The actual +functionality of a process can be defined more specifically, but this +will be discussed later. The procname value is used solely for +identification purposes. A process can determine its type and name in a +number of ways: + +1. From the process file in the default location of + $KDBCONFIG/process.csv; + +2. From the process file defined using the command line parameter + -procfile; + +3. From the port number it is started on, by referring to the process + file for further process details; + +4. Using the command line parameters -proctype and -procname; + +5. By defining .proc.proctype and .proc.procname in a script which + loads torq.q. + +For options 4 and 5, both parameters must be defined using that method +or neither will be used (the values will be read from the process file). + +For option 3, TorQ will check the process file for any entries where the +port matches the port number it has been started on, and deduce it’s +proctype and procname based on this port number and the corresponding +hostname entry. + +The process file has format as below. + + aquaq$ cat config/process.csv + host,port,proctype,procname + aquaq,9997,rdb,rdb_europe_1 + aquaq,9998,hdb,hdb_europe_1 + aquaq,9999,hdb,hdb_europa_2 + +The process will read the file and try to identify itself based on the +host and port it is started on. The host can either be the value +returned by .z.h, or the ip address of the server. If the process can +not automatically identify itself it will exit, unless proctype and +procname were both passed in as command line parameters. If both of +these parameters are passed in then default configuration settings will +be used. + + + +Logging +------- + +By default, each process will redirect output to a standard out log and +a standard error log, and create aliases for them. These will be rolled +at midnight on a daily basis. They are all written to the $KDBLOGS +directory. The log files created are: + + |Log File| Description| + |---------------------------------| ----------------------------| + |out\_\[procname\]\_\[date\].log |Timestamped out log| + |err\_\[procname\]\_\[date\].log |Timestamped error log| + |out\_\[procname\].log |Alias to current log log| + |err\_\[procname\].log |Alias to current error log| + + +The date suffix can be overridden by modifying the .proc.logtimestamp +function and sourcing torq.q from another script. This could, for +example, change the suffixing to a full timestamp. + + + +Configuration Loading +--------------------- + +### Default Configuration Loading + +Default process configuration is contained in q scripts, and stored in +the $KDBCONFIG /settings directory. Each process tries to load all the +configuration it can find and will attempt to load three configuration +files in the below order:- + +- default.q: default configuration loaded by all processes. In a + standard installation this should contain the superset of + customisable configuration, including comments; + +- [\[proctype\]]{}.q: configuration for a specific process type; + +- [\[procname\]]{}.q: configuration for a specific named process. + +The only one which should always be present is default.q. Each of the +other scripts can contain a subset of the configuration variables, which +will override anything loaded previously. + +### Application Configuration Loading + +Application specific configuration can be stored in a user defined +directory and made visible to TorQ by setting the $KDBAPPCONFIG +environment variable. If $KDBAPPCONFIG is set, then TorQ will search +the $KDBAPPCONFIG/settings directory and load all configuration it can +find. Application configuration will be loaded after all default +configuration in the following order:- + +- default.q: Application default configuration loaded by all + processes. + +- [\[proctype\]]{}.q: Application specific configuration for a + specific process type. + +- [\[procname\]]{}.q: Appliction specific configuration for a specific + named process. + +All loaded configuration will override anything loaded previously. None +of the above scripts are required to be present and can contain a subset +of the default configuration variables from the default configuration +directory. + +All configuration is loaded before code. + + + +Code Loading +------------ + +Code is loaded from the $KDBCODE directory. There is also a common +codebase, a codebase for each process type, and a code base for each +process name, contained in the following directories and loaded in this +order: + +- $KDBCODE/common: shared codebase loaded by all processes; + +- $KDBCODE/\[proctype\]: code for a specific process type; + +- $KDBCODE/\[procname\]: code for a specific process name; + +For any directory loaded, the load order can be specified by adding +order.txt to the directory. order.txt dictates the order that files in +the directory are loaded. If a file is not in order.txt, it will still +be loaded but after all the files listed in order.txt have been loaded. + +Additional directories can be loaded using the -loaddir command line +parameter. + + + +Initialization Errors +--------------------- + +Initialization errors can be handled in different ways. The default +action is any initialization error causes the process to exit. This is +to enable fail-fast type conditions, where it is better for a process to +fail entirely and immediately than to start up in an indeterminate +state. This can be overridden with the -trap or -stop command line +parameters. With -trap, the process will catch the error, log it, and +continue. This is useful if, for example, the error is encountered +loading a file of stored procedures which may not be invoked and can be +reloaded later. With -stop the process will halt at the point of the +error but will not exit. Both -stop and -trap are useful for debugging. + diff --git a/docs/graphics/AquaQ-TorQ-symbol.png b/docs/graphics/AquaQ-TorQ-symbol.png new file mode 100755 index 0000000000000000000000000000000000000000..312cfc403e2c0400dba7121adf42889e0700b83f GIT binary patch literal 125149 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
= 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
XO141LOhA7`%DN&ZVMlW++ptwu zi5RDJOQ^a2#DFOLo6-8+N19P93G#?fzk@SILOGZtdDdRWh{tEKRelnZC;oNRgIgFL z26=m^2g(Dz_eNJEuujwvH%XH^U2`bsH3`c6o8H7K2Sq;31b72j?|^_C$?}~cj6FyI zf7Dbj3oP7lxT#Al5Xid*1H)1u6ZglJ5bVrNdul6i3mv6%RLcb+E_{F5;=W%cfKz2a zy@o`hXPn;Kd7aym^Pm#Whum#$Yy=!z<4PX~3Nkq(ycW&2Z>rrPOn#xkV7oUan_3Oj zn~~>E`0y&U5dIc0!Vd`Jl>$PxY=H}Rc}VJ_9Rt*bLPL5g-ANIL;*@4%5ST>2{Qe=L z8INNfrh-vqRy;;)0rAzZ?MhM~PM$=Ik$$FrH9`P(jqt^Y3gTfthO?0}G-f$%Wo0}m z@)`q>kHn(Pq-D!nzn)Yn-32fd2lAm%5oJ1vK`}i3dNNehKxXYVy)`y^c3ITX!n~sF zAC=t@Sp#fg3A=F~89m~%CSf(rPRix0Qql79itR%%v8+$j;;A4q^=0mSreu=k*HW73@+mHg zv+D5!LK7Afy+2g-IfvZF6VZB^V#p$23;a=d$cbSGyxq>~6Ll7W1g#!C^ifAPuyDkg z2zs4n>NQ(=6b!lHhjiuXvVh+Ld5m$1s)1mTT05>tQIunHD9BjGM=?`UipoInA{hlh z83L}TJs>6|$93EISh%>7qZ)dqRO4gFwwd^xK|MYCxs6*K8w(c}8gCmFHzA=};O|<2 zrl8rig5XB1FCTY2Md|}d0PKM6 zg%v@)d@v_Ce1>7-kBOG1EU}aGoi-Xt6@;f6NgDZv(xN)j%=pJtaDWu`rGkwk5XlN* zOMx0Q?Q$~#5gKDDxt8%jf3YkKoK{4Ky;MHb9s~SSR(JveoHaXz?Y(-fwXNo@Bm9ea z)=iB#h(Hk=>q@XF*g1w}ZkNbNT2*K*#`;9&Gg96PRTg}0aJUm_Pv+0g^;mK2wmornI7dFL>%0A0A{Yp0asTU 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%0DEWUD@r+wI!!{^4)L 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 literal 0 HcmV?d00001 diff --git a/docs/graphics/fullarchitecture.gliffy b/docs/graphics/fullarchitecture.gliffy new file mode 100755 index 000000000..b57d04263 --- /dev/null +++ b/docs/graphics/fullarchitecture.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":389.25,"y":752,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":60,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Example Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":558.5,"y":564,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2,1],[-2,31]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":595,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":13,"y":693,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Discovery

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":452.5,"y":356,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[104,134],[104,46.90809452078793]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":490,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Data Loading

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":127,"y":603,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":121,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Housekeeping

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":10,"y":603,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":119,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Monitoring

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2.5,-1],[-2.499999999999943,-106.14394894619477]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":0}}},"linkMap":[]},{"x":113.5,"y":547,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.5,0.5],[140,0.5]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":81,"px":0,"py":0.5}}},"linkMap":[]},{"x":13,"y":510,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Report Engine

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":176.5,"y":420,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":40,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":331.5,"y":423,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":283.5,"y":664,"rotation":0,"id":101,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":150,"height":14,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":216.5,"y":653,"rotation":90,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":180,"height":50,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[],"linkMap":[]},{"x":253.5,"y":768,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":325.5,"y":508,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":34,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.289321881345245,2],[219,-104]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[2.710678118654755,5],[161,-102]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-3.289321881345245,1],[189,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":271.5,"y":543,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[11.289321881345245,-33],[-160,-148]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}}},"linkMap":[]},{"x":284.5,"y":509,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.710678118654755,1],[-224.5,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":1}}},"linkMap":[]},{"x":253.5,"y":510,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[156,130.50000023841858]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":25,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":146,"y":195.00000023841858,"rotation":0,"id":65,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[107.5,46.99999976158142],[-62.5,46.99999976158142],[-62.5,114]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":60,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":22,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Write Database (WDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":136,"y":185.00000023841858,"rotation":0,"id":38,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[117.5,41.99999976158142],[-76,41.99999976158142],[-76,144]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":0}}},"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":0,"endArrowRotation":0,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[0,-3.5],[80,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":0,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[2,-3],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":433.5,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466.5,"y":329.0000002384186,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":10,"y":329.0000002384186,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":59.5,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":486.5,"y":309.0000002384186,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":506.5,"y":291.5000002384186,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":33.5,"y":309.0000002384186,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":273.5,"y":490,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":622,"height":843,"maxWidth":5000,"maxHeight":5000,"nodeIndex":149,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#010B14"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/docs/graphics/fullarchitecture.png b/docs/graphics/fullarchitecture.png new file mode 100755 index 0000000000000000000000000000000000000000..b5a5148a7f80a6cafce106c39933d270dbf4e061 GIT binary patch literal 108103 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 literal 0 HcmV?d00001 diff --git a/docs/graphics/fullarchitecture2.gliffy b/docs/graphics/fullarchitecture2.gliffy new file mode 100755 index 000000000..602573102 --- /dev/null +++ b/docs/graphics/fullarchitecture2.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":150,"y":426.1250001192093,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":58,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Example Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":477.5,"y":388,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[62,16.00000023841858],[62,-50.62499988079071]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[627.5,-431.8750001192093],[513.5,-386]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0,"py":0.5}}},"linkMap":[]},{"x":793,"y":211.12499988079128,"rotation":0,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":130,"height":50,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":156,"uid":null,"width":126,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":923,"y":198.62499988079128,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":333.5,"y":446,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[339.5,-169.34199153021825],[256,-146.1249998807907]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":1,"py":0.5}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[351.5,-228.34199153021825],[265.5,-221]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[345.5,-232.34199153021825],[263.5,-190]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[163,43.87500011920929]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":56,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":23,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Persistance Database (PDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":180,"endArrowRotation":180,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[-100,-3.5],[-143.5,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":1,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":91.05118074954362,"endArrowRotation":91.05118074954362,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2.5],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":110,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":254.5,"y":60,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":533,"y":260.6249998807907,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[210,-144],[210,-57]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":93,"px":0.5,"py":0}}},"linkMap":[]},{"x":693,"y":41.62499988079071,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

REPORT ENGINE

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":529.5,"y":189.6249998807907,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":624.5,"y":304.6250001192093,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":737,"y":283.6249998807907,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":29,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-64,-38.033008588991066],[-156,-158]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}}},"linkMap":[]},{"x":341.5,"y":387.6249998807907,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[331.5,-142.03300858899107],[239.5,-246]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":1,"py":0.5}}},"linkMap":[]},{"x":673,"y":223.6249998807907,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous GATEWAY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":489.5,"y":262.3750001192093,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":481,"y":104.12499988079071,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":473.5,"y":242.3750001192093,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466,"y":79.12499988079071,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":693,"y":203.6249998807907,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":458.5,"y":224.8750001192093,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":544,"y":478.0000002384186,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[45.5,-36.5],[131,-36.5]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0,"py":0.5}}},"linkMap":[]},{"x":675,"y":391.5000002384186,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":489.5,"y":404.0000002384186,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DATA LOADER

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":157,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,-9],[170.5,-94.37500011920929]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0,"py":0.5}}},"linkMap":[]},{"x":799,"y":408.6250001192093,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":1.9999999999999998,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DISCOVERY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":913,"y":318.6250001192093,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":110.00000000000001,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.2,"y":0,"rotation":0,"id":121,"uid":null,"width":105.60000000000001,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

HOUSEKEEPING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":796,"y":318.6250001192093,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":103,"height":75,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.06,"y":0,"rotation":0,"id":119,"uid":null,"width":98.88,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

MONITORING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":1023,"height":492,"maxWidth":5000,"maxHeight":5000,"nodeIndex":159,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#1B1000"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/docs/graphics/fullarchitecture2.png b/docs/graphics/fullarchitecture2.png new file mode 100755 index 0000000000000000000000000000000000000000..7b6ac8067aa5624e9439ad89a3f8014d2e1b618e GIT binary patch literal 113571 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 z%0DyK(f5=HkRX7D?^7z+H9DRI<#yi5t-Al< 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 h_^48KcLYDxK>|G_09Nm#wX8QF5=@& zUp^G4&*@@qy}0|1(aAdoizZ_uGW|@c-TS)kA;Y$6eUqkvycgDa>pQH8gDiSYBnk&4 zi`zPu54C~Pq>_$MBm(6{1I;V=yn7q>s2m};xA)db`{tC&2oLFYdpk+8Hnu2 zS5hr@o59Z!X(~21Bl|?DDV6LHs_HYy+w|aX#CbS+BU3`kZ}kQs?$FIjp^S?ItMw|( zU-Q1QEVXC7?y`6O9B1bfVh6u*E?`d({dQ~#ELS5?ild8|YX=1)dls&nY-hf1um6rp zc;#;-(7ZPxqj@gZ(g<%{V8=Th6>U_x9$ex?$v1=}xUhRxbm)k`$WVjp#xQio|& zWn6~0uv+;y5aPPSQJNYgnhJ4hB2dbxWfRD8`78CO*)D6Fmrjhka?>_x>ij<_YKNFf zio?ovZ{p)on=%y0ohX7W1(j;?lcHn@v?K5+5i~ERKrygc0o73 zJ(R09cC$bi-Iv6g8GRyOPcN;W`HX&F)8_0+Z8R~GFYR8ZzUW!-(A(XzeE{=gWVney(e5SsAZMhK~dlKIaiOgzV45iRMKT2@@uOqz+=LnptDTLRiWOf ze=8FL;q3W%xmzaF_{ood>^m!a4vNc(C%uZ&>8@9#S)kZ#?=5L0%J(mRc^qDmD0ww# zSwY%xTAbg14kev+!{_wLysMG1gAqon7~4082@**X_3wKjx%G}XG!C|mh*n0argQ3& zmfl3EP@ua2b}aZ#AFD2h8czvXD&BmbKyWIfdhxG)QtVJDd2S+P$9qEL?~6hK z6T{6d+nlsGUco*lCt|i=LA#Jr>X!s~!ec~p;*0X#>HdaFDvph75h#A2XA6GWrTkpk zk~>Nz8cj70y?jPnr1;U9_>6(zi+Y_I3CSYAEa`&%XR*EucDdBV`rUE5Wq-8+#lago zzTbFa>h^rzQaNJ}72apRZBl=vrjPWiZWTHO1hVnF&b9HL&9AT?ewr&aQVhi)rd1Zr z!IlZdaywk7)7+m=Ueo`vU9{?Pbgx~d&-!Zp?H0A9y9zKi2**M$t>yhEk4+dX&hqjc*D9LZksWWHuCea`HlsdykfHwMzkH5zC}oL z!U|6wxBsOaN?D_4f~w`&)DL@AwWDs{KeDI~|Ib6XD!T#N`QyvjEf32*VIDy&a~ zQASE~ixcR1gt4VeLpzSL5`pNaZ^k=}lD)f2a zi}XUNpr;uI2Lp^|n?C0=4tf#vC;DeNN)!=$Q>HE$TdD^Dszn7DDjB#3h}_Z%xfZmS z_?FC5PL87^3m&~*y=hh%x4Aqt)5fC)0<9TX&!R{WUS3CB*!AEB44Nr%ayokz!>iBSi5+=Sr`soxTzLQ!4KE$ghWu z<8}6l)eE*-xMmc*>cKb_9!T&>Z} z@$3a7zU|#h>>1LVE%ID_OA65US2lbz>6lYTdiuf&4M+IS7W^I)56ap`;#K>$y)-f1 z7j|A8<^33iCz3)Rx^dOI-9;<*tC~-f*+6>~MW+-nh#FG=rtIu>S|5Q@%QT#u(ce&B zb?k_T^MPEL_4jSp3=YZ;cBNL{@y+9(4jNr04zkqa0IwpG@sgtiR4uFslSmXrEr-Ov zNYN?pqZmqeS9W$!Q_tW%_ao%Cm)ZHZV->bXvd;x<7wf`Y{hDu2y*F!muq=q;f|ewzr|N;UVHV;|cf)0%tsx2;~MGqc&qCzMT)=k&ox z^D^`O-{<3);MPg|VbT^z9AU{{BsBZpUOM;?^E!ac^F}4+EdH3ZN~TK8n`l$c-xZmB zQ@cVZZ(~+>BT;_jhp^RZU;2mL>PPwX1*XA4i9TAZMd*9+xP%`v#vlCOAK!UI zRH^C$0`@Kkq2NXA9Ftc=TXS*dh=6GNcxz~1AEDs!Vde_L_8gjr0nqzPrt(-%m8 z4Qo|CzxVv}QDK`I)g7AOqlt>J6F%Ygc6A5)d(+!3A}-%yT7rn$>73A=4)OA|$+p8^){j(vKT&_4mxQ$3E^j zNtiM4UMB8vC=U}#+RA6D*180x0ZA4;U0(LzT_O5E{tmJ)IKI4JPAN2HrlWV&knIdP z8=kZ0FZ}Dz$z{H-aQ~MC4^d&=V1j{k#WUvmwBOB|RyktX+53b^!0)%*#ogO@=7p;A z+tuV(BVtLK2j)epWGii9e-2pImibjR*b9cuZ&ZGcrOA}rOQ8| zAWc~sL#v!ZE%xkLZnQt5BjjXTFWkzFjKs8&XBJO^>nII1F%fBLKUdYyanHZsU(yIEa#H>xV*sBo-GN`!QR{ zZ9fi54=sZ+&-?|ZyK@T}ga!#hkdT>+O&y+N>4K3+_jKkOzl1}t1#h4}P%uoG?e+%| z<0;?QwE4bUARSGvAZW&tra@f?lfYPf&84jTH(;r_G$())CnP`vRoHy~J(Y709=q|* z$Y5~Il`8)1OTlmyrnw%?nXs)$OS%tZh(pPoNnb`<(fCX^#qZwUUr5PyPK8|tt^EB3 zf8BKSj_W8%nF5nxLtpHb-oKfBR85<<>)>ZP)+q^43wUX#&3iMm2bU^$saDmUzdEI zY3ZD;ylCU8a#S4AX^@OSVKVGvqTf6q7IHimp6*b^^JrA?xX#sA9?I<}xbv2hvRf^u zGfoiGBzPvxrbNL%M41kgSD;=EWSAxCuCEHH-u`tDS9m9GAsI9*vz?%XwcijrLsX?B z4OvLt@2fw<7)&1bxn9o|)q(9;%2OwLAN)0D#Z7n}As@~gKmKO&{ZHIAejT&kc9F2* zj?%uv#~o3pM<2BgdC~NCi)_!Ps+WH;UmclA=6Sc$wpl4Mo=!(im%At~wfR)L9*Y>f zJ~3v96F$5;$!F$--N2J6AS)ZplW@Mg!auF-!PN z#mZ-b-%cYQ_QWkdRwQgNOU6EBlS5{r-aSON&SSt@tyAeY%yEvq9wFZ5T;P3+cFN}u z4R0l#JZ4{e2o}L^9@}L zZU_f2D+E@Wup2AadiO08-DWiYb3>)r6CqkD;^%-+m(D8JSgN&-={0JQcD%_ zFBvo?e?&<9f|h=B?D0*?c#TRC(F-}%N}YDS;_)0Rdm`4<$A^1kM)jh=XyO+d3aQWO z?D;EFeWgU}qOgzqgD+3se+*>bURX!M#(SM5xX01l*0?|TN16WMT24FcTR&&mgt_P6 z1UJ3L3wLo2Gf7y2D!=1z_C{Ev-~aX__hvFCCdR?)3F zL~A{yrMDPQHgYDcq>^*1Rw>1f+xs&-?AVafdD56dTAlKq{2T6=i71CzZ^g?X4Z$fa zrZMY){;Hg+E+p&(Y|R@>k9J+dwfmK=l9aRsSvk%>S5C?JO!4}H4RsMV+`HAueR8ku zutLR~fG=*ok5&(rgU4}W^nQK3(mdmD}LrCzdp<`y> z;dX-h?(jf}Lw4S~_Vr&6X_>0=Ponw?9a+$I8wsuJFT{Q%g_dLLK9Tq=g(60J<@mML zTW$j36<7D4%__@q&n3j}+cVEQ-mw?vvt|j%X)&wLUAv5$ci?K4cWG%BkL57Ze2Yt< z$TT}j&};Es+9#MUIJsqd?@-dW;N$apnwzUfTjOvy6lMS-N=l0jft#O2NTSCHUO6MA z6^Aob>Q+?>|Imu7Zy}i+sdUv##r1u5@8oA=TcbvD51Y?gxh7K?e?csLQ~?rJD&H9H zD7J%{B(G0QgmX<1Rm1cY{CsHNHP1G?3De9bcV?Q3o|SS=21vCCNv0Goznvuet)DB0 z)k3jH({5WMm2{}&VktCTD&uV`e;@GgaT-RTq|tOxqHeQ89r+!LJl+^LGpd$_rqhUS zbeL5>4BT$=hZRLDB%}%N;8`jxb#KjZNz2eJQsYGq_N7nn)x||CIZ5x>TfkkV45k_m z6HR0{3*(M8a=6NizLNlk(#%)bpKF^_%4;O}!5`%)gm@(5>ofjlVL(FSl_W%#`BZmyHSSM6qTT z8m78gt|bzvHJF$Zh^WcRsmr7^`NW2P@~ZBd6UThB!J28_EO7NDP1Ic=`4t$CXoxMb z()_lZ`t!r=v%W_}IQTmgXW_@dj!RDrkIVE!!7_9)uiq}6@=IzFckdG6_H!UaVvDytM3Zngw3@$pQ?Zh@3RMbehQi_^<2~iN_p-+W!D{*7T}K-&@1wY~4;ab`7kh_rLK^AbW_s%LzrJL`g12zkN~_bkZW3LlYLo@HBU1GcbJ$Hl z2*%?y!m`62WF~^!CzWgmAv6kd8R^p-)jqhx<@=b`DZ|X{Urq}LxO+YfewfQ&X0P#} zFZ544-TNa`XK88niAvi{^2QZQUgJXR#{UzQkDyPy*xeE1#V*oZ9vf8|l1u0de~oa! z{}h&(cU;d4uEN?L9Jj1v{LpMz!EtY|&CC!UEnXjqA|gu8N|3LxDAu>y#C#GzRB($h z%TGn#4{_{d!{!n7usiXt>Y-4r&u3y!B{8Wi!cI=b{Vt zUU~DYtvI2Z%H>H;8jHTVIW@JAy?O8Ys@YN_b-m8H(N51hwalZUtTN|5F2>u)%D@;x zy#42#RBXVY&Fp=8nT1P7_!$+QUIaD)h8VAi!R!6&=k-XYFpQ{%D_zV8v-%Q8+POEq zhlEr;E`(#Lm?!V2<|t1;oD9#EPZzr&(P7@vw$DjWVz?}~a%!DzzjSZ++B}sgtr}MA zeKh@coV|Z^tUawKqj7h!;J2NR%jfBR6~M-d@*OgMr$y;!ipf!_e(rwv`x~8kXtY{c zA}*d5gS0a^P@;D<8$OyOz>a*Y)xSaD0Ie5o6*zi#(R4%2aDQ` zHCQg0+vzs-=#H{ZE$Jc#Xf|TL6tm`c)1TeP%Q{nnqHI~hE)mgL9QsXFS!L7#(~4n~ zK^N{W^jHaOCw?qQodRr%)^UlT;xEP2xvupU{W#%yBXyBqR!Dgo4CXRFoi?TBUQuIE z8q8zLbjrxyY{)T1`)4T+90CUw`L5ZXi8|8ZpN&$PO_(W;6$VsBgx-xU}Ee~Ti2I`KwHMM<8C^U{r8oHJko zf)Wq&^c4(+H693d9=4g>@5ln9NkhOf8%=$0& z3dYKuFO;C!J2zryMKl@p4MG}RuUt6-^^u9u0`p9_25luE+(`cQG1p6ZFIO^XrbN;4 zF6!g=g3z}1V#-zUTck# zWXmh*)Vv8YX!DjS65vtwMf{TTd|tYQ#oOhNQ0X5}q3i2?cF*Nc-mCh{%@v=XOTv7O z{-k7RW4v5|Wvx14z;F9UmcWPo;OZBIlf`PWgv(;o)#uf=b5XKeAGRfWhN_+$X|6)a z`bSIqru~VVzjh4w>-JksZ%W}OE$#;B=|?eMXY}bkPLp?B7egC++&^zl*n}JDwRyI( zy+Xsm6RU@kcP2B$#R~ef2e|O0^n`zkqDvk+`uzn7k7Bt}l$&JQT4m1KD3vfKa~~P8 zd;uMzAT8blS!mtUKuzi0-giNUGVicyA?98mrb_txr`;CeYEeaY8noDOeK1I&uO8y)5fp&{u=uxcz8bw{Z{O7 zXR18&b?<(kJPt;1i|suRsq~5)$)T~{-j6Y+!yO0)$mubHGXWww5^-;5>MN&CXoIgNn%54|g<+`O`2 zTMYe+#C1cxGX79Yx zT&Qj~x84<4ehaNsYqq7aE%eq=vI`c%=|>MAgp6XG%eAhE!rzv=Ht1ZRMU6#Bqi5P4 zDG|gpvMj-=-|RozXPo5jss5Hg#Q2n*6aRa;;>D41ov`sV%HZ|)am6Ep7&v=IG4p$$ zS~H=Ba*Z#|1G03B6t|oc?}x(v?b@uq_p+SNShK6dVpa|oR%_ctdn*Is&UV7V3-q7x zjbgeG{2ZR!T%=J8*VA#dHXYv+sU$DJ37dfAk>WV4wVkO}A+Oq==AR6g)*DMIJeqei zn(ksfw{q`UCszcG{>1gN#92azgYmWCy#xtc@1fIZ{C7188Fr0uwvsaU7g{sF%Bf2` z1#65mzfn8Dm149;5q%U;FShSnq7mw<)7Ckqr+?vxDUs(r#+0}_u*&tmgVl4CClW>C zzG-u;13NdZTaMNYqE%)tT4)f+{ zpbc6nb@c(^a2v?dbmA&kVd?`AZ8zWz(}vy3&fu9|T8#hf{P}M9ILo2IM3#P4Z|hT9 zjcdx7es{JbDg@TOzPow*$cokSszsISb^8Bl@5}$8{QkcU6Jwt-wnQ0Qs2CxXWh`08 zk}XQMP>O~~Bn$>)$x_K!k}X>jA+qn;_bp_rP`0tl`aOETzxU^J{|WcwaX%i{T-W?? zt>>KA{yfja-<5>E8asAgIL>cZYxL1lwhz+4XF5UD^}wQTe3Y}$t%7MZ#bdUzyX1PE zqP;=lxi8^uM>9k*xv^3Woa5IrfO+uqYyWZ5$UZ|?YUDtO1>6=3YA~D_pY<}xi1p{ z(xBD)T(GL^J>ciKXxm6sI{?rd@#6*E!AjvefY+revVlqKY=QeP!<_3MlB>z&=?2Q# zR_Alq^Iw8my8sup^gB?ze!tDq&F|Z)`QBl6XQN-gU1strKgf#fz0V<6EAwF_P?{+| zmAZya&@&;=b{^2$)_XrNS9@gU4$3yV;*L!8%b9YOY^xRr5Fqu&UY&e$0uOG;_yv=n zJo}3CYl7bLX$r*A2~ilC8YlRZ@Ww&CFPhs^5DklNf!Es&Oz2n?Y3`EE{Nvg~SM+|@ zG`zE(xKotT*xs}_{M3hxzvLn1!>b-)ieTQUDLFX}Ve_C95r_6$bdHVFXO?Cc1WM7o zBjLNJ`2+hZy-S6RC(J8W>7DQ1mu}vqo6w~Rqdk27{n6h5j$T<1-%}XOc&ZKHQK}|n z;P$Kl7<5iIq3n{wMI;wkG8024XKZ=Q_b7u3@efxxXX;)8_cC;+E`ASF!G2E)sS?1YCPDg=sE*!B4DVP{Z|3drXqC>>nSM;bzuE! zgb8aX2wGM^@+C$dy~`p^DOJ3zz6g9wzv0F3>+L+TH}I22HXFb54-WTMMxU;O{q|!~ z)FYlILiA{4K@vj~p3pX=to5DOim&Qtm>#1i~n>egAvDk@fC z0dko(z(=(7?P&9ZUykYN0167OE-f`><5stB1&)bR?6yVB#iX7ZKR*$$_^D{&b_j3S z&-5r36^XbDH-$dbESufAZ00E}1Pyne9}lrrnO{8Npdx`n?uTy5HVd&umJ;j?R%8c zz4Szx2~Sl}^5-}IXxFQwDm+$T(@>1@H$Jh^Pa}!r!x~>78V|tDgN&$oykhz712+ER+H%FpW#TD=k-3g|{vwCY=YB_fljT+jlfaWs zygx8L8tWxzb}g@!yh4=N%*FxP`886QUb)tG&SPS#*kkF&>*lovW~KQLfvNydu~Dru zn; z!Yg=HrhSQqn2k0-CAIi=)xw9T7Y&G>;_kfhG5u)Yo@w-y9Bc=ccz*Kw82SNVRgS6j z-&X(-rTdhd?|P@q65`@=Bh<>X;+Cuu%n_I%mHXbH+Z>dh3kgYWJfAJ-c{Pj9akUmo zY}R;o#l-#nDY^#m4Gr4{R8Yw?b<2() z?5}r+nnomfs9om8ou;weIXwkm8h0tk1H=@E7nw>YefQpvr(j5HQMX1*^;j)FC^ z->QYOh>3W!Afvr&?hT6i@H7(Sb0Z5YyigWAAr@9cA*;2mPkKu9m>f}KpPc(`c8JB< z0Cd&BYyw)7@?pErY6_Bg@pf8h}=gNXXK$tEE$AE;4vwtrQL0`aEUWAQ z&(;%XF&g*ny&2-bnvY%n=l7fa++>HN z)h}n_Kt}(UYNeK2?E#=4%jM@E@1)P+05n)zjy~D42sSqRsC+!FKt7MGOUl6$H7dZj zW=h8CV43-apHU|z)w7;Xxd6bX^M!GNk~6b+*g(Y3 zlgqC#bqa!jGS1MZ$pO??=G8Z|orw!Fdo4zbqb2WVL#Q9XZ7ig(+XigjcjzQ?p=loB zVuXekrsMrv*p2rvY7jmc7D#TO!?Kum?cnhHZn|cF3?6oB5yE#eB3?kT!O}l{aF{BF zjuf>%0tiReLbt=kt4Y*;57nBVgUZ^Fq7fF>;cI|}FtX0WBO_)!*YLuW+=i<|oQyO_ah6Y7r+XeSWxytt{0=Jty@%@d z=8ur6`-;`;klsOd-<|1@-4v%=>6ov^Xa@d2>m@)BMXhi?RZ}lgb(OK#@qFBl5!U@=|d2)*02%=XOcf z?{xZq?O56P)$g$d`yPU~=96|IuK-A!agO2D6%nQuO&YS@!+BjSKE*Iyol$`qX+j|Z zLD1;SuM*l1e)!x(G9^VJkTDLyp zVc}oKERYaQi?wReX=02~)LqK!gIsy2rD}CBO{x~+wK!6^+Y{k!Hasu?AtR4D zhqfBVXWB~<;@8i_Eo*(WK5XUpo;eL}ZSgh=leaS!$XwjxpY+sf*Zd^^QX`BKJtnnX zt7zjy;!H4xpHr&bTp9lGCa@+z(h6rAP-2l$@*%634QET4W;5Y;$;q#GO##>btijpP)y*#1T&4088+b;1%ot=P(j?}-PXd?8C%7oGSe~kiY z6d#fLY^HE$N2VLtmfsKgTxrBKrJ4wK&LB*&o2G9M7ZD=-{1h~h0geM6Y7=(P`GjN> zg>Eo^@bnH>jRST1Eskanb#$#i`|Q)Zup*5Cm0*UGP+taMU58Q^(E)1i_*FRhDz>)n zL3gskC=`JkLP$?r7`BwF&v}_QL2(O#bAeYRAhR!K$;(UD4AerGsVvBMt{UX>=J2Kkz`#GGxy&nHcmflX@h?tO+wH*+g1a>65#6{HG?EqU9 zZRDn(JaC(e=!egNPhIE=>Z%0CE=#o^*h+vltE;U{m8Ri$bD@&uR-8s!H$n-YPnG&S zjSQ?F+EDHQwRE4Edd^{=a(oc6wejhz*ZBpm*K@HiH&gdBypW8OA%OE~;U?+= zgvK}HQp!Wf{;7zSK-za2N*NIrJ^=Q1+?YyYuI*&6=S4l?o<>#FjIc zZHn)Lf^niFQ%sTU;0JXAbol&Sd+?=q6~@bVWzo#-%Eus@SW`3 zTqxF(@Ob53D#$zt*!vvq&ncB4-sG72-(`4-Q;Q`4dc+0C8QySr*bAK~VFnV{ObRoq zLG4zpk~P512RurtbB9lykR3^Pw*ipr&EXg($b;$))$FR!MNBRY-v#Yh(YHa6+qOhu zScYZFz5rJx3okFm7?Y#<{Skm4Jf8lO$}42{>@rH*pScnK@}X3>0D%vNsm_oi-DkgW zLx5RnzkofkL$N~Ar*VCmer4$W&8(JfQ5srBh=xR}6ZvfImCJCv6=f6QrJpcMBO(6* zP1NtQA0Tw60`Wn(v13bKu9ScRa{sGHBB_8^HktOEvmotP!#GUy=qHxftVqMhXX^hf zvm)!gw)<+w-~Z(PCb#_kf?R#qH)*$#kC8#DzktD6Os1V3?N&Onh`X{eWPM|};xW$q z9>L9zq@I3jAE*psj0J z8xZdK-soM5d`X867m}i(l65W2Dl}t5)hgrs zRQ1rGRJHH(z3EHqs=ukQqN}EpqdmBmXw(|;ONvT6|Zk4Eo~FC0$w5bGos*XN8#(uSG6J=dKl;Y+ zPz3O)_TWDCcE6^9rk$;&6r^`8(0!m35!gaw+>aM|ix5njBUUvg^qx@EsiqSdx;%ccx}2B97icTtVUS|xs{^x=s*PzgM?79%v0^ndL|MkwuORfgR8>cm-V z9l6^&T#!UkO51(*R+MZ1xVM>rv+}RF064Qe!i-PGuZsVKn>^pS;GyV6{Sm`OEEutz zTV3hYAb*CI4WGFs&(dN%$A2Kl$oVH_M+a{kQ1io+=Qv*@@S+xI@)Jj?b!JFMCMN-F z7^g%k2R~9}CKXRYCjqLMui>g^#kH66-?V)`;}?VdwH(XVa8J`XHS2%_DRhaUMZSMG z<=E1?f8l*AcOHlcUAIx@Ft9iEiiCA;;PtI9yDo!TE7%-g;R8tqZw9#yz0*SgXb0Y+ zQ0BT9DRt!XDKG3w9uC=`OW44fTO54_b7cY>^|I%hByB=FCH-v!tZrVFs1tXx@j-w{ zdZId-Bo89%5o)~vs3!h+Y1`nha1$ZwaO>f_-R?XYBaxOly?c~!isFmI5-iqLuXUnA{8>_WH>&YRUB16ZN#z37_;m0 zeOSpkhE{Z~)+GE25$=PG@8Ok2>fU}_7)l!+VAN@2UL&P0E+6;e*E9boGaFb~_W^y7 zIe2E!ttsw*-cGYN^myz&5dgjIr)1qlT%qz5N%`7HfQp}3h?rrr1jec30$nD_<+ZKK z#mDFD#k#Q)D0_@LSr`C~J=Z_Gvw)H!uYZr=@%YN=i*6&tfcT|S$?XN!vPQqT^16Px zlvrH(i_nyc2Ax#vz&dS%GIa@5?VcXk;Zk z?uim>+R1n9mheI`h4XMr`^`f)ySYL)mMbOi)Yv*t)=TPo8-?FfxG}TsrvdJE^OUiK zjYvN?W#wx{#y6kE`njJ{Ht9V8?LXC^eB8@mLupPezP-QZR8swXwQlc6N8U0@wxK1V zuc%X_wR7??dSOgMCv#(4V`#?6s|1jh_2=ZdI~uh7baHZJ(lL<^$pXLPrFe=XV#DOE zUT!9z?IPBW)$Bvbq2we7B$Az`NpgC(uevo}^n)&nGJb)nkH1$E6@*uxLWA~l>Hlo^ zPkWJhqpR+nc`aUDest6D@`~iN#4kYk&7;w+)d_L?8GrU;%h%1o{wX?DZ!Pp~ZW+JC z{FBTyg#Owxz5SAqPcD6Kmz>aE>&(JFyNX>mxzbA2@QDSdmXtUw+yJ z3gYHoJl8t_Z{-^B(*OHl2n*RCzp9ImrcefPCJdvAPr=j>2BxDbB43y4mPcBoouxoF z138)(WzKvnEl~%9o%^o8pv^w?O5)prA^GY}R+T!AqPEl*92;+9=w`+ZEQ>tixfN;Y zmD!N5&=*mg)rl<2NuN&xLA5zk?*-lk7+%@O|9rKSF2$@HQLpUJ0?#j#6_d>~&o~3C zrW@k2pGWIdvvNsT@_o52wRHw-~;kzsu3hwz< z23|B4wD%<-G=CtHTl2{bkSo9%> z+mnIVdrg)bkH)@=Q$UB7u88QW3%`k>2-AR&E`=~i9H&;CRAqVo?N1jWd?3YIvnwY) zx+mMo*Gmw0sdd*yy)_OH80nxWHM$N3IPxc6zSih&-`~L%PxJAyG;d{RO)?Y(F+tu% zQTFjnQlM~4 zfYUZW>l;9{kr*7WNw}ZRh9$MqNXjfcEIk-AMasK52~07AT>GKHcjDe%1 z-)I}>)vKJW-8jyKTLdqG>(-AV1%cVAgj zq&mz_lrgt)3ZvxRdAbwk$S1jHJakn0HVk^H6XI=}J#Bq6HX%OG@I?ai@1hG%Z1=pppVw zaynZJg zq{Qp?+~SZ32nQ0){Ngv}3@JnYr^wi_XC1l;W&c@y<}Q$Y*Wu3&|8^MAmzt{3h*Hh$ za9W~DcE5K?Bqc_tlMV&vM=aT;u^I?ctNf22 z#jS#>HZ}C}snBga(EzA|{BevDN%JWsWsw8$s;1knY5g_F|Cqf1Y%Q0fRYk{ouA#D^ z_pb(C{j1SKJ+@?_13&H`)*p!t7Q!+xx^uUg-+DS~TMb3bv#4o~gNo5|WKGc@ecs%= zdOoh18_e_WT4tTkRx9Hde9W#LDUmu&w_J+= zMO-W#Mw>bn1;8NApBUY&c zZorfsjJDpj^ezc@kk-yF4&FumjDj0ba3?`EdDCD9SYr0ltnGh3mG>eHblqa*`-|3X zm#eHvk{*r*nqDHT*wuj$U_71!wKQ6VxciXfWH;w^ElL2kwN=Sbf>>NPm7#ljweFL=1O9YBQkNB3c}_N9(EUH!q;?8jHj{`b{t z3=kq+k?D%52|af^f{(GDQ(B$Px2=mxC@e(p)}UX=*?_ z0dPzzj?qxpj(wE>-H4i$a8?7lUUM@tv;hX|y#LBBD46*4UfEr6j_Prl?8JXg=Jh9@ zrD$jdj^qQ~{`I+l zxPt5#q2-%*KIpdp8kYb3-v@QE|9|2CBaKsgMB|0EP-tD%Q_EMe4)`CZ CS7BQK literal 0 HcmV?d00001 diff --git a/docs/graphics/html5frontend.jpg b/docs/graphics/html5frontend.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a5370ac501dbaa6f0ab9f9b19223a975ab46a654 GIT binary patch literal 157632 zcmd@4XH?T)@IH!0K~O-E-ib;FA&N9wnj}FU~sWyt;S&K4b%HWoKt*_MVw%p4lfqPF6t|4euG; z1D!f`3iKHG0i7&@bU>$1o%-+fzaEA&4F5e$jEoFtn3I&#I$0-Jm zQzru;FbH(&3?S`)0{^e))M*CBGfaR;EUdtU){B7n3=F3MVb3r!0<)um_d$#tXE-lk zzs@hhJB__O=92{R8&3ja&$00G@e2q_NJ>e|$SNtTsH)vm*SV{E zPfy>#(8AKn+Q#;wowJLpo4beS)4-tMkkGL3h`9KK#H5$WDcL!%bMx}wye;@pT2@|B zS@p5Hskx=K4b}dsqpyEpaA^3;$mrDc%&2(Uk@c&lpe{1&tr56XF*J)r67@7am>(uE`U@&knp1FLTiSxD@vy(s96~z~4x$k6^ zH1?hoyJ1e?c@i+m!Yi({CPDm9wf{r2|7(iH{y);}e=GL?(F+4&V>ktD9s>sm3ZhXz zq)3DQ=M0}?P%w9F-g6e2+82g07nNz=F!*Fj{buZoIZULF;+cUjVF?k9sxJ)(QOaa-+bT-M{ zet+gema(oph}%r}f7H1CCeG259Ur=?k%_5aUv1hkI03P;EcWl<9x9!HWZLRV@<&fV z_UXlsC2WU_C;~7cW3LwSi}fP8wfxxDOpcv=|E*(4(yseVu+T^L5pQ2MHv@4WvZb|V zgw27-hZ9h*F4e38_;cTa^twO;iI?em5d3lXl&JI8GwpA4pmki5;v}A2A|LKT4xy&k z4*Bvg<#)@nkS;2+bL``dHtFv!@7S^lN41 z`RjXpoAl;RK>YAkaDih6fGvNa3{0EA16G~_@q_Q_! z&w`>^V3Yam6Synixb3kPY1nV#1e7s9iD<^|+7QM_?%!8Ygv|KE8o8=zuWj=?k~0cn z+Xror{%X2NkAO}MhV)TNAxFqSa@#~1FeJ3O`o>8v)H?$IQ94Zt=JRL!gNw|&!y;J7awrmGh5Cz zq|Dd;`*F#C1o;(CmQJE_>@BYCC5ICkR<|APD>AS?J%q!6u1pr>*Xf0u68(~@{C|v3 z{rMu>*fvk)%%`&yRgpIbBH;ayHOJZ*Hrm>K(#1e`14JLC*WPb{ zjNMl%QXgYaebf}G+^k83aL$#aKMe6cb8c)co9s&0TY$D!;!%WYk}$!#5C={X71I`+ z{Od)muru!PUOp=Ha}K}b-Ij6>EbbF<3k-SmiajoqtfopbkfIwFP0%?7H%~y9=Vzgu zJr~G&>&BU9GSf7#uVHz9EZ!%*l>eKqB1C?l@9D7JRCC6=wqNWWr$zxi0PTT(vBKE` zoQnl4Rjc)T&<^;FLzLNcP{kzv3Pr2h&Lr@e#0!pVVt2&-PCI)%Q@AE~*uyvCcQdmk zJyb$kckI61SVh%w!CzNaWv?4YawIoksdhTByKU@)9-3T){ow#Fxrp^n%csX76L1AfSukr4UR?*!BW#dEE(FIcRJ)~usN zpPqnz#Bfh)mPAHe-R!t7;HvLTTax~x;&>M<`_5eo#09$np$cE7h^a12lGnjC6n_RNiS;RHap^%Fc5j^m0ZcSQxDFK+c8>Sii=7$~q3GNXKBn7ogtQ)7Y@Wwak|$$x22lw8PHA#OeCo z2cdGp0gBH)rKqYInC`LI{2B^4i!@J1UDArCdA%XS2+nyc+Qiu{U#WMb z2!*%j6FNs)6#it%e)O&`Rr|($VRqVQc&bZqWdZ|rjd9FhnsvmybH{TLr}b!W=}hG2 z;gw4P9eVLCpZ;njm^0?Q{GOYv=;yF_wzN|*}Oc{iywZ5U(!x}{?a?FOyHvmFH?+G1_{_+_~|GmlnrJg!{-9J24g2? zAh$(wX}SK|)WD|b!KdA;g_;4HSo(QyTCMdMjEL>^HvAbL5u3^LTlOpSx6aGm=_Vbt zx3hXju27TO%6`sbovY(f26);sS}U4k0*|-PDWRw($=x@y$Sha>d8Oyp7IVIr;A)I& z%uEc3Rv1(gy6(&Kdj)J`PSnv{`1FY(ZsX3U><1B73jQt9S<+8HXXH*miKbJf1bAFm zD*9!_jHqwH?n4JO5kauSzJPJ~tj9(N zS`xlCU%RW`_HKuFowntqc&~K%4SU3KjxM1%e+@4yCl57gZft%LGU)5eGRW;bX>|)^ z^D<@zN-#nvz*>280)oL8Fdi$Hf+a-)4btU(%{uumdA|u+lzyx#>@9Waqi~Rok~kvw zWu2Zz#iuQ+cxFagZCMhe&2!-adUCs%4Rn%`lG^)SzFHsYr;Pkxqo=b9rBC+8B`UvWZ zz&Q6~TSI&6ZVYJ)=hH+9{CjmSPMcfva+!)Nrt0cBhpw_?xvmnAZ%8;Ar_EoT`~8rQ zQ%B^cQ_bz^y7RabkW$2*!}2nVLHUTv=>%@GTW12%d_9u3QM_am9GrhU%VDA-%)+o^ zP65}d>-jTrMKX8p+Slqw)xxJgy9ps>_8$RRj|qZLWJRM0qJ)c3klWXhMI zel2L-yh~=xZHlr$)T8R!P_*FRi-?85aZ&d@0ZGm45|H!@0klGGF*0Uef94W7d37wZ zHWTjOBETzaxj9fM9k=`a2)FPe8;RqiPfQ zGEP9N?_k^##J_EC<~k%({i{4xL-mWjGs>!TYi@16&f1UxkKT3?yZq$|`#qH(Hgc3v zD5P@&^>#eLHc0#+`(3QKIn4IG_f1G=!Up^7||M5t}1I-)`BH8g;4goT7Tn@AL>Rm z19rUt*rSOG1%3y62KV$|l02^Yw>TXXlW+Fu5X(bVX72k%Y@Ao>U*nmEw!zzY*X+J7gva<| z7~|r=`3FA2PtY2gMkgRQNa~4it3K#OR~UCCsc(!PKv&6bH&p0Nn*ID$Ku$9nsd4b*QS`wUvEnpM`dG==cgx}ERJxS zBKcJ1Zr|y^y$HEA=mMC|npGP0n7rdeK;icL!Td2mD!+4mk%ZP)Rfe6DE}Jt{YZ&Z4{OOO}H6FRNM-b$e>+c8bN`;*~_04b!xK)hNCw zwtb$J7}gIJ_Z7057}GTgkTqZU-LZ`KR{!U7@u)Cm*=y1G`0zkG{sUSOKoN0qnvsMK z+hE^RXyg76ILYx$I<=D)OrM4<2)y6`<*QgXUiVa~7YtfU7JA7NgCoN6<%IQKSW{%w zvkoGgFJXrwtMx?Wp7gucuZnmM*?YI(*B5e6Ut{B6eSW(a8d6vTN$}m+ISxHrDO2qg z+PMAN<`;x|mzAhG#H+YNXQHLWK*DN12ksXd%~QwPr$`G1OiwOPZzlM+Hu1Wf#U1#= z-2U6L{pZlt4=`p|V&?Pm8C>iraaZ}ghUJULJ=2w@{8v-be(PMevDS0F-1usAw53F{ z&_Q*t+j<989~)q}5*bdN@J41pz4yuTfZLh;U|*+#FLZf-2&3;<7Yt!dRSS#~%1CCq zH`G76W&gUVsKR+mXZXP(vT=uKL1!7K+^EDy0;i>+op3hU6+NfTyJS$|o{svCaU6dZ z_#=Gsz4k!H-vq-9&eYcVF3eu(IRm84s26{w0L&=Ae1jiLgnHH@pUgbNwa4BqIQQK^ z_+>zSnajoKvq&-8CqOJFAkRT#7>$U`!yMa3>gJBUmHnROy4cLAOw0}XxlaV#v1eJn6=6A_DyIG>w^`Q2m6C<-vAfK5FflP6H3rE1 z0Y-ktz6b`Q;h7v&ZBer8>bMuqJ$ap3+9hMovPn<$gRZGwa7WEo-#b3nqJ80eWxud= zP$BHfHE4JGw!F6+x(h1{BMa$MI!Q9LM$H?PQ2GSMcOdiZkDZQ?r0PeH>~)zM*-V#f zbmZ<1=E;aZ;H=~i94?O-jFLG4G2!09du6&rPC!mZHYcF_uJ!iodQ@SaN&{l1Il=ui zG)`NcRAw?v zF=H^EuIq$S+b)hRx*R(EQZ{Kt*Yk3=noHaL(5!VKYHO#M(8~}8sa+EcibR@(y92OW z&XRnz)_Jxo{Js4a$*vgT%d^$!V95Fr@YM0^pE6HB{&77g7jsLC=l)P(@rXu*_P9?E zyrf*nu*K63zl-eXZi$TgHrx+xt&9yuEVvtxhd*w6u9+}wW8`}}d|HPy7HU_EcuF7o zef@C9!BV!_^^NSFxO+X>i3qt%9wY4N5Zx2^;VoTIoCbfZi2BY*Hn_!pv}8RxTef3E zU(J;<^fdY!5NKPlC}fJZG`v?nN|{zjNP>MLV22Q_!1<|1dj~5IX2ve!RRV_@|H!uu zD_%cayMMt%S4$29d@=#iicHs5iy1%Wi|f)Qgbs?H`rdVB%|UiipQ!L*y3mAID$n`A z`)KiQVaO2jkHMvZxZ=$iD;XycSZnizly8a0!T|K~ux=8(Z(|ad02IIIK zv-bh5PFI5W_Syv@`2Rwfq8P|G){z*|gZ`o0wT{2)p*9nNus=UU&2*tT>_QN>IHUr?ZJrK{nd-;7Gbc6PV?xIV%*{YuA5;kE! zQ>0EMn{H?Hs~gPNBzYZ|&xSfCSke|-jy-=MVZO13qHIex5Be(uU8v*a`I*gqetXcFH`z|mFpd$nL6ow=%2KRN3t<^ zObjdoJ8xY1Ny|b!@SM;*K zZR?uF?#0YB>4&?8>G{KM$MpSy_m4nVo8jC&(EIfKRY+_DyiZ{DqxPZ2Qr1;peuklO@?f-qAO7s zI{jh(apSHzPa0Zm7LF=+G#sFWA*{x`rb@iC6xKJ3m`N3~pge*1ZPT*;vL~vS&%Z@R zNq@4f?Qeu==L9(5Go_@){591WShD(Q+cZg?PtjigfWj))Hf9EZy95&iS=uD=uP^6S zjCK)eq)TF5&MU5Y*ZR-sl{aHsq{uhxx$WQNm)P9UmHZQ9!x6(7P33W4i=M*Iz`{f3 z;lr>ugw~rS?%%0fz?#QYc>83O+?q+^+>I84`pzBorqahFY;3$|e}r1UX{IQ5*r4IP zVstk9C<$63RqWbJ`J>b)+Lyau2N%`*O>!NgE+VO?d(Hw&ZEkbH=u51uv_%uPg+UIj z7kL}#JHODT=qH_T>Q6u}kc2<>@G3ZqXCm|{W`tMnPa0cyy}MliMMgY|_rAr>BcqfW z3%Wx&|G!Xr*My1V>y~)jD^=yg%HRDGw-zR1^4$dpEmwJ)iN$;#}SsV z_vgYyqsEuTInBokBkLii+S@J8tugC7%PVL_AjYgY@UCdtuNi;17+rmLR(_%J=v8#q zbLu(h+rP+SoZKROiH7@=@M8MP+_fe zH%dpIPLo}#aDFF!$XU9+$V0wKF%Sk)dtWnr!D$kHSUrk%gs#3kntnv@RaXiK6sfPP z8oUrGg%OybYmUQSVO#RS1ivyY$uQ5S)gSp@&FA^I7?iD^mw` z&Y%B@2fp^Fr%b@mE)h(YsK|q_mca;C;51kZy^?F04DGwH!b>oHE95MbHX#0BlfOk? z3}SSgrM8~=yhp)9J)g?a31nyap|^}%8N4>F zcmX+wBuhevAq&kUQCf;7&#H{JX4HjDdsHj^`+Sk6cX_6&c{^=m_=@ivG1b?Vlq{+8 zC;&S!UkXF4PT+;g!q{q@(tKP8~_{Mk}ORV|hu>R&n*OdZk|Ya#e1w2C;=Z}Vj2dPywz7l-Hx<~x%?UaMHL zsu-yg3Pw8x6C6wYHvw7C`6Q+-zH9C&y5xEF-SHVSaZrREWqt-sFipQ_Bt-&~>ojk2 zswV8?)Sy91SIg+2oC50f%{~*zfOY>w7>uw$owQ9eY3?`dSk^^s>N2?k}72Ij3A znpETKRa}lJ4#l@lKw33__n^6YzP^V4jD_Y|@x_0Ud*eF@yunw3n5 zl+t^b@AtI4ervIJYCi%bXp0#SL4ctyS`o(@!SIV=S0v|K7Vc0fPt4~pZhqvvBkcW+ zwe~J;62=SfW$Dpc3KJvc&P1^)kBP_)k=QjkIQ9AF#=3Ym8G=qn4-5FpY9e0S>{z#! z_t$!=TBFWNpgtvh$l~|gzRk$7cRmKl*uBbM>B6+`9)4Xeg!*|W{KF(7gRheBzmLA( zdSEJ!!`Dh)CgK+Ww&2Erf^2N><{Qmm`Jew_#WjcS`{GgZfUhl8+RPv-&-_PxgiGO% z001gSM9>Gkfi2RPMA{=EG?WtS35Yjl2*%setuVT8J_F#2ZBkoaUPH_D@&l5Ete&9s z)o)*Kv78crbtVwE_uEKe;*a_tQl4xf{44s#9}D_903oLPc)i1{W*#-qR6F)y2dLN25gp3);ReF9pGpig6Y zdaj4L8#?=Yl`gfAC{m*vU5lwTbyZ&kZ127Nd2JvyBN`|q3-8mR_80IWP!SdH8bsPW2_JqN>u?2pE-{(kF-l!q#drmS4$%_5Mt7 zox260d!xH3A)$F`Y5B`Yg8urghd)RlE?XEuZ~ycToDG;=fIZg&;q<^Dlm2#V+|SnN z)-Z3$p4y&G|N50zzwFe^YFsQcqcwNg2`E~slLUw2P-FmWUfGsYzh_*IDU;fWRu@W;mekp*Al(S;b7lr>b34mmUiEDCpMG(Y3)h) zhZNPVkYd?cNXtY6d7>{MP^FU1UmC(4ZlTz8`|O`}U$y((uDnLOd=qpH`U0$tkIFs0 z_7^zOfGz1?wWY`qZ(Nm81sVt88TS{yxb;U}Pqr+dw{5g6Nn^lEX&uh5>o z=d$lUmRz6fF(ivnd}4lp3C8U4b6}>fhm@=28r6=}lDnL|1M9rx&u@Gk`RH)B`D?t6c&0GCE6@0f zE?E2e^D{BJfYrf0V)TXL)3jpcBCl1wUPNMy`lO~6@{z-KvDn(ga+Z3V?11x40SnM?Rum(6v~Mi!bxqa1GZ0O76UfZ^fstwFKAAtA9J`dy4nT&!_w4-iLNfPF2L>tSuk1wEHy+7JMc%QjE zCRumM>RIe9$Eu`DRme){Y8|)%K7_zXg5#ikJ)HNQz=PQMUUzTaJ+H?K;;;L5pJe+k z@ul3o`H)|%@G$Kn;?hfN%peQq1QIu{Cc1M&UB-4tZc|6dtRV;y$ zy8JVKOgOM(qo4WlZf!Zgy0iqXAPv#E{}EOjbic4Z^X_4H?%|T1WlqXb_fRbkutMpUKp@vSHIo>#T_js_Z93wmD(A>|(xk|V>tD;_Ou1?V1}Tes@uN^5b4m_AU{Vc(4#3E=aJ&V@Buag@M>NcrbeUKmS0C0l zcF5{ebK7$UQ9{qNwNRcf@b(o1VVZtUhsd>>Pvtxt1t!1-94z`^yb1kbX*+_FHU5=- zn7C_h%?BUkq+U6*a`^0iFlztjY4vDEHc}ry=7#dt#x9dPvG+B$SMk<}=EwsFt!H)E zaY`G$e$1q}iwCf?Agvwn*CI#0$tY!_Jt^=66hGa&a{hZ}QMIQ^_PUqAi&-=Iwytf3w4wM^ zIcwC~Z`@+Wlqw3$y81P7*4im8-8h(!2M!aqb>cIU)sCz)jBd;vfC!S&w-US|!OI+b zm@%`*rO)2?x(Bm1I&@-gF5KVyY|_z#0GtC(OVXB%QX!8J?bkN}?pl|C$n25-rb6~L zSorDrD!lkvwn5`^=;+!7)#mfH4ym1Iw$k2h8_h(Gjvs`t?93M;yJwk9i#R-~^QWfeKXTPsC0@TM~a`5c8XQ1JGD)rEVZTW^{3_zl^$! zOOE34T1B-Y2F{fmV;DPQ57U1|xj!-5Yi9j;`2R;qpu5BX7?`z2Vfbwyqli(v|`8F^9HrlowfS z4a?!RqSVkZLlvpkDcK6#=7T=zYRfgZ&bVm*EXH++KTWR7y@BTt)yKXNvP1F#1T(Dc zXO$E139h@bM%$>Jn`_9=-ZU+qdnjqCE8yn2;Rj;O){9uLF8pknk4aE92o3E5L=r1ZaU}n z;up-_kKw%nCm>h+ogF%mUVI7tIQIk~D_&52$%Lxdj&Q7TmQUEWUz$+d9Lv>_k*2)P zJ-pHrNPj$@PpRG}6!QfLow_8=apJeFgc6Y`?s$LLUkn{JiZ)_^5dOx)CS+ zZ`q%XEIz5pk7`3L)6)e?y8wS&w0_V5hsbMgo4&5f8cZma3Z^k%+M`e8jjJ2Ko%T+6{M^*K9#(J&D}O}#c$_KK)`fW_zN zU(}5opXC=s)gFv6q?J_&8HOLZl4yqj4 z8A?h@po)bf@N$a@2tO_{pvLTumCX8;ap`x~+0x6H+rO~{Q%EfRIuSwTwI^8Q8}T}r{uxBN}O)|IP4YYvU=ZX{!P(G@smf^HQ% z4c)y>n4rJ@VN;Gu4Q2--d2grb(*lQn3~Vt<@THEru##@e#+}i~i~Or3wJN$4eY9AG zj0N;PJr%>}86km3XOt0m(^))@CTZC}A7KhTix=h`dLAW>xb&~Hg%3IbE6Qq%hs~2p zXxaN{cXTRnl_x5cu&6^gdVwRX%_&D}blP_5u-^4{;ix4|)|yxIJUb_TQ~deqdABFs zHACMMn_ky<%~qg(Z1!4OR;|gJ=n7#+>7y&r0?WYKpcozx=mqF%KAhb*C{@E28D)vG ztFH?dJSD%;`zi05i_^S|M^@V5S*@Ku^eQ@rYnmYh!Up!BDec(j#SmH@bT!#JAI%D0EpDXfP!;Su-%@2hhCTk~)@l=+ zHBfw)kDVn)jEj2`vTtXi@Q@=Q0ucw4jwZusvK%|Uan&~+EJEcx0iC7uP_H8>I(>AG zt_e~uzHg%aT-K~BY^9e=|3L3zkbb<`EBvKT<2HlS1Ljk*hBk}2QZe?SsE+L4&Vm7@ zi68G()D4-PfVey|mr_ z%~Hj?jV)1xs_VgxYD`9vA-GX>7fOkV8HR&`_F1EDej@X&bu$saA?52UfAy4Xeyg^} zUzPu&SRJ4CT;GhdN?gID4jGGHtyE*6b0QYjUu1rQoPfk^ep4S+{=*fub;uD#3};0i zPF5_2&Or%xtEy@w520_tWI5*D7sMn|AbB60qOD{{zP1D95nZ>W=p_ndAT){Lo`Jbx z>kD$e8G4|LLk+4AoV6OrpJgEd*YMz&hiIm;{@avMMC~5q_962qQ|qF(LTXl z?V*c8q{!JWi5vayA6uAwAv5qI|KC0rq{wHar72Y4z{b6xU$%b= z<}fo+PZrD2hT~UED%Y)g{!0N7RQvZ=c@Y<>kP344M1p!o+R(QH zkL_QQk}~$czo*6Y*b`v(-_ZcGN|rt|pB5tYA#Gz+7F}ZG z-K+&NOU17*iP}HJs44X1pk<#ivxdY-`@+anPfMi$-AgXPySIfoU~w>l-|%jE4Zx?- z3y0|y9(Z+WDvcUQ>I}$uGAusZN=H zv@peY!?%l)zkBVCdeBV%)vG9I^p%^pjghb6t9fvOCFC5u_f8Ls=huRSgv^2TE0bIU z1q}LP?I~7$%3rVNmK#b@vZEea;*QwpZ6(Ty_qBw%8wi_f`7)iQ+fC4tT3E| zs(oTKY&G-qxVnQRPTI!}m1+9s#(>&0%@^A(X$D$omf>+>3{^KT3gR*wF? z0I@3ufIyWN!f?t72xsGqiyY}XgR}P(lJSb%e6#BO-4$|Cuk*b@nbvvuEf}~*2$2S3 z&~#ce9RX9t3zSz1YL_`GUaT|HSl!TU@YSD?g`0GSn8h~4MWrgcc|CHSJL%vm^h$3v z<|VFuNPEjgWoq+d$ZL`$`Z09%%?YS=8I4C#xXEI}@|xy5fe+I)V7jhf)n9{j{a7+P zM4spB9ZBe{^fadv2*Xa&?n-&NVq=s>6pe6=4;d+)e*x`kn;cxBa(7ok(id|H&h_@hM@- zq=5ZjSN_N2vL-4z)A6-jasMH52rc@5Tmk53sU`vZGrMSBl-I{|URU3QMkj>mqinv{j1j9ovy3>`zrZrIneHlLzRPjzB1 z-r;PG2uRs?UW$q|Ov9)4&s2)yAJH<%L$1|MI{TZ zt4sz;Fh*OlMJQ2@v^@DY|6Zgo)7FuC-BLn8g@Krt$M@swo(sb?f1h^c=@<-*V0(W8 zgCqf*OT3&3p?e|$+3J-*U(WK?{i=u=ZXGafw|w?xEp*THbUhXkF83ErlLpNJ5U>#b+lsf`7yK7&h+s5R<$u97X9^L zXPxlrS8x)E%eV*}-d(>k2FoHnfcsh0s9F=XGLu?H>i2!U<*(v%qM9e9Gt{2%eGOy4 zDi2W^X;oAq$^+C(L~q209cxE{nT*`PNH%Yh=LSbvLP^fvn5Zylr?*#3)+%$FqL0lx zMwCUnWfxR_ttaVyFw^C6Thrw>J@r3eFsH}-K%CcxP;Cimf_i zYk70Nw=^`7O*w(wrdgEnA^i=h0Q?Wj9D?31zzj3dq8`)IV^ju-te+7rKFMAk3&pO+C8nOSq#!-{SBtMzcIUU}^HevxMQxEbXNqtQuicYMT?O_(g#Nu^ zxh@qFh(32!)25uNIsKkE^zpryqjZ{DclV^yNXsHX8iWmMwo4R;KG17Waeda{CUl!c z-SC!5irt^Z&QI>+u(qS!4dOKE^<1y=AOwgJ5}_*D!L`?dC8h z{m)$nxr?2T*{yB+<|75al~d^@y7WDf(Yrf(Y?dU;6nU>ymCWx^Tc+OfJT> zbb2j~wda7JS8O?ne<(hdkA6^jM=>-Dhi%;NL#IK{c8LU*QXi7vuI;DDd$VzPM&u$A z5qjvpBu-jg!a(C!`y+cpJr4fpA)|gTxEJJy-r7Ds_rowarDefs7H=`uJlAq`5r$C+ zY|&=va6v48seSw87IOiqR8;r$CFTf1qpVsI+P36;vwZBLl}7nA7#pe|-S)E-X1MZV=DDJ7C<)Dq_7!n9Qn4U! zt`#B1T2{t|-C$L$ZX<{%Z;;)ZB^igsrt*%K0TI`%E0%0rmNOCMePM>G>F2(2?3Uq= zz{PYXAb;@LhxI?23C5oYFT^6noSzUG-1Pd~@wv7<($5 z;7dn)T}7_KL_H(YBwpT!UbO3O{y;pczkET6kf0k=#!s8r)OTW>3;5z^4)hx*KIS@} z9oe?{8PvL0h+c_-{MRipCI78>YI42}u@+`+-EVRM)g+0}`NJeeXLuKahw0PDpoH5< zwlKHRy>;B*Wkl*mPh0kKi^KJew&^uaIk`?_79+7$YAvJv1!LATVuxx&7vOc59A(x5 zG__b#YJD)6{U_HnIr5yI%6>GoUMw&w{{t27(T4ZdV>Xkhj>;1+usocDbrpPq(fP?y zJ6?4+hwl_5RJpHzKr|ZB3!?ICxuXt{xTxx90S1N%@RoO}rlw4tnEz0AXzm^1eM#gE_C z4xy^Z$+^9BA~qAqQ_sQ zwDtiLW6l>IJq8Uk9_I%|)v7AdW$&+~ci(t)GXtJBG`wKtsS{&c&T}OHt=%HcVe+3B zLHkY>FGzQsI_j3t}a zm@iO*@dQSW6iM!1)4D&1Xtn;hj%6SRiwb43jj!!rhTtd~gPa0sd;QMbQLhXZ_F;a` zr$6oxSH?a@fnuh)Aex-Hw~!UOp%^n^YTMQCd}C-#croBc9XG>RDgJNTkzFy&#C6M;GXFO>ahBUL-|zP)|An0~a1jNLEZ+=+bggZAy3IJxL0 z;yatE-=C1D(>-P$5%>Sy(3DgtmPE8vwqhtnnWM-|DB;$ACcO1tPQ}A0JzAYBF}*%h z&cq$)%EuRu#hR-$C)l?Nz5FsV0(!?$Fh|RTuEwJU;7|6!wvJ>A5~6)NN=vfN6JGC; z=O~yh7yVSa><+Q1b+Nj6r~-OTVfE}bi03#C#n7$v+#ab_v$Zi89`~NmHI{>tZLDm_ zR8=)^L%v@K%emJ+y^pWke+GFH8IG?^c1gjhoOvjqfBAJ>?Acyn8^Fa{(A0}LeU56g zd&;oHW9kY^N7mQ6@})jsrCA?zherG>mxI~aFqRY$4~Y+do^m(LndCtB48&pimM5G` zFec}_ns0kbjLF@P348Q$xV3m8yj}_o8L_7HjumYd zLry_jitUi}_0w`JUCF+;a;r%aDs%lRknZ9*$fKur_7=r#BPcuf}>A0@-K<1U;Y7#J8ZIGy`Pa_ksPi*czF6(Y}V=9qQ( zKLNu0pXtb8pORtFRXe>vm|cUSumj^3{a~h50y5G4PnRcAoepL7@aZbFd8dj9@;~s7 zU3SaAJIi$T6mz zc&D^^9yskdgLt{3(Etw(Q+?VJ9~PYfgnvIAy+4w|sPOgE^LD*d}0 zQ}s_>Y3H&3%#KxhE-b_d+FE0B0Q3LLH;7!c`3z-@k=%0RA}W+tdD>Mp{IoaH&J7er zv^pP%jPG1(8}I}?vupIUB9j-x8gO5m8?nYdu%B80k8R21oKR@4*%J&jDqmj2Y@gBL zyj-k5cT>$Gk=cvb(y06kOfXB;Z)IO(CfTNhtrtiVbyt1{vt8gkt)?k_@j|5Y9~fDt zyv!`hkM>r9Q<+PTcwvDd;a_ZaeA;>mrYzHG%ieNeF14u6qos!ef4i9Sm1wzPXXcgn z?n9loT|UrZzwsN925-qs&_2WJGVcok_&!tXNF&t;(>}@?l=26@K`4}7{*ye@NA-hO zKRIPt!rdVlbT72kEujia*03npr-<(C+9kA(m(Ar{-?$Jm!d+dfc;nl(kcMxTFFr?E z5m)k8;g~%+7_&!y&s8!CXTmmke(?2i=R=QU>s()dIr-VK-JCJ`tKU*L2F24NWYfO_ z_x#UgLrm~i6o7-)arOPEntZk3m(Wc?Td`=Ac)XjHn}C*KeK@W)?}{TvY319_p3Tx$ zp0ky+=ai9J+w`BN9@^oLDOz@YLM4^EpH!I}pShv%e9-yM?ybgeAYp{lO1JYGAAWxo znhwNKA5D?>y11kH-3#M)R(AR@3Gb)A%{^AIv$ee4F0=THqn)7WH45;8TnMtv1YUPH z3OWq?7jRe$Tjb#)U88kqvJ!{5NU(F{arhbsv6SKE+L!UxX@u^d`M?nS$IOsNueZPD zDg>i$pvxCF)*6HTe&{+vmaHVkEA>>7W5}#Srb3EKn7s{o!Jj}E0t;kvE((te7xT_= zuJEJ2r20+2iNC|_QFczoJHrw$#nh$I4<*=|Fm6LzRMT3#&Hjo&`?N(9R~C&r;%=jR zKF#{v*LQzi*JaMX%DQp(s0xzz?A0yNZi=wSk+$@t@(C!ppo~+eI?A+1Ft;V3enDR8 zP5#()i5MB~Px&QM){)nRBH5Z^36?;wFi1F;0!`|%z|v0n51TxSHuAPEx1aWpFd%KY zh2Z@8zdh54pV}<658CjK(W{Dbrgg-KL|r0~65vSG%XCDtJYJz?i?81X&xl)pV^!gC z*K{-_?@xKqt1}z-1S1!&V;R_#c0KcDuMZgj3a&0?EF zk1a&E(}&ae&fksh>S|oMv4x3!09^r-$x&cgVqTrwy>j1^I$jr*wWTczES*DDp3#=^ zTsc4ILWIO>-mX(rck3n z(_inUE!owg9{c;4DK)ePtM^pMsXbfHWBEg>KSqGSAIm4s;m}jJrX@9C)5d3)SmYEL zSYfdFaKhiGNvpJ2b!dPyX-Rng3%CW*4;J-+wy1n0VprwqML2KR1C+KfF*Kom5{-Kz z|AW`oV0hn>N9|0^sw^z<-m&#Z>vs_Jrmu1B*5Le*)5k#61X33XaZo=2WgQNGhGBI2 zu`MzAb=WXpipehKLiMro1St`r9FO+Uzx;N7F(JQeidPu5R{0Da;$IGdw0}sFT-hMDMQ)2vK zqpJR%9D@$m85UxP9nx`g0szyGUz69?k!Q)NmgEwm;G!u(dqgRuHB;Zr%TMfX_G)6I z_a8&k8%$pxZ$7zF)G9U1{zDy_i8+dE74gFP4(R)IotNldc{A6zb*_zcIkT-nMJlM? z?;(8V1Qepom~yl(>hXs-osu74wjbP${G(WGlaQ~fq%Eh~)7FX>`vr)PCYU4;Gl$Zp za2K+Os>40J#NhfY-lXcMcJLov<4>1wVy`GM@#JQT*T&e&mOGoDc|`UCkS29fn~fSe zqZzmc=L^H?=h!!>0QY7{vmJ5PpZZUQYZzzW`1=21@4bVXdfRqUP!tgbK{`T^A{|8O zEg}LUA|fSHqf!Hg2uKe^Q9!zM1tCiBQL3~=x-^k4p@bs6C6o{##It_q%LWr)T(p7>^)#bu%{q>_KX(JLv-i2$p zUiA70agFrwTAbYxS_^sgIFx@D(gAnqv_x^z#HQA=#M1}uf;LQDI|ShHWEs!z(T}j! z>)mMao~NKjR$=gjuPk^zwP4mH6y#JhEKaKa9avs-2|?=}D0Pm56{s#)TisG7eW6Ld ze|bEP@h3S)dd{()TeajGtL1atuNlG@b{h)^Au)u!-?h0c3i7L0Gbm>50g$+t-%@qj=xONfYT&qTEPVy_Kb z9_+pzDBWCN|7C6S&F)rr|6*m!=EG~Bb~t#tZf0<0_`o@a}%emtdjh`s|7 z;wa8AK$S`Gl)ve?8ZYCkAu$jpA@zJDyPl4RqssK|@Lyq6x*a$3iBQdzbHqdI)K;P- zwu9a;UMpvo;yhP3sg>V2Pp+T@&&NlB=&FzT zXZs_c^CL?KzaCmTxCl8Ot zOBH^oq2bD>`rpccXG)pW>JEy}$Z3ER6mGql=V8$S8<-#{|zz{`rNN84;@qAr{XYn4HtgbHkgE zBi?`k6?oB&F=?)Xd~01rw#j<~Mtqg_F0gYaDrVh^@7#g6qr`AT-W~Z2Q}{}0;*goT zn@ark0dHvEbS64=+s+pby%prNMdb`3SR8*1;X}$3ms+>@)&Sp%SF@CA3epswr!moU zzNLj|0_y!*9qV{Z?MsZY@bytz76g=`q4EBpHUeXafIt4cbUQ2$X-rC^UgooXU}F;< z9Ym*3zEO~$E!k{y%)RXhl zHsf2M9{>+ge@A?1O4x22B)YMa!r}RL`~bN>+fThHLXIHj?YH(b5`gNFY<~+P41KXP zw(4~#^Y1Yqe#?f2uRdSB!Z{MO2YowUgv(9j(VyP<_-TVf-Mb0(wb&|nckkZRR`HlJ zp)&b!yF?!BBK?PM;Z}JAJV!f>h@f(8wGh})um-^90?*j`hc2dm1e;RUH#@P#`;c}+Jb8eH>!HFQgc`TVH=0SIh!7Bry%YY`Dmc1RL5rCx8r9zL!ZB)nzA&3 zBdIEKIET5O5}!qPmueOH0dJPu$<+ zhOs7j-H7iK+T4a9?2j?>n%C;@y%%o<39Q*G2A@8Uf)dH0hryFr?r`I7hM^wsbJrCT z)dtw7auZE1cXz&gm~PU7ibl~nldilXj`q*~_%dr8WY#oVwT8Liwx7x!!e58YvWZSs zCgOY324veX*I3m@-gvW#xV}rGa!{&?=nfn)fnsDvOlv#uVoPiae~Gd6FJHCeOyBG( z=hM#G z<^NiP)CQgky_?P%yWW4ktiAU^*QMVYddd!=l1@4dVe>cWwdr$!g??3um0=mn*w8@n zBZ|+_zT{KE14vMbmH#*|e0Qx(nM<$!bGfuZlpjv{8L}Y!m&Zq*c9fub@eUw>WpRyE zVOac6>=+I027ON*HB`#T7>;~gbIYh8VexCaBiqSKZXEGfbDZndaPTtjRxIyWxu)qX zipO82jgK9Fl{lK8`d~HiePhNt*~o3Q_PWiTp~;hHU#d#|p^+tTM+BH@GvhD}m%KsBW>Hg6$jmX48n)FnM9q>eAq=e zZD^G2FAQ$~q2t`juNTX&Rm>b~E?L1JH_5_-YRgl#_{jms#Y$VTpsIp45ThHGbp*)` zpV_#mhl}fc7=F2kY0GJtAtSH$Yu2c1jrBLvkG{4po(%G_4y3SJK+$K5hrpUbLAwXz0U#e$3|}c9ynoC|)yKS(D1> z;n!1xPQ=YW%Z`%zKR(6!KRw0#U%!8>2>?K*koqLn78KW3x2b5w#=*BSkY!x z-C{k}?-^oPHlfCdU%K4l{XJHpgr7gFlO3k=_N#DacgznKKh~okn%-Yow{KxL6z#}O zB19c9(wHhq4W`(y$3=T!J_^RPexQ+;VJj3?uuhk zGHP~#k)+Lu&ug%(Xm5@vXmw>k^rb|49+${xolCz?UM0)pC&)yi$$CJ6t7Pc}C8=Fd zl=M6n6w#t>ulZ~s>NqFLNgqvsRu4IO{t7eEa4U~pZ5AV59Wci79cu>zM|xi-vWxe zo6CnwVKhZ6k+rm1yw;DV9DW;CrU_jb11$gUt=HC5OH1440^=?+4-*4eDdGiGE+b>2 z%DVK-ZKTdDAs)o1X^;!szv$lpAdXkyH^M(BHZH11A9Xp|s=jic;l{sk;c1sJyrbD~ zECj$aF>#95c+=~tyzc5zBcNqAwN-cspVr zz5%Biq}BHAAp55dY&81-+33_HB#wF+xPdmx$vJ2niq(~G>?QUZQlW~JTmqkMLUl}Y z!lm^{=UZo5PgVE7n`taG>THyFq>$NeQIfKAq!BdLcoc|@_WP-pCSJ8dvpJp$^3kr! z#-ff(0QE;s7Bk>L;FnL)Y6O!`&dJC77(q99sM0fVrs`O0{tH&dzZ1f5-PSFiOq(=1 zCrOu(Ml_+FjhMm2qtDZX-0H<&V}jvB8N@1zEGe;+(0cC#xh zqvp4>+E8@jxZUx@algT$nXw|;CPX9nm^DuV6M>qE0M{TQQEup$>g$3sgW6Y&%3%1> zoFMTxNZkUSs)^mKL$B1DN`z2#{fqds#ib9=s&ejgTA*bd4|8dIhfj^i6tnAr09@HpgnlfjgwP73h`;@ z6ks_)IubT^x~S4}w^BF}H7hw=FCKocl)fm#t7>cNA8HaSV^Mor|@L15%FH1*JOpeqj*JqH^a;S5z zB?SP&hX`IC)3xn;R=Yp+;!1L)UFhkv+PCnpE=gqjc@}Y2WsmizpNDo2paOVcQf?WE zjX4rMzmt<7JMiGnB~%>kH1akHLA^MKy6BH4lZflk6V>tOWt)01Em}g>%-k`$WXEl% z9nEj3=U+NBf39-g@Qm7(=cZbdpf9z>s3#~|M5B8Y@Ekf?nQ-pYh%l+Y4X(UovQzbD zP*tMN;o`lWg%Z9x7^^?%oy|$#Qmvhsa+#A%O>r-~%=)17iR4LZ%iV(l(kj?H@<+ZYO ziVwwaCU`%NpT^uds{wvP;Aj*fU2G?#S$$3qD{h^K89F_l85i~O&d)&vIMXGr?lasm z{aI1?*d8dqFgzF%sw9eccFo7gjG_3b_lCfJ(u!_ip;JN77Bod1-Hd)&4-kr#OwRbT z-X(7Qp=&*IZ?I!`=Us|vNxPje$@}GsoTE=Hed2sCDp_EBvB4yiP`ULQ>=LVDS49j- zI8H#!*}1K?StkY;yT?}%CO^X#d&}GXE@)e{#C1y)^e`mS3=Ni~icvmkHVs?BR@WaS ze`x5I4~fc%SlX_I$EVf+?r*TTN0TRGJ|AvBy8PCV_!m}*Wu&G^$7`We(Bd!3v%9CFp#UwOKJP7VVX z%Osb;gMH34#NDRWseG$=!~6b5&%1qg`XBo4eLhQ??ht$Io zZA>co)$VR9I6+QdqP~ngP=TymM9L6bslcXvtxEB}sm*r8N_HWG$Vlio!EvGzNcLPN z77lDe>@s}kW1cjM&-ndCr6hYCe+ZFoo<}iKWe2OaE?PAhy8CGDEo@uWJ(_k@ur(Gn zRTWuyexv961A3)0uA**9q=F}GZ{Oj}M)h&q7UB7zj`clQpUwLs*wA!x9+qs|XH&f4 z8{pTDiidJEx&xqrp49mQ=YnRY(tjbPg;t$cHsPj3cP7~7=auHQ9HbH_j^8k4@mvV) zxY^C;bJAHG1@vx0Z3%AsP@*LouPlq2OHCrZvZ^3%rnvjf38)yoGOpQS`>tHV!LsrW zJd*Ua=6?9WOH3))4R8XH|Av`xXirt&Z|jd3)xJDhwS2x5GC;6f*+0)F^g3Z9?@c#H ze6nGK$Kph6UsmNTbR9-)o$+hanZqzrH0~0ARMc~X@LLX98wELij&sg@!nN8$hwN~c zuMCj!>Qv%*l0COjzhp-flMS@)D`UrErhThY;7?}HqXBo|S(MEcHCi+#p^Pl zv`sb#Jd=K<@8K`!NqGhpwu8+Rhc>a_y+(6?*LWq_C&JhECon*|Bl+ULvJC0Jf7^dy znHW?U)eNH=0wqS;ck%;@MyE3N%-5tgU!%f=c^fdJ8(;fdcE!|G>rBFC*^;Qp@4ef( zpsU^BUI6a`h9rF^w~iyJ;v{_#HxiQ7Is)XZ(g$2@Ap~T^ zSj;?re?`!=t)e02)QOGloQYoK!{e_$fSjXH`|L1K<e3MfJZgvA~{eY_U z<%nAkc^<%c8kANNf9D~pO$*d+Jx_^fNf%AMwtRgRd~p}?hOfOeiK(v_!hIOP@JT9` zua7U~REpJ$gOGzVH=X9Z-{@&4rXA>apn?(#$Xq|3_}7nS6x|Z?F)648#roV1`e2M| zGCRe3@8>zAVmmj!WaXbL`F7ZcnNy*ixIp-%{zgyCZ^+G30Ud@5`Z@w@B%}5kKTsuW zi^)U_04_niAtK^&RUnS>2^;I4xj}hs?|wZDemgfvY{xL6j7q$rK-+9EnGk6saH2bL z)u=eC7O7z_K3p6qT$%vf;}(Tazt$LBr{R;9FnRnVA5R(4u7)n2n3}mYK$6uuT_)wj zjW;}mj+X#*OE%vF?gyF`ziHHujguBz3u6lycUqGvG>O2CRiZi_M>K+u>?tT9(_yFj zkyy4`l(o4=75j|Z(md^^UCWB*XczyrGa6infcHzmC0hJ9h@7G3P4;csq zIz4;x>~4a>#7pT6=`ml{{?PI5g5DffXML<}c|$UEsPLD?D?2&*kE^`!lUC*(v>&wn z5-h)eWtzOtc8@PLS2Lq++DUoZ z#zw*_x*?ZYcFb)CDODl=M06$xPe`ta$Kl=)qjHgm3XIr z{=8Y6wRo(ooSY^EHV2BO36iW3yN2R%?&pQ+Ij28ZBAVDECitKF2-?r4^4X6{H)Vua zCeI_N2~)>oD@y3f#bCLzrOg)TQAqSwP1 z3!)bYFE{?xYSiBI=#l?LDCPZ;EaeZKE-|a5#5GG2_j5B%A3G$UTTx%z^swi~1K014 zy-^=$wwV}TS&bAHH4g`K_T;ey6xxsZY6(VB-;lUB_DS+{&OA+NT$Lu6HP7?&KZ=j&r4%IMDX9 zwA?YfGofCwW4pUUqtu>JmN78Q74upX42UG!K~)GUXa5|$dcQqB${s|FZ?)5CT(I zA=)iPC<(yJ6~zaCPd(+9Fq7oeuw=gP=C)Y1AI;{~0nCYZJt?0V|> z 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 DqQYb^ literal 0 HcmV?d00001 diff --git a/docs/graphics/logo.pdf b/docs/graphics/logo.pdf new file mode 100755 index 0000000000000000000000000000000000000000..f531e5b946b9206105546c5dd353e5b034876d9f GIT binary patch literal 212032 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 qBk+jIU1ZY6$W@ByZ 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 H{eb@kmq4+J literal 0 HcmV?d00001 diff --git a/docs/graphics/reporter.png b/docs/graphics/reporter.png new file mode 100755 index 0000000000000000000000000000000000000000..4120464c5cda7db2615a87868a73b67a45d00777 GIT binary patch literal 19542 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

+ +The TorQ framework created by [AquaQ Analytics](http://www.aquaq.co.uk) forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from [code.kx.com](http://code.kx.com) (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems. + +The easiest way to get a production capture started is to download and install one of the [Starter Packs](https://github.com/AquaQAnalytics/TorQ-Finance-Starter-Pack) (here's a [short video](https://vimeo.com/184552498) to get going), or read the manual. We also have a [Google Group for questions/discussions](https://groups.google.com/forum/#!forum/kdbtorq). + +For recent updates to TorQ please check out our [blog](http://www.aquaq.co.uk/blog/). + +For email support contact + diff --git a/docs/utilities.md b/docs/utilities.md new file mode 100755 index 000000000..4c1754b03 --- /dev/null +++ b/docs/utilities.md @@ -0,0 +1,844 @@ + + + +Utilities +========= + +We have provided several utility scripts, which either implement +developer aids or standard operations which are useful across processes. + + + +api.q +----- + +This provides a mechanism for documenting and publishing +function/variable/table or view definitions within the kdb+ process. It +provides a search facility both by name and definition (in the case of +functions). There is also a function for returning the approximate +memory usage of each variable in the process in descending order. + +Definitions are added using the .api.add function. A variable can be +marked as public or private, and given a description, parameter list and +return type. The search functions will return all the values found which +match the pattern irrespective of them having a pre-defined definition. + +Whether a value is public or private is defined in the definitions +table. If not found then by default all values are private, except those +which live in the .q or top level namespace. + +.api.f is used to find a function, variable, table or view based on a +case-insensitive pattern search. If a symbol parameter is supplied, a +wildcard search of \*\[suppliedvalue\]\* is done. If a string is +supplied, the value is used as is, meaning other non-wildcard regex +pattern matching can be done. + +```no-highlight + + q).api.f`max + name | vartype namespace public descrip .. + --------------------| -----------------------------------------------.. + maxs | function .q 1 "" .. + mmax | function .q 1 "" .. + .clients.MAXIDLE | variable .clients 0 "" .. + .access.MAXSIZE | variable .access 0 "" .. + .cache.maxsize | variable .cache 1 "The maximum size in.. + .cache.maxindividual| variable .cache 1 "The maximum size in.. + max | primitive 1 "" .. + q).api.f"max*" + name| vartype namespace public descrip params return + ----| ------------------------------------------------ + maxs| function .q 1 "" "" "" + max | primitive 1 "" "" "" + +``` + +.api.p is the same as .api.f, but only returns public functions. .api.u +is as .api.p, but only includes user defined values i.e. it excludes q +primitives and values found in the .q, .Q, .h and .o namespaces. +.api.find is a more general version of .api.f which can be used to do +case sensitive searches. + +.api.s is used to search function definitions for specific values. + + q).api.s"*max*" + function definition .. + ---------------------------------------------------------------------.. + .Q.w "k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\".. + .clients.cleanup "{if[count w0:exec w from`.clients.clients where .. + .access.validsize "{[x;y;z] $[superuser .z.u;x;MAXSIZE>s:-22!x;x;'\.. + .servers.getservers "{[nameortype;lookups;req;autoopen;onlyone]\n r:$.. + .cache.add "{[function;id;status]\n \n res:value function;\n.. + +.api.m is used to return the approximate memory usage of variables and +views in the process, retrieved using -22!. Views will be re-evaluated +if required. Use .api.mem\[0b\] if you do not want to evaluate and +return views. + + q).api.m[] + variable size sizeMB + -------------------------------- + .tz.t 1587359 2 + .help.TXT 15409 0 + .api.detail 10678 0 + .proc.usage 3610 0 + .proc.configusage 1029 0 + .. + +.api.whereami\[lambda\] can be used to retrieve the name of a function +given its definition. This can be useful in debugging. + + q)g:{x+y} + q)f:{20 + g[x;10]} + q)f[10] + 40 + q)f[`a] + {x+y} + `type + + + `a + 10 + q)).api.whereami[.z.s] + `..g + + + +timer.q +------- + +kdb+ provides a single timer function, .z.ts which is triggered with the +frequency specified by -t. We have provided an extension to allow +multiple functions to be added to the timer and fired when required. The +basic concept is that timer functions are registered in a table, with +.z.ts periodically checking the table and running whichever functions +are required. This is not a suitable mechanism where very high frequency +timers are required (e.g. sub 500ms). + +There are two ways a function can be added to a timer- either as a +repeating timer, or to fire at a specific time. When a repeating timer +is specified, there are three options as to how the timer can be +rescheduled. Assuming that a timer function with period P is scheduled +to fire at time T0, actually fires at time T1 and finishes at time T2, +then + +- mode 0 will reschedule for T0+P; + +- mode 1 will reschedule for T1+P; + +- mode 2 will reschedule for T2+P. + +Both mode 0 and mode 1 have the potential for causing the timer to back +up if the finish time T2 is after the next schedule time. See +.api.p“.timer.\*”for more details. + + + +async.q +------- + +kdb+ processes can communicate with each using either synchronous or +asynchronous calls. Synchronous calls expect a response and so the +server must process the request when it is received to generate the +result and return it to the waiting client. Asynchronous calls do not +expect a response so allow for greater flexibility. The effect of +synchronous calls can be replicated with asynchronous calls in one of +two ways (further details in section gateway): + +- deferred synchronous: the client sends an async request, then blocks + on the handle waiting for the result. This allows the server more + flexibility as to how and when the query is processed; + +- asynchronous postback: the client sends an async request which is + wrapped in a function to be posted back to the client when the + result is ready. This allows the server flexibility as to how and + when the query is processed, and allows the client to continue + processing while the server is generating the result. + +The code for both of these can get a little tricky, largely due to the +amount of error trapping required. We have provided two functions to +allow these methods to be used more easily. .async.deferred takes a list +of handles and a query, and will return a two item list of +(success;results). + + q).async.deferred[3 5;({system"sleep 1";system"p"};())] + 1 1 + 9995 9996 + q).async.deferred[3 5;({x+y};1;2)] + 1 1 + 3 3 + q).async.deferred[3 5;({x+y};1;`a)] + 0 0 + "error: server fail:type" "error: server fail:type" + q).async.deferred[3 5 87;({system"sleep 1";system"p"};())] + 1 1 0 + 9995i 9996i "error: comm fail: failed to send query" + +.async.postback takes a list of handles, a query, and the name or lambda +of the postback function to return the result to. It will immediately +return a success vector, and the results will be posted back to the +client when ready. + + q).async.postback[3 5;({system"sleep 1";system"p"};());`showresult] + 11b + q) + q)9995i + 9996i + + q).async.postback[3 5;({x+y};1;2);`showresult] + 11b + q)3 + 3 + + q).async.postback[3 5;({x+y};1;`a);`showresult] + 11b + q)"error: server fail:type" + "error: server fail:type" + + q).async.postback[3 5;({x+y};1;`a);showresult] + 11b + q)"error: server fail:type" + "error: server fail:type" + + q).async.postback[3 5 87;({x+y};1;2);showresult] + 110b + q)3 + 3 + +For more details, see .api.p“.async.\*”. + + + +cache.q +------- + +cache.q provides a mechanism for storing function results in a cache and +returning them from the cache if they are available and non stale. This +can greatly boost performance for frequently run queries. + +The result set cache resides in memory and as such takes up space. It is +up to the programmer to determine which functions are suitable for +caching. Likely candidates are those where some or all of the following +conditions hold: + +- the function is run multiple times with the same parameters (perhaps + different clients all want the same result set); + +- the result set changes infrequently or the clients can accept + slightly out-of-date values; + +- the result set is not too large and/or is relatively expensive to + produce. For example, it does not make sense to cache raw data + extracts. + +The cache has a maximum size and a minimum size for any individual +result set, both of which are defined in the configuration file. Size +checks are done with -22! which will give an approximation (but +underestimate) of the result set size. In the worst case the estimate +could be half the size of the actual size. + +If a new result set is to be cached, the size is checked. Assuming it +does not exceed the maximum individual size then it is placed in the +cache. If the new cache size would exceed the maximum allowed space, +other result sets are evicted from the cache. The current eviction +policy is to remove the least recently accessed result sets until the +required space is freed. The cache performance is tracked in a table. +Cache adds, hits, fails, reruns and evictions are monitored. + +The main function to use the cache is .cache.execute\[function; +staletime\]. If the function has been executed within the last +staletime, then the result is returned from the cache. Otherwise the +function is executed and placed in the cache. + +The function is run and the result placed in the cache: + + q)\t r:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01] + 2023 + q)r + 3 + +The second time round, the result set is returned immediately from the +cache as we are within the staletime value: + + q)\t r1:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01] + 0 + q)r1 + 3 + +If the time since the last execution is greater than the required stale +time, the function is re-run, the cached result is updated, and the +result returned: + + q)\t r2:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:00] + 2008 + q)r2 + 3 + +The cache performance is tracked: + + q).cache.getperf[] + time id status function + ------------------------------------------------------------------ + 2013.11.06D12:41:53.103508000 2 add {system"sleep 2"; x+y} 1 2 + 2013.11.06D12:42:01.647731000 2 hit {system"sleep 2"; x+y} 1 2 + 2013.11.06D12:42:53.930404000 2 rerun {system"sleep 2"; x+y} 1 2 + +See .api.p.cache.\*for more details. + + + +email.q +------- + +A library file is provided to allow TorQ processes to send emails using +an SMTP server. This is a wrapper around the standard libcurl library. +The library file is currently available for Windows (32 bit), Linux (32 +and 64 bit) and OSX (32 and 64 bit). The associated q script contains +two main methods for creating a connection and sending emails. The email +library requires a modification to the path to find the required libs - +see the top of email.q for details. + +The main connection method .email.connect takes a single dictionary +parameter and returns 0i for success and -1i for failure. + +| Parameter | Req | Type | Description | +| :-------: | :--: | :-----: | :--------------------------------------: | +| url | Y | symbol | URL of mail server e.g. smtp://mail.example.com | +| user | Y | symbol | Username of user to login as | +| password | Y | symbol | Password for user | +| usessl | N | boolean | Connect using SSL/TLS, defaults to false | +| from | N | symbol | Email from field, defaults to torq@aquaq.co.uk | +| debug | N | integer | Debug level. 0=no output, 1=normal output, 2=verbose output. Default is 1 | + + +An example is: + + q).email.connect[`url`user`password`from`usessl`debug!(`$"smtp://mail.example.com:80";`$"torquser@aquaq.co.uk";`hello;`$"torquser@aquaq.co.uk";0b;1i)] + 02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80 + 02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk + 02 Jan 2015 11:45:19 emailConnect: password is set + 02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk + 02 Jan 2015 11:45:19 emailConnect: trying to connect + 02 Jan 2015 11:45:19 emailConnect: connected, socket is 5 + 0i + +The email sending function .email.send takes a single dictionary +parameter containing the details of the email to send. A connection must +be established before an email can be sent. The send function returns an +integer of the email length on success, or -1 on failure. + + +| Parameter | Req | Type | Description | +| :-------: | :--: | :----------------: | :--------------------------------------: | +| to | Y | symbol (list) | addresses to send to | +| subject | Y | char list | email subject | +| body | Y | list of char lists | email body | +| cc | N | symbol (list) | cc list | +| bodyType | N | symbol | type of email body. Can be \`text or \`html. Default is \`text | +| debug | N | integer | Debug level. 0=no output, 1=normal output,2=verbose output. Default is 1 | + +An example is: + + q).email.send[`to`subject`body`debug!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq");1i)] + 02 Jan 2015 12:39:29 sending email with subject: test email + 02 Jan 2015 12:39:29 email size in bytes is 16682 + 02 Jan 2015 12:39:30 emailSend: email sent + 16682i + +Note that if emails are sent infrequently the library must re-establish +the connection to the mail server (this will be done automatically after +the initial connection). In some circumstances it may be better to batch +emails together to send, or to offload email sending to separate +processes as communication with the SMTP server can take a little time. + +Two further functions are available, .email.connectdefault and +.email.senddefault. These are as above but will use the default +configuration defined within the configuration files as the relevant +parameters passed to the methods. In addition, .email.senddefault will +automatically establish a connection. + + q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq"))] + 2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email + 2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful + 2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent + 16673i + q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq"))] + 2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email + 2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent + 16675i + q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq");`"$/home/ashortt/example.txt")] + 2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email + 2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent + 47338i + +.email.test will attempt to establish a connection to the default +configured email server and send a test email to the specified address. +debug should be set to 2i (verbose) to extract the full information. + + q).email.debug:2i + q).email.test `$"test@aquaq.co.uk" + ... + +Additionally functions are available within the email library. See +.api.p.email.\*for more details. + +### Emails with SSL certificates from Windows + +If you wish to send emails via an account which requires authentication +from Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps +as usessl must be true and Windows does not usually find the correct +certificate. The steps are: + +- download + [this](https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt) + and save it to your PC + +- set + + CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt + +More information is available +[here](http://richardwarrender.com/2007/05/the-secret-to-curl-in-php-on-windows/) +and [here](http://curl.haxx.se/docs/caextract.html) + + + +timezone.q +---------- + +A slightly customised version of the timezone conversion functionality +from code.kx. It loads a table of timezone information from +$KDBCONFIG. See .api.p.tz.\*for more details. + + + +compress.q +---------- + +compress.q applies compression to any kdb+ database, handles all +partition types including date, month, year, int, and can deal with top +level splayed tables. It will also decompress files as required. Once +the compression/decompression is complete, summary statistics are +returned, with detailed statistics for each compressed or decompressed +file held in a table. + +The utility is driven by the configuration specified within a csv file. +Default parameters can be given, and these can be used to compress all +files within the database. However, the compress.q utility also provides +the flexibility to compress different tables with different compression +parameters, and different columns within tables using different +parameters. A function is provided which will return a table showing +each file in the database to be compressed, and how, before the +compression is performed. + +Compression is performed using the -19! operator, which takes 3 +parameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2 +- gzip), the compression blocksize as a power of 2 (between 12 and 19), + and the level of compression to apply (from 0 - 9, applicable only for + gzip). (For further information on -19! and the parameters used, see + code.kx.com.) + +The compressionconfig.csv file should have the following format: + + table,minage,column,calgo,cblocksize,clevel + default,20,default,2,17,6 + trades,20,default,1,17,0 + quotes,20,asize,2,17,7 + quotes,20,bsize,2,17,7 + +This file can be placed in the config folder, or a path to the file +given at run time. + +The compression utility compresses all tables and columns present in the +HDB but not specified in the driver file according the default +parameters. In effect, to compress an entire HDB using the same +compression parameters, a single row with name default would suffice. To +specify that a particular table should be compressed in a certain +different manner, it should be listed in the table. If default is given +as the column for this table, then all of the columns of that table will +be compressed accordingly. To specify the compression parameters for +particular columns, these should be listed individually. For example, +the file above will compress trades tables 20 days old or more with an +algorithm of 1, and a blocksize of 17. The asize and bsize columns of +any quotes tables older than 20 days old will be compressed using +algorithm 2, blocksize 17 and level 7. All other files present will be +compressed according to the default, using an algorithm 2, blocksize 17 +and compression level 6. To leave files uncompressed, you must specify +them explicitly in the table with a calgo of 0. If the file is already +compressed, note that an algorithm of 0 will decompress the file. + +This utility should be used with caution. Before running the compression +it is recommended to run the function .cmp.showcomp, which takes three +parameters - the path to the database, the path to the csv file, and the +maximum age of the files to be compressed: + + .cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] + /- for using the csv file in the config folder + .cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] + /- to specify a file + +This function produces a table of the files to be compressed, the +parameters with which they will be compressed, and the current size of +the file. Note that the current size column is calculated using hcount; +on a file which is already compressed this returns the uncompressed +length, i.e. this cannot be used as a signal as to whether the file is +compressed already. + + fullpath column table partition age calgo cblocksize clevel compressage currentsize + ------------------------------------------------------------------------------------- + :/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960 + :/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960 + :/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960 + :/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904 + .... + +To then run the compression function, use .cmp.compressmaxage with the +same parameters as .cmp.showcomp (hdb path, csv path, maximum age of +files): + + .cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] + /- for using the csv file in the config folder + .cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] + /- to specify a file + +To run compression on all files in the database disregarding the maximum +age of the files (i.e. from minage as specified in the configuration +file to infinitely old), then use: + + .cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] + /- for using the csv file in the config folder + .cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] + /- to specify a file + +Logs are produced for each file which is compressed or decompressed. +Once the utility is complete, the statistics of the compression are also +logged. This includes the memory savings in MB from compression, the +additional memory usage in MB for decompression, the total compression +ratio, and the total decompression ratio: + + |comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51. + |comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: . + |comp1|INF|compression|Check .cmp.statstab for info on each file. + +A table with the compressed and decompressed length for each individual +file, in descending order of compression ratio, is also produced. This +can be found in .cmp.statstab: + + file algo compressedLength uncompressedLength compressionratio + ----------------------------------------------------------------------------------- + :/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343 + :/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073 + :/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464 + :/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643 + :/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759 + ..... + +A note for windows users - windows supports compression only with a +compression blocksize of 16 or more. + + + +dataloader.q +------------ + +This script contains some utility functions to assist in loading data +from delimited files (e.g. comma separated, tab delimited). It is a more +generic version of [the data loader example on +code.kx](http://code.kx.com/wiki/Cookbook/LoadingFromLargeFiles). +The supplied functions allow data to be read in configurable size chunks +and written out to the database. When all the data is written, the +on-disk data is re-sorted and the attributes are applied. The main +function is .loader.loadalldata which takes two parameters- a dictionary +of loading parameters and a directory containing the files to read. The +dictionary should/can have the following fields: + + +| Parameter | Req | Type | Description | +| :-------------: | :--: | :----------: | :--------------------------------------: | +| headers | Y | symbol list | Names of the header columns in the file | +| types | Y | char list | Data types to read from the file | +| separator | Y | char\[list\] | Delimiting character. Enlist it if first line of file is header data | +| tablename | Y | symbol | Name of table to write data to | +| dbdir | Y | symbol | Directory to write data to | +| partitiontype | N | symbol | Partitioning to use. Must be one of +\`date\`month\`year\`int. Default is \`date | +| partitioncol | N | symbol | Column to use to extract partition information.Default is `time | +| dataprocessfunc | N | function | Diadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y} | +| chunksize | N | int | Data size in bytes to read in one chunk. Default is 100 MB | +| compression | N | int list | Compression parameters to use e.g. 17 2 6. Default is empty list for no compression | +| gc | N | boolean | Whether to run garbage collection at appropriate points. Default is 0b (false) | + +Example usage: + + .loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;"SP FI";",";`trade;`:hdb); `:TDC/toload] + .loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;"SP FI";enlist",";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload] + + + +subscriptions.q +--------------- + +The subscription utilities allow multiple subscriptions to different +data sources to be managed and maintained. Automatic resubscriptions in +the event of failure are possible, along as specifying whether the +process will get the schema and replay the log file from the remote +source (e.g. in the case of tickerplant subscriptions). + +.sub.getsubscriptionhandles is used to get a table of processes to +subscribe to. The following can be used to return a table of all +connected processes of type tickerplant: + + .sub.getsubscriptionhandles[`tickerplant;`;()!()] + +.sub.subscribe is used to subscribe to a process for the supplied list +of tables and instruments. For example, to subscribe to instruments A, B +and C for the quote table from all tickerplants: + + .sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] + +The subscription method uses backtick for “all” (which is the same as +kdb+tick). To subscribe to all tables, all instruments, from all +tickerplants: + + .sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] + +See .api.p“.sub.\*” for more details. + + + +pubsub.q +-------- + +pubsub.q is essentially a placeholder script to allow publish and +subscribe functionality to be implemented. Licenced kdb+tick users can +use the publish and subscribe functionality implemented in u.\[k|q\]. If +u.\[k|q\] is placed in the common code directory and loaded before +pubsub.q (make sure u.\[k|q\] is listed before pubsub.q in order.txt) +then publish and subscribe will be implemented. You can also build out +this file to add your own publish and subscribe routines as required. + + + +tplogutils.q +------------ + +tplogutils.q contains functions for recovering tickerplant log files. +Under certain circumstances the tickerplant log file can become corrupt +by having an invalid sequence of bytes written to it. A log file can be +recovered using a simple recovery method. However, this will only +recover messages up to the first invalid message. The recovery functions +defined in tplogutils.q allow all valid messages to be recovered from +the tickerplant log file. + + + +monitoringchecks.q +------------------ + +monitoringchecks.q implements a set of standard, basic monitoring +checks. They include checks to ensure: + +- table sizes are increasing during live capture + +- the HDB data saves down correctly + +- the allocated memory of a process does not increase past a certain + size + +- the size of the symbol list in memory doesn’t grow to big + +- the process does not have too much on its pending subscriber queue + +These checks are intended to be run by the reporter process on a +schedule, and any alerts emailed to an appropriate recipient list. + + + +heartbeat.q +----------- + +heartbeat.q implements heartbeating, and relies on both timer.q and +pubsub.q. A table called heartbeat will be published periodically, +allowing downstream processes to detect the availability of upstream +components. The heartbeat table contains a heartbeat time and counter. +The heartbeat script contains functions to handle and process heartbeats +and manage upstream process failures. See .api.p.hb.\*for details. + + + +dbwriteutils.q +-------------- + +This contains a set of utility functions for writing data to historic +databases. + +### Sorting and Attributes + +The sort utilities allow the sort order and attributes of tables to be +globally defined. This helps to manage the code base when the data can +potentially be written from multiple locations (e.g. written from the +RDB, loaded from flat file, replayed from the tickerplant log). The +configuration is defined in a csv which defaults to $KDBCONFG/sort.csv. +The default setup is that every table is sorted by sym and time, with a +p attribute on sym (this is the standard kdb+ tick configuration). + + aquaq$ tail config/sort.csv + tabname,att,column,sort + default,p,sym,1 + default,,time,1 + +As an example, assume we have an optiontrade table which we want to be +different from the standard set up. We would like the table to be sorted +by optionticker and then time, with a p attribute on optionticker. We +also have a column called underlyingticker which we can put an attribute +on as it is derived from optionticker (so there is an element of +de-normalisation present in the table). We also have an exchange field +which we would like to put a g attribute on. All other tables we want to +be sorted and parted in the standard way. The configuration file would +look like this (sort order is derived from the order within the file +combined with the sort flag being set to true): + + aquaq$ tail config/sort.csv + tabname,att,column,sort + default,p,sym,1 + default,,time,1 + optiontrade,p,optionticker,1 + optiontrade,,exchtime,1 + optiontrade,p,underlyingticker,0 + optiontrade,g,exchange,0 + +To invoke the sort utilities, supply a list of (tablename; partitions) +e.g. + + q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade) + 2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table + 2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters + 2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time + 2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/ + 2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time + 2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/ + 2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table + +A different sort configuration file can be loaded with + + .sort.getsortcsv[`:file] + +### Garbage Collection + +The garbage collection utility prints some debug information before and +after the garbage collection. + + q).gc.run[] + 2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB + 2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB + +### Table Manipulation + +The table manipulation utilities allow table manipulation routines to be +defined in a single place. This is useful when data can be written from +mutliple different processes e.g. RDB, WDB, or tickerplant log replay. +Instead of having to create a separate definition of customised +manipulation in each process, it can be done in a single location and +invokved in each process. + + + +help.q +------ + +The standard help.q from code.kx provides help utilities in the console. +This should be kept up to date with +[[code.kx](http://code.kx.com/wsvn/code/kx/kdb+/d/help.q)]. + + q)help` + adverb | adverbs/operators + attributes| data attributes + cmdline | command line parameters + data | data types + define | assign, define, control and debug + dotz | .z locale contents + errors | error messages + save | save/load tables + syscmd | system commands + temporal | temporal - date & time casts + verbs | verbs/functions + + + +html.q +------ + +An HTML utility has been added to accompany the HTML5 front end for the +Monitoring process. It includes functions to format dates, tables to csv +to configure the HTML file to work on the correct process. It is +accessible from the `.html` namespace. + + + +Additional Utilities +-------------------- + +There are some additional user contributed utility scripts available on +code.kx which are good candidates for inclusion. These could either be +dropped into the common code directory, or if not globally applicable +then in the code directory for either the process type or name. The full +set of user contributed code is documented +[here](http://code.kx.com/wiki/Contrib). + + + +Full API +-------- + +The full public api can be found by running + + q).api.u` + name | vartype namespace public descrip .. + -----------------| --------------------------------------------------.. + .proc.createlog | function .proc 1 "Create the standard out.. + .proc.rolllogauto| function .proc 1 "Roll the standard out/e.. + .proc.loadf | function .proc 1 "Load the specified file.. + .proc.loaddir | function .proc 1 "Load all the .q and .k .. + .lg.o | function .lg 1 "Log to standard out" .. + .. + +Combined with the commented configuration file, this should give a good +overview of the functionality available. A description of the individual +namespaces is below- run .api.u namespace\*to list the functions. + +| Namespace | Description | +| :-------: | :------------------------------------: | +| .proc | Process API | +| .lg | Standard out/error logging API | +| .err | Error throwing API | +| .usage | Usage logging API | +| .access | Permissions API | +| .clients | Client tracking API | +| .servers | Server tracking API | +| .async | Async communication API | +| .timer | Timer API | +| .cache | Caching API | +| .tz | Timezone conversions API | +| .checks | Monitoring API | +| .cmp | Compression API | +| .ps | Publish and Subscribe API | +| .hb | Heartbeating API | +| .loader | Data Loader API | +| .sort | Data sorting and attribute setting API | +| .sub | Subscription API | +| .gc | Garbage Collection API | +| .tplog | Tickerplant Log Replay API | +| .api | API management API | + + + + +Modified u.q +------------ + +Starting in kdb+ v3.4, the new broadcast feature has some performance +benefits. It works by serialising a message once before sending it +asynchronously to a list of subscribers whereas the previous method +would serialise it separately for each subscriber. To take advantage of +this, we’ve modified u.q. This can be turned off by setting .u.broadcast +to false. It is enabled by default, but will only override default +publishing if the kdb+ version being used is 3.4 or after. diff --git a/docs/visualisation.md b/docs/visualisation.md new file mode 100755 index 000000000..c188ff1e9 --- /dev/null +++ b/docs/visualisation.md @@ -0,0 +1,193 @@ + +Visualisation +============= + +kdb+ supports websockets and so HTML5 GUIs can be built. We have +incorporated a set of server side and client side utilities to ease HTML +GUI development. + + + +kdb+ Utilities +-------------- + +The server side utilities are contained in html.q. These utilise some +community code, specifically json.k and a modified version of u.q, both +from Kx Systems. The supplied functionality includes: + +- json.k provides two way conversion between kdb+ data structures and + JSON; + +- u.q is the standard pub/sub functionality provided with kdb+tick, + and a modified version is incorporated to publish data structures + which can be easily interpreted in JavaScript; + +- functions for reformatting temporal types to be JSON compliant; + +- page serving to utilise the inbuilt kdb+ webserver to serve custom + web pages. An example would be instead of having to serve a page + with a hardcoded websocket connection host and port, the kdb+ + process can serve a page connecting back to itself no matter which + host or port it is running on. + + + +JavaScript Utilities +-------------------- + +The JavaScript utilities are contained in kdbconnect.js. The library +allows you to: + +- create a connection to the kdb+ process; + +- display the socket status; + +- sending queries; + +- binding results returned from kdb+ to updates in the webpage. + + + +Outline +------- + +All communication between websockets and kdb+ is asynchronous. The +approach we have adopted is to ensure that all data sent to the web +browser is encoded as a JSON object containing a tag to enable the web +page to decipher what the data relates to. The format we have chosen is +for kdb+ to send dictionaries of the form: + + `name`data!("dataID";dataObject) + +All the packing can be done by .html.dataformat. Please note that the +temporal types are converted to longs which can easily be converted to +JavaScript Date types. This formatting can be modified in the formating +dictionary .html.typemap. + + q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a) + q).html.dataformat["start";(enlist `tradegraph)!enlist a] + name| "start" + data| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a) + q)first (.html.dataformat["start";(enlist `tradegraph)!enlist a])[`data;`tradegraph] + minute | 32400000 + time | 32400000 + date | 1396828800000 + month | 1396310400000 + timestamp| "2014-04-07T13:23:01Z" + timespan | 48181023 + datetime | "2014-04-07T13:23:01Z" + float | 20f + sym | `a + +We have also extended this structure to allow web pages to receive data +in a way similar to the standard kdb+tick pub/sub format. In this case, +the data object looks like: + + `name`data!("upd";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14))) + +This can be packed with .html.updformat: + + q).html.updformat["upd";`tablename`tabledata!(`trade;a)] + name| "upd" + data| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a)) + q)first(.html.updformat["upd";`tablename`tabledata!(`trade;a)])[`data;`tabledata] + minute | 32400000 + time | 32400000 + date | 1396828800000 + month | 1396310400000 + timestamp| "2014-04-07T13:23:01Z" + timespan | 48181023 + datetime | "2014-04-07T13:23:01Z" + float | 20f + sym | `a + +To utilise the pub/sub functionality, the web page must connect to the +kdb+ process and subscribe for updates. Subscriptions are done using + + .html.wssub[`tablename] + +Publications from the kdb+ side are done with + + .html.pub[`tablename;tabledata] + +On the JavaScript side the incoming messages (data events) must be bound +to page updates. For example, there might be an initialisation event +called “start” which allows the web page to retrieve all the initial +data from the process. The code below redraws the areas of the page with +the received data. + + /* Bind data - Data type "start" will execute the callback function */ + KDBCONNECT.bind("data","start",function(data){ + // Check that data is not empty + if(data.hbtable.length !== 0) + // Write HTML table to div element with id heartbeat-table + { $("#heartbeat-table").html(MONITOR.jsonTable(data.hbtable));} + if(data.lmtable.length !== 0) + // Write HTML table to div element with id logmsg-table + { $("#logmsg-table").html(MONITOR.jsonTable(data.lmtable));} + if(data.lmchart.length !== 0) + // Log message error chart + { MONITOR.barChart(data.lmchart,"logmsg-chart","Error Count","myTab"); } + }); + +Similarly the upd messages must be bound to page updates. In this case, +the structure is slightly different: + + KDBCONNECT.bind("data","upd",function(data){ + if(data.tabledata.length===0) return; + if(data.tablename === "heartbeat") + { $("#heartbeat-table").html(MONITOR.jsonTable(data.tabledata));} + if(data.tablename === "logmsg") + { $("#logmsg-table").html(MONITOR.jsonTable(data.tabledata));} + if(data.tablename === "lmchart") + { MONITOR.barChart(data.tabledata,"logmsg-chart","Error Count","myTab"); } + }); + +To display the WebSocket connection status the event “ws\_event” must be +bound and it will output one of these default messages: “Connecting...”, +“Connected” and “Disconnected” depending on the connection state of the +WebSocket. Alternatively the value of the readyState attribute will +determine the WebSocket status. + + // Select html element using jQuery + var $statusMsg = $("#status-msg"); + KDBCONNECT.bind("ws_event",function(data){ + // Data is the default message string + $statusMsg.html(data); + }); + KDBCONNECT.core.websocket.readyState // Returns 1 if connected. + +Errors can be displayed by binding the event called “error”. + + KDBCONNECT.bind("error",function(data){ + $statusMsg.html("Error - " + data); + }); + + + +Example +------- + +A basic example is provided with the Monitor process. To get this to +work, u.q from kdb+tick should be placed in the code/common directory to +allow all processes to publish updates. It should be noted that this is +not intended as a production monitoring visualisation screen, moreso a +demonstration of functionality. See section monitorgui for more +details. + + + +Further Work +------------ + +Further work planned includes: + +- allow subscriptions on a key basis- currently all subscribers + receive all updates; + +- add JavaScript controls to allow in-place updates based on key + pairs, and scrolling window updates e.g. add N new rows to + top/bottom of the specified table; + +- allow multiple websocket connections to be maintained at the same + time. diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100755 index 000000000..4a3d8797e --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,24 @@ +site_name: TorQ +site_favicon: graphics/favicon.ico +pages: + - Home: index.md + - About: Overview.md + - Getting Started: gettingstarted.md + - Utilities: utilities.md + - Handlers: handlers.md + - Connection Management: conn.md + - Processes: Processes.md + - Visualisation: visualisation.md +copyright: 'Copyright © 2016 AquaQ Analytics Limited. Kx ® and kdb+ are registered trademarks of Kx Systems Inc.' + +theme: 'material' +repo_name: 'GitHub' +repo_url: 'https://github.com/AquaQAnalytics/TorQ' +extra: + logo: 'graphics/TorQ-logo.png' + palette: + primary: 'indigo' + accent: 'teal' + author: + github: 'AquaQAnalytics' + twitter: 'AquaQAnalytics' diff --git a/site/Overview/index.html b/site/Overview/index.html new file mode 100644 index 000000000..8a1482ef9 --- /dev/null +++ b/site/Overview/index.html @@ -0,0 +1,828 @@ + + + + + + + + + + + + About - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

Overview

+

+

What is kdb+?

+

kdb+ is the market leading timeseries database from Kx Systems. kdb+ +is used predominently in the Financial Services sector to capture, +process and analyse billions of records on a daily basis, with Kx +counting almost all of the top tier investment banks as customers. kdb+ +incorporates a programming language, q, which is known for its +performance and expressive power. Given the unsurpassed data management +and analytical capabilities of kdb+, the applicability of kdb+ +technology extends beyond the financial domain into any sector where +rapid pre-built or adhoc analysis of large datasets is required. Other +sectors which have good use cases for kdb+ include utilities, +pharmaceuticals, telecoms, manufacturing, retail and any sector +utilising telemetry or sensor data.

+

+

What is AquaQ TorQ?

+

AquaQ TorQ is a framework which forms the basis of a production kdb+ +system by implementing some core functionality and utilities on top of +kdb+, allowing developers to concentrate on the application business +logic. We have incorporated as many best practices as possible, with +particular focus on performance, process management, diagnostic +information, maintainability and extensibility. We have kept the code as +readable as possible using descriptive comments, error messages, +function names and variable names. Wherever possible, we have tried to +avoid re-inventing the wheel and instead have used contributed code from +code.kx.com (either directly or modified). All code sections taken from +code.kx.com are referenced in this document.

+

AquaQ TorQ can be extended or modified as required. We have chosen some +default behaviour, but it can all be overridden. The features of AquaQ +TorQ are:

+
    +
  • +

    Process Management: Each process is given a type and name. By + default these are used to determine the code base it loads, the + configuration loaded, log file naming and how it reports itself to + discovery services. Whenever possible we have tried to ensure that + all default behaviour can be overridden at the process type level, + and further at the process name level.

    +
  • +
  • +

    Code Management: Processes can optionally load common or process + type/name specific code bases. All code loading is error trapped.

    +
  • +
  • +

    Configuration Management: Configuration scripts can be loaded as + standard and with specific process type/name configuration + overriding default values. Configuration scripts are loaded in a + specific order; default, then process type specific, then process + name specific. Values loaded last will override values loaded + previously.

    +
  • +
  • +

    Usage Logging: All process usage is logged to a single text log file + and periodically rolled. Logging includes opening/closing of + connections, synchronous and asynchronous queries and functions + executed on the timer. Logged values include the request, the + details of where it came from, the time it was received, the time it + took, memory usage before and after, the size of the result set, the + status and any error message.

    +
  • +
  • +

    Incoming and Outgoing Connection Management: Incoming (client) and + outgoing (server) connections are stored and their usage monitored + through query counts and total data size counts. Connections are + stored and retrieved and can be set to automatically be re-opened as + required. The password used for outgoing connections can be + overridden at default, process type and process name level.

    +
  • +
  • +

    Access Controls: Basic access controls are provided, and could be + extended. These apply restrictions on the IP addresses of remote + connections, the users who can access the process, and the functions + that each user can execute. A similar hierarchical approach is used + for access control management as for configuration management.

    +
  • +
  • +

    Timer Extensions: Mechanism to allow multiple functions to be added + to the timer either on a repeating or one-off basis. Multiple + re-scheduling algorithms supplied for repeating timers.

    +
  • +
  • +

    Standard Out/Error Logging: Functions to print formatted messages to + standard out and error. Hooks are provided to extend these as + required, e.g. publication to centralised logging database. Standard + out and error are redirected to appropriately named, timestamped and + aliased log files, which are periodically rolled.

    +
  • +
  • +

    Error Handling: Different failure options are supplied in case code + fails to load; either exit upon failure, stop at the point of + failure or trap and continue.

    +
  • +
  • +

    Visualisation: Utilities to ease GUI development using websockets + and HTML5.

    +
  • +
  • +

    Documentation and Development Tools: Functionality to document the + system is built into AquaQ TorQ, and can be accessed directly from + every q session. Developers can extend the documentation as they add + new functions. Functionality for searching for functions and + variables by name and definition is provided, and for ordering + variables by memory usage. The standard help.q from code.kx is also + included.

    +
  • +
  • +

    Utilities: We intend to build out and add utilities as we find them + to be suitably useful and generic. So far we have:

    +
      +
    1. +

      Caching: allows a result set cache to be declared and result + sets to be stored and retrieved from the cache. Suitable for + functions which may be run multiple times with the same + parameters, with the underlying data not changing in a short + time frame;

      +
    2. +
    3. +

      Timezone Handling: derived from code.kx, allows conversion + between timestamps in different timezones;

      +
    4. +
    5. +

      Email: an library to send emails;

      +
    6. +
    7. +

      Async Messaging: allows easy use of advanced async messaging + methods such as deferred synchronous communication and async + communication using postback functions;

      +
    8. +
    9. +

      Heartbeating: each process can be set to publish heartbeats, and + subscribe to and manage heartbeats from other processes in the + environment;

      +
    10. +
    11. +

      Data Loading: utility wrapper around .Q.fsn to read a data file + from disk, manipulate it and write it out in chunks;

      +
    12. +
    13. +

      Subscriptions: allow processes to dynamically detect and + subscribe to datasources;

      +
    14. +
    15. +

      Tickerplant Log File Recovery: recover as many messages as + possible from corrupt log files;

      +
    16. +
    17. +

      Database Writing: utility functions for writing to, sorting and + parting on disk databases;

      +
    18. +
    19. +

      Compression: allows compression of a database. This can be + performed using a set of parameters for the entire database, but + also gives the flexibilty of compressing user-specified tables + and/or columns of those tables with different parameters if + required, and also offers decompression.

      +
    20. +
    +
  • +
+

AquaQ TorQ will wrap easily around kdb+tick and therefore around any +tickerplant, RDB, HDB or real time processing application. We currently +have several customised processes of our own:

+
    +
  • +

    Discovery Service: Every process has a type, name and set of + available attributes, which are used by other processes to connect + to it. The Discovery Service is a central point that can be used to + find other available processes. Client processes can subscribe to + updates from the discovery service as new processes become + available- the discovery service will notify its subscribers, which + can then use the supplied hook to implement required behavior e.g. + connect to the newly available process;

    +
  • +
  • +

    Gateway: A fully synchronous and asynchronous gateway is provided.

    +

    The gateway will connect to a defined list of process types (can be +homogenous or heterogeneous processes) and will route queries across +them according to the priority of received requests. The routing +algorithms can be easily modified e.g. give priority to user X, or +only route queries to processes which exist in the same data centre +or geographical region to avoid the WAN (this would entail using the +process attributes). The gateway can either return the result to the +client back down the same handle, or it can wrap it in a callback +function to be invoked on the client;

    +
  • +
  • +

    Real Time Database (RDB): A customized version of the kdb+tick RDB, + to allow dynamic tickerplant subscriptions, reloading of multiple + HDBs using authenticated connections, and customized end-of-day save + downs. The RDB, WDB and tickerplant log replay share a common code + base to ensure that a save-down modification to a table is applied + across each of these processes.

    +
  • +
  • +

    Write Database (WDB): The job of a WDB is to write data to disk + rather than to serve client queries. WDBs usually write data out + periodically throughout the day, and are useful when there is too + much data to fit into memory and/or the end of day save operation + needs to be speeded up. The concept is based on + w.q

    +
  • +
  • +

    Tickerplant Log Replay: A process for replaying tickerplant log + files to create on-disk data sets. Extended features are provided + for only replaying subsets of log files (by message number and/or + table name), replaying in chunks, invoking bespoke final behaviour + etc.;

    +
  • +
  • +

    Reporter: The Reporter Process runs defined reports (q queries or + parameterized functions) against specific database or gateways on a + schedule. The results are retrieved and processed. Processing can be + user defined, or can be a standard operation such as writing the + data to disk, or emailing the results to a list of recipients. This + can be useful for running system checks or generating management + reports.

    +
  • +
  • +

    Housekeeping: A process to undertake housekeeping tasks + periodically, such as compressing and removing files that are no + longer used. Housekeeping looks up a file of instructions and + performs maintenance tasks on directories accordingly. Features + allow selective file deletion and zipping according to file age, + including a search string parameter and the ability to exclude items + from the search. The process can be scheduled, or run immediately + from the command line and can be extended as required to incorporate + more tasks.

    +
  • +
  • +

    File Alerter: A process to periodically scan a set of directories + and execute a function based on the availability of a file. This is + useful where files may arrive to the system during the day and must + be acted upon (e.g. files are uploaded to a shared directory by + users/clients). The functions to execute are defined by the user and + the whole process is driven by a csv file detailing the file to + search for, the function to execute and, optionally, a directory to + move the file to after it has been processed.

    +
  • +
  • +

    Monitor: A basic monitoring process which uses the Discovery Service + to locate the other processes within the system, listens for + heartbeats, and subscribes for log messages. This should be extended + as required but provides a basic central point for system health + checks;

    +
  • +
  • +

    Kill: A process used to kill other processes, optionally using the + Discovery Service to locate them.

    +
  • +
+

+

A Large Scale Data Processing Platform

+

One of the key drivers behind TorQ development has been to ensure all +the tools necessary to build a large scale data processing platform are +available. kdb+tick +provides the basic building blocks, and a standard set-up usually looks +something like this:

+

Simple kdb+tick Setup

+

However, in reality it is usually more complicated. A larger scale +architecture serving large numbers of client queries and receiving data +from multiple sources may look like this:

+

Production Data Capture

+

A common practice is to use a gateway (section gateway) to +manage client queries across back-end processes. The gateway can load +balance across processes and make failures transparent to the client. If +the clients access the gateway with asynchronous calls, then the gateway +can serve many requests at once and additionally implement client +queuing algorithms.

+

Other common production features include:

+
    +
  • +

    A modified version of the RDB (section sec:rdb) which does + different operations at end-of-day, reloads multiple HDB processes + etc.

    +
  • +
  • +

    A Write Database (section [sec:wdb]) which receives data from the + tickerplant and periodically writes it to disk. WDBs are used when + there is too much data in a day to fit into memory and/or to speed + up the end-of-day rollover job

    +
  • +
  • +

    Processes that load data from other sources either into the HDB + directly or to the RDB potentially via the tickerplant (section + [sec:dataloader]). The data may be dropped in specific locations + which have to be monitored (section [sec:filealerter])

    +
  • +
  • +

    A Reporting Engine (section [sec:reporter]) to run periodic + reports and do something with the result (e.g. generate an xls file + from the database and email it to senior management). Reporting + engines can also be used to run periodic checks of the system

    +
  • +
  • +

    A Discovery Service (section [sec:discovery]) to allow processes + to locate each other, and to allow processes to dynamically register + availability and push notifications around the system.

    +
  • +
  • +

    Basic Monitoring (section [sec:monitor]) of process availability

    +
  • +
  • +

    Housekeeping (section [sec:housekeeping]) to ensure log files are + tidied up, tickerplant log files are compressed/moved in a timely + fashion etc.

    +
  • +
+

+

Do I Really Have to Read This Whole Document?

+

Hopefully not. The core of AquaQ TorQ is a script called torq.q and we +have tried to make it as descriptive as possible, so perhaps that will +suffice. The first place to look will be in the config files, the main +one being \$KDBCONFIG/settings/default.q. This should contain a lot of +information on what can be modified. In addition:

+
    +
  • +

    We have added a load of usage information:

    +
    aquaq$ q torq.q -usage
    +KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
    +
    +General:
    + This script should form the basis of a production kdb+ environment.
    + It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags 
    +... etc ...
    +
    +

    If sourcing from another script there are hooks to modify and extend +the usage information as required.

    +
  • +
  • +

    We have some pretty extensive logging:

    +
    aquaq$ q torq.q -p 9999 -debug
    +KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
    +
    +2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0
    +2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0
    +2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv
    +2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1
    +2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found
    +... etc ...
    +
    +
  • +
  • +

    We have added functionality to find functions or variables defined + in the session, and also to search function definitions.

    +
    q).api.f`max                                                                                                                                                                                   
    +name                | vartype   namespace public descrip              ..
    +--------------------| ------------------------------------------------..
    +maxs                | function  .q        1      ""                   ..
    +mmax                | function  .q        1      ""                   ..
    +.clients.MAXIDLE    | variable  .clients  0      ""                   ..
    +.access.MAXSIZE     | variable  .access   0      ""                   ..
    +.cache.maxsize      | variable  .cache    1      "The maximum size in ..
    +.cache.maxindividual| variable  .cache    1      "The maximum size in ..
    +max                 | primitive           1      ""                   ..
    +
    +q)first 0!.api.p`.api                                                                                                                                                                          
    +name     | `.api.f
    +vartype  | `function
    +namespace| `.api
    +public   | 1b
    +descrip  | "Find a function/variable/table/view in the current process"
    +params   | "[string:search string]"
    +return   | "table of matching elements"
    +
    +q).api.p`.api                                                                                                                                                                                  
    +name        | vartype  namespace public descrip                       ..
    +------------| --------------------------------------------------------..
    +.api.f      | function .api      1      "Find a function/variable/tabl..
    +.api.p      | function .api      1      "Find a public function/variab..
    +.api.u      | function .api      1      "Find a non-standard q public ..
    +.api.s      | function .api      1      "Search all function definitio..
    +.api.find   | function .api      1      "Generic method for finding fu..
    +.api.search | function .api      1      "Generic method for searching ..
    +.api.add    | function .api      1      "Add a function to the api des..
    +.api.fullapi| function .api      1      "Return the full function api ..
    +
    +
  • +
  • +

    We have incorporated help.q.

    +
    q)help`                                                                                                                                                                                        
    +adverb    | adverbs/operators
    +attributes| data attributes
    +cmdline   | command line parameters
    +data      | data types
    +define    | assign, define, control and debug
    +dotz      | .z locale contents
    +errors    | error messages
    +save      | save/load tables
    +syscmd    | system commands
    +temporal  | temporal - date & time casts
    +verbs     | verbs/functions
    +
    +
  • +
  • +

    We have separated and commented all of our config:

    +
    aquaq$ head config/default.q 
    +/- Default configuration - loaded by all processes
    +
    +/- Process initialisation
    +\d .proc
    +loadcommoncode:1b   /- whether to load the common code defined at
    +                        /- ${KDBCODE}/common
    +loadprocesscode:0b  /- whether to load the process specific code defined at 
    +                        /- ${KDBCODE}/{process type} 
    +loadnamecode:0b     /- whether to load the name specific code defined at 
    +                    /- ${KDBCODE}/{name of process}
    +loadhandlers:1b     /- whether to load the message handler code defined at 
    +                        /- ${KDBCODE}/handlers
    +logroll:1b      /- whether to roll the std out/err logs daily
    +... etc ...
    +
    +
  • +
+

+

Operating System and kdb+ Version

+

AquaQ TorQ has been built and tested on the linux and OSX operating +systems though as far as we are aware there is nothing that would make +this incompatible with Solaris or Windows. It has also been tested with +kdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+ +versions or operating systems.

+

+

License

+

This code is released under the MIT license.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/site/Processes/index.html b/site/Processes/index.html new file mode 100644 index 000000000..015da42aa --- /dev/null +++ b/site/Processes/index.html @@ -0,0 +1,1747 @@ + + + + + + + + + + + + Processes - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

+

Processes

+

A set of processes is included. These processes build upon AquaQ TorQ, +providing specific functionality. All the process scripts are contained +in $KDBCODE/processes. All processes should have an entry in +$KDBCONFIG/process.csv. All processes can have any type and name, +except for discovery services which must have a process type of +“discovery”. An example process.csv is:

+
aquaq$ cat config/process.csv
+host,port,proctype,procname
+aquaq,9998,rdb,rdb_europe_1
+aquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1
+aquaq,9996,discovery,discovery1
+aquaq,9995,discovery,discovery2
+aquaq,8000,gateway,gateway1
+aquaq,5010,tickerplant,tickerplant1
+aquaq,5011,rdb,rdb1
+aquaq,5012,hdb,hdb1
+aquaq,5013,hdb,hdb2
+aquaq,9990,tickerlogreplay,tpreplay1
+aquaq,20000,kill,killhdbs
+aquaq,20001,monitor,monitor1
+aquaq,20002,housekeeping,hk1
+
+

+

Discovery Service

+

Overview

+

Processes use the discovery service to register their own availability, +find other processes (by process type) and subscribe to receive updates +for new process availability (by process type). The discovery service +does not manage connections- it simply returns tables of registered +processes, irrespective of their current availability. It is up to each +individual process to manage its own connections.

+

The discovery service uses the process.csv file to make connections to +processes on start up. After start up it is up to each individual +process to attempt connections and register with the discovery service. +This is done automatically, depending on the configuration parameters. +Multiple discovery services can be run in which case each process will +try to register and retrieve process details from each discovery process +it finds in its process.csv file. Discovery services do not replicate +between themselves. A discovery process must have its process type +listed as discovery.

+

To run the discovery service, use a start line such as:

+
aquaq $ q torq.q -load code/processes/discovery.q -p 9995
+
+

Modify the configuration as required.

+

Operation

+
    +
  1. +

    Processes register with the discovery service.

    +

    Discovery service
+registration

    +
  2. +
  3. +

    Processes use the discovery service to locate other processes.

    +

    Process location

    +
  4. +
  5. +

    When new services register, any processes which have registered an + interest in that process type are notified.

    +

    Notification

    +
  6. +
+

Available Processes

+

The list of available processes can be found in the .servers.SERVERS +table.

+
q).servers.SERVERS                                                                                                                                                                                                                                                            
+procname     proctype        hpup            w  hits startp                        lastp                         endp attributes                                                                   
+-------------------------------------------------------------------------------------
+discovery1   discovery       :aquaq:9995     0                                  2014.01.22D17:00:40.947470000      ()!()                                                                        
+discovery2   discovery       :aquaq:9996     0                                  2014.01.22D17:00:40.947517000      ()!()                                                                        
+hdb2         hdb             :aquaq:5013     0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
+killtick     kill            :aquaq:20000    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
+tpreplay1    tickerlogreplay :aquaq:20002    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
+tickerplant1 tickerplant     :aquaq:5010  6  0    2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000      ()!()                                                                        
+monitor1     monitor         :aquaq:20001 9  0    2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000      ()!()                                                                        
+rdb1         rdb             :aquaq:5011  7  0    2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000      `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades)          
+hdb3         hdb             :aquaq:5012  8  0    2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000      `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)
+gateway1     gateway         :aquaq:5020  10 0    2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000      ()!()
+
+

+

Gateway

+

A synchronous and asynchronous gateway is provided. The gateway can be +used for load balancing and/or to join the results of queries across +heterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should +only be used with asynchronous calls. Synchronous calls cause the +gateway to block so limits the gateway to serving one query at a time +(although if querying across multiple backend servers the backend +queries will be run in parallel). When using asynchronous calls the +client can either block and wait for the result (deferred synchronous) +or post a call back function which the gateway will call back to the +client with. With both asynchronous and synchronous queries the backend +servers to execute queries against are selected using process type. The +gateway API can be seen by querying .api.p“.gw.*” within a gateway +process.

+

Gateway behaviour

+

Asynchronous Behaviour

+

Asynchronous queries allow much greater flexibility. They allow multiple +queries to be serviced at once, prioritisation, and queries to be timed +out. When an asynchronous query is received the following happens:

+
    +
  • +

    the query is placed in a queue;

    +
  • +
  • +

    the list of available servers is retrieved;

    +
  • +
  • +

    the queue is prioritised, so those queries with higher priority are + serviced first;

    +
  • +
  • +

    queries are sent to back end servers as they become available. Once + the backend server returns its result, it is given another query;

    +
  • +
  • +

    when all the partial results from the query are returned the results + are aggregated and returned to the client. They are either returned + directly, or wrapped in a callback and posted back asynchronously to + the client.

    +
  • +
+

The two main customisable features of the gateway are the selection of +available servers (.gw.availableservers) and the queue prioritisation +(.gw.getnextqueryid). With default configuration, the available servers +are those servers which are not currently servicing a query from the +gateway, and the queue priority is a simple FIFO queue. The available +servers could be extended to handle process attributes, such as the +available datasets or the location of the process, and the queue +prioritisation could be modified to anything required e.g. based on the +query itself, the username, host of the client etc.

+

An asynchronous query can be timed out using a timeout defined by the +client. The gateway will periodically check if any client queries have +not completed in the alotted time, and return a timeout error to the +client. If the query is already running on any backend servers then they +cannot be timed out other than by using the standard -T flag.

+

Synchronous Behaviour

+

When using synchronous queries the gateway can only handle one query at +a time and cannot timeout queries other than with the standard -T flag. +All synchronous queries will be immediately dispatched to the back end +processes. They will be dispatched using an asyhcnronous call, allowing +them to run in parallel rather than serially. When the results are +received they are aggregated and returned to the client.

+

Process Discovery

+

The gateway uses the discovery service to locate processes to query +across. The discovery service will notify the gateway when new processes +become available and the gateway will automatically connect and start +using them. The gateway can also use the static information in +process.csv, but this limits the gateway to a predefined list of +processes rather than allowing new services to come online as demand +requires.

+

Error Handling

+

When synchronous calls are used, q errors are returned to clients as +they are encountered. When using asynchronous calls there is no way to +return actual errors and appropriately prefixed strings must be used +instead. It is up to the client to check the type of the received result +and if it is a string then whether it contains the error prefix. The +error prefix can be changed, but the default is “error: ”. Errors will +be returned when:

+
    +
  • +

    the client requests a query against a server type which the gateway + does not currently have any active instances of (this error is + returned immediately);

    +
  • +
  • +

    the query is timed out;

    +
  • +
  • +

    a back end server returns an error;

    +
  • +
  • +

    a back end server fails;

    +
  • +
  • +

    the join function fails.

    +
  • +
+

If postback functions are used, the error string will be posted back +within the postback function (i.e. it will be packed the same way as a +valid result).

+

Client Calls

+

There are four main client calls. The .gw.sync* methods should only be +invoked synchronously, and the .gw.async* methods should only be +invoked asynchronously. Each of these are documented more extensively in +the gateway api. Use .api.p“.gw.*” for more details.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionDescription
.gw.syncexec[query; servertypes]Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.
.gw.syncexecj[query; servertypes; joinfunction]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results.
.gw.asyncexec[query; servertypes]Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.
.gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.
+

For the purposes of demonstration, assume that the queries must be run +across an RDB and HDB process, and the gateway has one RDB and two HDB +processes available to it.

+
q).gw.servers                                                                                                                                                                                                                                                                 
+handle| servertype inuse active querycount lastquery                     usage                attributes                   
+------| --------------------------------------------------------------------
+7     | rdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk
+8     | hdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk
+9     | hdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk
+12    | rdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk
+
+

Both the RDB and HDB processes have a function f and table t defined. f +will run for 2 seconds longer on the HDB processes then it will the RDB.

+
q)f                                                                                                                                                                                                                                                                           
+{system"sleep ",string x+$[`hdb=.proc.proctype;2;0]; t}
+q)t                                                                                                                                                                                                                                                                           
+a   
+----
+5013
+5014
+5015
+5016
+5017
+
+

Run the gateway. The main parameter which should be set is the +.servers.CONNECTIONS parameter, which dictates the process types the +gateway queries across. Also, we need to explicitly allow sync calls. We +can do this from the config or from the command line.

+
q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb
+
+

Start a client and connect to the gateway. Start with a sync query. The +HDB query should take 4 seconds and the RDB query should take 2 seconds. +If the queries run in parallel, the total query time should be 4 +seconds.

+
q)h:hopen 8000                                                                                                                                                                                                                                                                
+q)h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                            
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                         
+4009
+
+

If a query is done for a server type which is not registered, an error +is returned:

+
q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other)                                                                                                                                                                                                                                   
+`not all of the requested server types are available; missing other
+
+

Custom join functions can be specified:

+
q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x})                                                                                                                                                                                                  
+a   | x
+----| -
+5014| 2
+5015| 2
+5016| 2
+5017| 1
+5018| 1
+5012| 1
+5013| 1
+
+

Custom joins can fail with appropriate errors:

+
q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x})                                                                                                                                                                                                  
+`failed to apply supplied join function to results: b
+
+

Asynchronous queries must be sent in async and blocked:

+
q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::)                                                                                                                                                                                                                          
+    /- This white space is from pressing return
+    /- the client is blocked and unresponsive
+
+q)q)q)                                                                                                                                                                                                                                                                        
+q)                                                                                                                                                                                                                                                                            
+q)r                                                                                                                                                                                                                                                                           
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+q)
+
+

We can send multiple async queries at once. Given the gateway has two +RDBs and two HDBs avaialble to it, it should be possible to service two +of these queries at the same time.

+
q)h:hopen each 8000 8000                                                                                                                                                                                                                                                      
+q)\t (neg h)@\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\:(::); r:h@\:(::)
+4012
+q)r                                                                                                                                                                                                                                                                           
++(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016
++(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003
+
+

Alternatively async queries can specify a postback so the client does +not have to block and wait for the result. The postback function must +take two parameters- the first is the function that was sent up, the +second is the results. The postback can either be a lambda, or the name +of a function.

+
q)h:hopen 8000                                                                                                                                                                                                                                                                
+q)handleresults:{-1(string .z.z)," got results"; -3!x; show y}                                                                                                                                                                                                                
+q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn)                                                                                                                                                                                                           
+q)
+q)  /- These q prompts are from pressing enter
+q)  /- The q client is not blocked, unlike the previous example
+q)
+q)2014.01.07T16:53:42.481 got results
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+
+/- Can also use a named function rather than a lambda
+q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)
+q)
+q)              
+q)2014.01.07T16:55:12.235 got results
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+
+

Asynchronous queries can also be timed out. This query will run for 22 +seconds, but should be timed out after 5 seconds. There is a tolerance +of +5 seconds on the timeout value, as that is how often the query list +is checked. This can be reduced as required.

+
q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)
+
+q)q)q)r                                                                                                                                                                                                                                                                       
+"error: query has exceeded specified timeout value"
+q)\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)                                                                                                                                                                                                  
+6550
+
+

Non kdb+ Clients

+

All the examples in the previous section are from clients written in q. +However it should be possible to do most of the above from non kdb+ +clients. The officially supported APIs for Java, C# and C allow the +asynchronous methods above. For example, we can modify the try block in +the main function of the Java Grid +Viewer:

+
import java.awt.BorderLayout;
+import java.awt.Color;
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+import kx.c;
+
+public class Main {
+    public static class KxTableModel extends AbstractTableModel {
+        private c.Flip flip;
+        public void setFlip(c.Flip data) {
+            this.flip = data;
+        }
+
+        public int getRowCount() {
+            return Array.getLength(flip.y[0]);
+        }
+
+        public int getColumnCount() {
+            return flip.y.length;
+        }
+
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            return c.at(flip.y[columnIndex], rowIndex);
+        }
+
+        public String getColumnName(int columnIndex) {
+            return flip.x[columnIndex];
+        }
+    };
+
+    public static void main(String[] args) {
+        KxTableModel model = new KxTableModel();
+        c c = null;
+        try {
+            c = new c("localhost", 8000,"username:password");
+            // Create the query to send
+        String query=".gw.asyncexec[(`f;2);`hdb`rdb]";
+            // Send the query 
+        c.ks(query);
+            // Block on the socket and wait for the result
+        model.setFlip((c.Flip) c.k());
+        } catch (Exception ex) {
+            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            if (c != null) {try{c.close();} catch (IOException ex) {}
+          }
+        }
+        JTable table = new JTable(model);
+        table.setGridColor(Color.BLACK);
+        String title = "kdb+ Example - "+model.getRowCount()+" Rows";
+        JFrame frame = new JFrame(title);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
+        frame.setSize(300, 300);
+        frame.setVisible(true);
+    }
+}
+
+

Some of the unofficially supported APIs may only allow synchronous calls +to be made.

+

+

Real Time Database (RDB)

+

The Real Time Database is a modified version of r.q found in kdb+tick. +The modifications from the standard r.q include:

+
    +
  • +

    Tickerplant (data source) and HDB location derived from processes + defined by the discovery service or from config file;

    +
  • +
  • +

    Automatic re-connection and resubscription to tickerplant;

    +
  • +
  • +

    List of tables to subscribe to supplied as configuration setting;

    +
  • +
  • +

    More pre-built flexibility in end-of-day;

    +
  • +
  • +

    More verbose end-of-day logging;

    +
  • +
  • +

    Reload multiple authenticated HDBs after end-of-day;

    +
  • +
  • +

    End-of-day save down manipulation code is shared between RDB, WDB + and tickerplant log replay

    +
  • +
+

See the top of the file for more information.

+

+

Write Database (WDB)

+

The Write Database or WDB is based on w.q. This process features a +number of modifications and enhancements over w.q:

+
    +
  1. +

    Provides the option to write down to a custom partition scheme, + defined by parted columns in sort.csv, which removes the need for + end of day sorting;

    +
  2. +
  3. +

    Greater configuration options; max rows on a per table basis, list + subscription tables, upd function etc. See the top of the process + file for the options;

    +
  4. +
  5. +

    Use of common code with the RDB and Tickerplant Log Replay process + to manipulate tables before save, sort and apply attributes;

    +
  6. +
  7. +

    Checks whether to persist data to disk on a timer rather than on + each tick;

    +
  8. +
  9. +

    Informs other RDB, HDB and GW processes that end of day save and + sort has completed;

    +
  10. +
  11. +

    More log information supplied.

    +
  12. +
+

The WDB process can broken down into two main functions:

+
    +
  1. +

    Periodically saving data to disk and

    +
  2. +
  3. +

    Sorting data at end of day

    +
  4. +
+

The WDB process provides flexibility so it can be set-up as a +stand-alone process that will both save and sort data or two separate +processes (one that saves the data and another that will sort the data +on disk). This allows greater flexibility around the end of day event as +sorting data can be time consuming. It is also helps when implementing +seemless rollovers (i.e. no outage window at end-of-day).

+

The behaviour of the WDB process is controlled by the .wdb.mode +parameter. This should be set to one of following three values:

+
    +
  • +

    saveandsort - the process will subscribe for data, periodically + write data to disk and at EOD it will flush remaining data to disk + before sorting it and informing GWs, RDBs and HDBs etc.

    +
  • +
  • +

    save - the process will subscribe for data, periodically write data + to disk and at EOD it will flush remaining data to disk. It will + then inform its respective sort mode process to sort the data

    +
  • +
  • +

    sort - the process will wait to get a trigger from its respective + save mode process. When this is triggered it will sort the data on + disk, apply attributes and the trigger a reload on the RDB, HDB and + GW processes

    +
  • +
+

When running a system with separate save and sort process, the sort +process should be configured in the processes.csv file with a proctype +of sort. The save process will check for processes with a proctype of +sort when it attempts to trigger the end of day sort of the data.

+

The wdb process provides two methods for persisting data to disk and +sorting at the end of the day.

+
    +
  • +

    default - Data is persisted into a partition defined by the + [partitiontype] variable, similar to the hdb partition scheme. The + general scheme is of the form + [wdbdir]/[partitiontype]/[table]/. And a typical partition + directory would be similar to wdb/database/2015.11.26/trades/. At + the end of the day, before being moved to the hdb, the data is + sorted according to parameters defined in sort.csv. For each table, + sort.csv will specify the columns to sort (using xasc) and apply + attributes to.

    +
  • +
  • +

    partbyattr - Data is persisted to a custom partition scheme, derived + from parameters in the sort.csv file. The write down scheme is taken + from sort.csv, to reflect the effect of using xasc at the end of + day. For each table, the columns defined in sort.csv, with the + parted attribute, are used to create custom partitions in the wdb. + Multiple columns can be defined with the parted attribute and + distinct combinations of each are generated for custom partitions. + The general partition scheme is of the form + [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a + typical partition directory would be similar to + wdb/database/2015.11.26/trade/MSFT_N. In the above example, the + data is parted by sym and source, and so a unique partition + directory MSFT_N is created in the wdb directory.

    +

    At the end of the day, data is upserted into the hdb without the + need for sorting. The number of rows that are joined at once is + limited by the mergenumrows and mergenumtab parameters.

    +
  • +
+

The optional partbyattr method may provide a significant saving in time +at the end of day, allowing the hdb to be accessed sooner. For large +data sets with a low cardinality (ie. small number of distinct elements) +the optional method may provide a significant time saving, upwards of +50%. The optional method should also reduce the memory usage at the end +of day event, as joining data is generally less memory intensive than +sorting.

+

+

Tickerplant Log Replay

+

The Tickerplant Log Replay script is for replaying tickerplant logs. +This is useful for:

+
    +
  1. +

    handling end of day save down failures;

    +
  2. +
  3. +

    handling large volumes of data (larger than can fit into RAM).

    +
  4. +
+

The process takes as the main input either an individual log file to +replay, or a directory containing a set of log files. Amongst other +functionality, the process can:

+
    +
  • +

    replay specific message ranges;

    +
  • +
  • +

    replay in manageable message chunks;

    +
  • +
  • +

    recover as many messages as possible from a log file rather than + just stopping at the first bad message;

    +
  • +
  • +

    ignore specific tables;

    +
  • +
  • +

    modify the tables before or after they are saved;

    +
  • +
  • +

    apply sorting and parting after all the data is written out.

    +
  • +
+

The process must have some variables set (the tickerplant log file or +directory, the schema file, and the on-disk database directory to write +to) or it will fail on startup. These can either be set in the config +file, or overridden from the command line in the usual way. An example +start line would be:

+
q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1
+
+

The tickerplant log replay script has extended usage information which +can be accessed with -.replay.usage.

+
q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage
+
+

+

Housekeeping

+

The housekeeping process is used to undertake periodic system +housekeeping and maintenance, such as compressing or removing files +which are no longer required. The process will run the housekeeping jobs +periodically on a timer. Amongst other functionality the process:

+
    +
  • +

    Allows for removing and zipping of directory files;

    +
  • +
  • +

    Provides an inbuilt search utility and selectively searches using a + ‘find’ and ‘exclude’ string, and an ‘older than’ parameter;

    +
  • +
  • +

    Reads all tasks from a single CSV;

    +
  • +
  • +

    Runs on a user defined timer;

    +
  • +
  • +

    Can be run immediately from command line or within the process;

    +
  • +
  • +

    Can be easily extended to include new user defined housekeeping + tasks.

    +
  • +
+

The process has two main parameters that should be set prior to use; +runtimes and inputcsv.‘Runtimes’ sets the timer to run housekeeping at +the set time(s), and ‘Inputcsv’ provides the location of the +housekeeping csv file. These can either be set in the config file, or +overridden via the command line. If these are not set, then default +parameters are used; 12.00 and ‘KDBCONFIG/housekeeping.csv’ +respectively. The process is designed to run from a single csv file with +five headings:

+
    +
  • +

    Function details the action that you wish to be carried out on the + files, initially, this can be rm (remove) and zip (zipping);

    +
  • +
  • +

    Path specifies the directory that the files are in;

    +
  • +
  • +

    Match provides the search string to the find function, files + returned will have names that match this string;

    +
  • +
  • +

    Exclude provides a second string to the find function, and these + files are excluded from the match list;

    +
  • +
  • +

    Age is the ‘older than’ parameter, and the function will only be + carried out on files older than the age given (in days).

    +
  • +
+

An example csv file would be:

+
function,path,match,exclude,age
+zip,./logs/,*.log,*tick*,2
+rm,./logs/,*.log*,*tick*,4
+zip,./logs/,*tick*,,1
+rm,./logs/,*tick*,,3
+
+function path      match    exclude  age
+----------------------------------------
+zip      "./logs/" "*.log"  "*tick*" 2
+rm       "./logs/" "*.log*" "*tick*" 4
+zip      "./logs/" "*tick*" ""       1
+rm       "./logs/" "*tick*" ""       3
+
+

The process reads in the csv file, and passes it line by line to a +‘find’ function; providing a dictionary of values that can be used to +locate the files required. The find function takes advantage of system +commands to search for the files according to the specifications in the +dictionary. A search is performed for both the match string and the +exclude string, and cross referenced to produce a list of files that +match the parameters given. The files are then each passed to a further +set of system commands to perform the task of either zipping or +removing. Note that an incomplete csv or non-existant path will throw an +error.

+

The remove and zipping functions form only basic implimentations of the +housekeeping process; it is designed to be exended to include more +actions than those provided. Any user function defined in the +housekeeping code can be employed in the same fashion by providing the +name of the function,search string and age of files to the csv.

+

As well as being scheduled on a timer, the process can also be run +immediately. Adding ‘-hk.runnow 1’ to the command line when starting the +process will force immediate running of the actions in the housekeeping +csv. Likewise, setting runnow to 1b in the config file will immediately +run the cleaning process. Both methods will cause the process to exit +upon completion. Calling hkrun[] from within the q process will also +run the csv instructions immediately. This will not affect any timer +scheduling and the process will remain open upon completion.

+

Housekeeping works both on windows and unix based systems. Since the +process utilizes inbuilt system commands to perform maintenances, a +unix/windows switch detects the operating system of the host and applies +either unix or widows functions appropriately. Extensions need only be +made in the namespace of the hosting operating system (i.e. if you are +using a unix system, and wish to add a new function, you do not need to +add the function to the windows namespace to). Usage information can be +accessed using the ‘-hkusage’ flag:

+
q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage
+
+

+

File Alerter

+

The file alerter process is a long-running process which periodically +scans a set of directories for user-specified files. If a matching file +is found it will then carry out a user-defined function on it. The files +to search for and the functions to run are read in from a csv file. +Additionally, the file alerter process can:

+
    +
  • +

    run more than one function on the specified file.

    +
  • +
  • +

    optionally move the file to a new directory after running the + function.

    +
  • +
  • +

    store a table of files that have already been processed.

    +
  • +
  • +

    run the function only on new files or run it every time the file is + modified.

    +
  • +
  • +

    ignore any matching files already on the system when the process + starts and only run a function if a new file is added or a file is + modified.

    +
  • +
+

The file alerter process has four parameters which should be set prior +to use. These parameters can either be set in the config file or +overridden on the command-line. If they are not set, the default +parameters will be used. The parameters are as follows.

+

inputcsv - The name and location of the csv file which defines the +behaviour of the process. The default is KDBCONFIG/filealerter.csv.

+

polltime - How often the process will scan for matching files. The +default is 0D:00:01, i.e., every minute.

+

alreadyprocessed - The name and location of the already-processed +table. The default is KDBCONFIG/filealerterprocessed. This table will +be created automatically the first time the process is ran.

+

skipallonstart - If this is set to 1, it will ignore all files +already on the system; if it is set to 0, it will not. The default +value is 0.

+

The files to find and the functions to run are read in from a csv file +created by the user. This file has five columns, which are detailed +below.

+

path - This is the path to the directory that will be scanned for +the file.

+

match - This is a search string matching the name of the file to be +found. Wildcards can be used in this search, for example, “file*” will +find all files starting with “fil”.

+

function - This is the name of the function to be run on the file. +This function must be defined in the script +KDBCODE/processes/filealerter.q. If the function is not defined or fails +to run, the process will throw an error and ignore that file from then +on.

+

newonly - This is a boolean value. If it is set to 1, it will +only run the function on the file if it has been newly created. If it is +set to 0, then it will run the function every time the file is +modified.

+

movetodirectory - This is the path of the directory you would like +to move the file to after it has been processed. If this value is left +blank, the file will not be moved.

+

It is possible to run two separate functions on the same file by adding +them as separate lines in the csv file. If the file is to be moved after +it is processed, the file alerter will run both functions on the file +and then attempt to move it. A typical csv file to configure the file +alerter would look like:

+
path,match,function,newonly,movetodirectory
+/path/to/dirA,fileA.*,copy,0,/path/to/newDir
+/path/to/dirB,fileB.txt,email,1,
+/path/to/dirA,fileA.*,delete,0,/path/to/newDir
+
+path        match      function  newonly    movetodirectory
+---------------------------------------------------
+"/path/to/dirA" "fileA.*"   copy    0   "/path/to/newDir"
+"/path/to/dirB" "fileB.txt" email   1   ""
+"/path/to/dirA" "fileA.*"   delete  0   "/path/to/newDir"
+
+

The file alerter process reads in each line of the csv file and searches +files matching the search string specified in that line. Note that there +may be more than one file found if a wildcard is used in the search +string. If it finds any files, it will check that they are not in the +already processed table. If newonly is set to 1, it only checks if +the filename is already in the table. If newonly is set to 0, it +checks against the filename, filesize and a md5 hash of the file. The +md5 hash and the filesize are used to determine if the file has been +modified since it was processed last. If the found files have not been +processed already, it then attempts to run the specified function to +these files.

+

After the process has run through each line of the csv, it generates a +table of all files that were processed on that run. These files are +appended to the already processed table which is then saved to disk. The +file alerter will attempt to move the files to the ‘movetodirectory’, if +specified. If the file has already been moved during the process (for +example, if the function to run on it was ‘delete’), the file alerter +will not attempt to move it.

+

The file alerter is designed to be extended by the user. Customised +functions should be defined within the filealerter.q script. They should +be diadic functions, i.e., they take two parameters: the path and the +filename. As an example, a simple function to make a copy of a file in +another directory could be:

+
copy:{[path;file] system "cp ", path,"/", file, " /path/to/newDir"}
+
+

Although the process is designed to run at regular intervals throughout +the day, it can be called manually by invoking the FArun[] command +from within the q session. Similarly, if new lines are added to the csv +file, then it can be re-loaded by calling the loadcsv[] command +from the q session.

+

Each stage of the process, along with any errors which may occur, are +appropriately logged in the usual manner.

+

The file alerter process is designed to work on both Windows and Unix +based systems. Since many of the functions defined will use inbuilt +system command they will be need to written to suit the operating system +in use. It should also be noted that Windows does not have an inbuilt +md5 hashing function so the file alerter will only detect different +versions of files if the filename or filesize changes.

+

+

Reporter

+

Overview

+

The reporter process is used to run periodic reports on specific +processes. A report is the result of a query that is run on a process at +a specific time. The result of the query is then handled by one of the +inbuilt result handlers, with the ability to add custom result handlers.

+

Reporter process

+

Features:

+
    +
  • +

    Easily create a report for information that you want;

    +
  • +
  • +

    Fully customizable scheduling such as start time, end time and days + of the week;

    +
  • +
  • +

    Run reports repeatedly with a custom period between them;

    +
  • +
  • +

    Asynchronous querying with custom timeout intervals;

    +
  • +
  • +

    Inbuilt result handlers allow reports to be written to file or + published;

    +
  • +
  • +

    Custom result handlers can be defined;

    +
  • +
  • +

    Logs each step of the report process;

    +
  • +
  • +

    Fully integrated with the TorQ gateway to allow reports to be run + across backend processes.

    +
  • +
+

The reporter process has three parameters that are read in on +initialisation from the reporter.q file found in the +$KDBCONFIG/settings directory. These settings are the string filepath +of the input csv file, a boolean to output log messages and timestamp +for flushing the query log table.

+

To run the reporter process:

+
q torq.q -load code/processes/reporter.q -p 20004
+
+

Once the reporter process has been initiated, the reports will be +scheduled and no further input is required from the user.

+

Report Configuration

+

By default, the process takes its inputs from a file called reporter.csv +which is found in the $KDBCONFIG directory. This allows the user +complete control over the configuration of the reports. As the queries +are evaluated on the target process, local variables can be referenced +or foreign functions can be run. Table [table:reportertable] shows the +meaning of the csv schema.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Column HeaderDescription and Example
nameReport name e.g. Usage
queryQuery to be evaluated on that process. It can be a string query or function
resulthandlerResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[“./output”;“usage”]
gatewayIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway
joinfunctionUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze
proctypeThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb
procnameThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1
startTime on that day to start at e.g. 12:00
endTime on that day that the report will stop at e.g. 23:00
periodThe period between each report query e.g. 00:00:10
timeoutintervalThe amount of time the reporter waits before timing out a report e.g. 00:00:30
daysofweekNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday
+

When running a report on a gateway, the gateway field must be set to the +proctype of the gateway that will be queried. It will then run the +report on the processes which are listed in the proctype field and join +the results by using the function specified in the joinfunction field. +If there is no join function then the reporter process will not start. +Multiple entries in the proctype field must be separated by a space and +are only allowed when the gateway field is not empty. If gateway field +is empty and there are multiple entries in the proctype field then the +reporter process will not load.

+

Listing [code:csvschema] shows an example of the schema needed in the +input csv file.

+
name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
+usage|10#.usage.usage|writetofiletype["./output/";"usage";"csv"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6
+memory|.Q.w[]|writetofile["./output/";"memory.csv"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6
+usage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6
+
+

Result Handlers

+

There are several default result handlers which are listed below. Custom +result handlers can be defined as required. The result handler will be +invoked with a single parameter (the result of the query).

+

writetofiletype - Accepts 3 parameters: path, filename, filetype and +data. When writing to file it uses a date time suffix so the resultant +filename will be usage_rdb_2014_01_02_15_00_12.txt e.g.

+
writetofiletype["./output/";"usage";"csv"]
+
+

splaytable - This accepts 3 parameters: path, file and data. This +splays the result to a directory. The result must be a table in order to +use this function e.g.

+
splaytable["./output/";"usage"]
+
+

emailalert - This accepts 3 parameters: period, recipient list and +data. The period dictates the throttle i.e. emails will be sent at most +every period. The result of the report must be a table with a single +column called messages which contains the character list of the email +message. This is used with the monitoring checks to raise alerts, but +can be used with other functions.

+
emailalert[0D00:30;("test@aquaq.co.uk";"test1@aquaq.co.uk")]
+
+

emailreport - This accepts 3 parameters: temporary path, recipient +list, file name, file type and data. The data is written out as the file +type (e.g. csv, xml, txt, xls, json) with the given file name to the +temporary path. It is then emailed to the recipient list, and the +temporary file removed.

+
emailreport["./tempdir/"; ("test@aquaq.co.uk";"test1@aquaq.co.uk"); "EndOfDayReport"; "csv"]
+
+

publishresult - Accepts 1 parameter and that is the data. This is +discussed later in the subsection subresults. +Custom result handlers can be added to $KDBCODE/processes/reporter.q . +It is important to note that the result handler is referencing local +functions as it is executed in the reporter process and not the target +process. When the query has been successful the result handler will be +passed a dictionary with the following keys: queryid, time, name, +procname, proctype and result.

+

Report Process Tracking

+

Each step of the query is logged by the reporter process. Each query is +given a unique id and regular system messages are given the id 0. The +stage column specifies what stage the query is in and these are shown in +table [table:stagetable]. An appropriate log message is also shown so +any problems can easily be diagnosed. The in memory table is flushed +every interval depending on the value of the flushqueryloginterval +variable in the reporter.q file found in the $KDBCONFIG/settings +directory.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Stage symbolExplanation
RThe query is currently running
EAn error has occurred during the query
CThe query has been completed with no errors
TThe query has exceeded the timeout interval
SSystem message e.g. “Reporter Process Initialised”
+
time                         | queryid stage message
+-----------------------------| ------------------------------------------------------------------------
+2014.10.20D22:20:06.597035000| 37 R "Received result"
+2014.10.20D22:20:06.600692000| 37 R "Running resulthandler"
+2014.10.20D22:20:06.604455000| 37 C "Finished report"
+2014.10.20D22:30:00.984572000| 38 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
+2014.10.20D22:30:00.991862000| 38 R "Received result"
+2014.10.20D22:30:00.995527000| 38 R "Running resulthandler"
+2014.10.20D22:30:00.999236000| 38 C "Finished report"
+2014.10.20D22:30:06.784419000| 39 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
+2014.10.20D22:30:06.796431000| 39 R "Received result"
+
+

Subscribing for Results

+

To publish the results of the report, the reporter process uses the pub +sub functionality of TorQ. This is done by using the using the inbuilt +result handler called publishresult. In order to subscribe to this feed, +connect to the reporter process and send the function shown below over +the handle. To subscribe to all reports use a backtick as the second +parameter and to subscribe to a specific reports results include the +reporter name as a symbol.

+
/- define a upd function
+upd:insert
+
+/- handle to reporter process
+h: hopen 20004
+
+/- Subscribe to all results that use the publishresult handler
+h(`.ps.subscribe;`reporterprocessresults;`)
+
+/- Subscribe to a specific report called testreport
+h(`.ps.subscribe;`reporterprocessresults;`testreport)
+
+

Example reports

+

The following are examples of reports that could be used in the reporter +process. The rdbtablecount report will run hourly and return the count +of all the tables in a rdb process. The memoryusage report will run +every 10 minutes against the gateway for multiple processes and will +return the .Q.w[] information. Both of these reports run between +9:30am to 4:00pm during the weekdays. The report onetimequery is an +example of a query that is run one time, in order to run a query once, +the period must be the same as the difference between the start and end +time.

+
name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
+rdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6
+memoryusage|.Q.w[]|writetofile["./output/";"memory.csv"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6
+onetimequery|10#.usage.usage|writetofile["./output/";"onetime.csv"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6
+
+

+

Monitor

+

The Monitor process is a simple process to monitor the health of the +other processes in the system. It connects to each process that it finds +(by default using the discovery service, though can use the static file +as well) and subscribes to both heartbeats and log messages. It +maintains a keyed table of heartbeats, and a table of all log messages +received.

+

Run it with:

+
aquaq $ q torq.q -load code/processes/monitor.q -p 20001
+
+

It is probably advisable to run the monitor process with the -trap flag, +as there may be some start up errors if the processes it is connecting +to do not have the necessary heartbeating or publish/subscribe code +loaded.

+
aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap
+
+

The current heartbeat statuses are tracked in .hb.hb, and the log +messages in logmsg

+
q)show .hb.hb                                                                                                                                                                                                                                                                 
+sym       procname    | time                          counter warning error
+----------------------| ---------------------------------------------------
+discovery discovery2  | 2014.01.07D13:24:31.848257000 893     0       0    
+hdb       hdb1        | 2014.01.07D13:24:31.866459000 955     0       0    
+rdb       rdb_europe_1| 2014.01.07D13:23:31.507203000 901     1       0    
+rdb       rdb1        | 2014.01.07D13:24:31.848259000 34      0       0
+
+q)show select from logmsg where loglevel=`ERR                                                                                                              
+time                          sym  host  loglevel id      message                               
+-------------------------------------------------------------------------------------
+2014.01.07D12:25:17.457535000 hdb1 aquaq ERR      reload  "failed to reload database"           
+2014.01.07D13:29:28.784333000 rdb1 aquaq ERR      eodsave "failed to save tables : trade, quote"
+
+

HTML5 front end

+

A HTML5 front end has been built to display important process +information that is sent from the monitor process. It uses HTML5, +WebSockets and JavaScript on the front end and interacts with the +monitor process in the kdb+ side. The features of the front end include:

+
    +
  • +

    Heartbeat table with processes that have warnings highlighted in + orange and errors in red

    +
  • +
  • +

    Log message table displaying the last 30 errors

    +
  • +
  • +

    Log message error chart that is by default displayed in 5 minute + bins

    +
  • +
  • +

    Chart’s bin value can be changed on the fly

    +
  • +
  • +

    Responsive design so works on all main devices i.e. phones, tablets + and desktop

    +
  • +
+

It is accessible by going to the url http://HOST:PORT/.non?monitorui

+

+

Compression

+

The compression process is a thin wrapper around the compression utility +library. It allows periodic compression of whole or parts of databases +(e.g. data is written out uncompressed and then compressed after a +certain period of time). It uses four variables defined in +KDBCONFIG/settings/compression.q which specify

+
    +
  • +

    the compression configuration file to use

    +
  • +
  • +

    the database directory to compress

    +
  • +
  • +

    the maximum age of data to attempt to compress

    +
  • +
  • +

    whether the process should exit upon completion

    +
  • +
+

The process is run like other TorQ processes:

+
q torq.q -load code/processes/compression.q -p 20005
+
+

Modify the settings file or override variables from the command line as +appropriate.

+

+

Kill

+

The kill process is used to connect to and terminate currently running +processes. It kills the process by sending the exit command therefore +the kill process must have appropriate permissions to send the command, +and it must be able to create a connection (i.e. it will not be able to +kill a blocked process in the same way that the unix command kill -9 +would). By default, the kill process will connect to the discovery +service(s), and kill the processes of the specified types. The kill +process can be modified to not use the discovery service and instead use +the process.csv file via the configuration in the standard way.

+

If run without any command line parameters, kill.q will try to kill each +process it finds with type defined by its .servers.CONNECTIONS variable.

+
q torq.q -load code/processes/kill.q -p 20000
+
+

.servers.CONNECTIONS can optionally be overridden from the command line +(as can any other process variable):

+
q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant
+
+

The kill process can also be used to kill only specific named processes +within the process types:

+
q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2
+
+

+

Chained Tickerplant

+

In tick+ architecture the main tickerplant is the most important +component, as it is relied upon by all the real time subscribers. When +the tickerplant goes down data will be lost, compare this to an rdb +which can be recovered after it fails. The chained tickerplant process +is an additional tickerplant that is a real time subscriber to the main +tickerplant but replicates its behaviour. It will have its own real time +subscribers and can be recovered when it fails. This is the recommended +approach when users want to perform their own custom real time analysis.

+

The chained tickerplant can:

+
    +
  • +

    subscribe to specific tables and syms

    +
  • +
  • +

    batch publish at an interval or publish tick by tick

    +
  • +
  • +

    create a tickerplant log that its real time subscribers can replay

    +
  • +
  • +

    replay the source tickerplant log

    +
  • +
+

To launch the chained tickerplant

+
q torq.q -load code/processes/chainedtp.q -p 12009
+
+

Chained tickerplant settings are found in config/settings/chainedtp.q +and are under the .ctp namespace.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingExplanationDefault
tickerplantnamelist of tickerplant names to try and make a connection to`tickerplant1
pubintervalpublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick0D00:00:00
tpconnsleepnumber of seconds between attempts to connect to the source tickerplant10
createlogfilecreate a log file0b
logdirdirectory containing chained tickerplant logs`:hdb
subscribetosubscribe to these tables only (null for all)`
subscribesymssubscribe to these syms only (null for all)`
replayreplay the tickerplant log file0b
schemaretrieve schema from tickerplant1b
clearlogonsubscriptionclear log on subscription, only called if createlogfile is also enabled0b
+

+

Integration with kdb+tick

+

AquaQ TorQ can be fully integrated with kdb+tick. For further details, +use one of the AquaQ TorQ Starter packs to set up a production kdb+ data +capture system.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/site/assets/fonts/icon.eot b/site/assets/fonts/icon.eot new file mode 100755 index 0000000000000000000000000000000000000000..8f81638c2de436e1b5cc77b6a2693b2b347a0151 GIT binary patch literal 2224 zcmaJDYiN^K^qhP1ZcHEMVbZM4%Vs7uwoQ|)E~(XOx7OBXnq))T&RAn>*Cw^Cqp}}H zWH6912NR|+2m5JcjIkeMjv=!Q9249yfx%!u#)^-T>W{&MHQBjeBBo>Pe4KmF^E>CB z@7#O8&r|?g2oV@;1cVDHB*W2-a$#G6b3^#>-#P#loPbHlK$=uKI0z}2f>SUHNmw9> z5fUU>fJL$rHa6%4A9RqW){j^bqzea^bdbuq5*;Zk-LE^Cdn?+_Wk$3IeMJy!S`Wh)UMyN+J zdS?0mGDhF6kI!%~<+qJq>2&vEpxeis4jnV-TbREq7%~}5A-CPp7U&N8yNm|C!pSZ= z>RMgx`%^o6Qv2I!?&%)eT36VWFT?1`lcUl3`6$Mm(PLi)Z77M4~2lu_KixyTMMWFbEgdpD<-HjI^xqTD%xRVN3f% z27EufM7BCq_F{-eA6ANNH2Jt&hXy?n=(b9Pj&yDA7Bp1}?(gblf$p{dxyryAvDrJc zt^F=*bbI@7kDasKZ>5j8H`V(+mJUPmWnFWsN4v+*4sUM2nLSNzr@QTW$GB0}ROgND*=9A% zw1)nnmfd#y?v|l`gH~p?ZtFkf)fup1^YGd6?&$gJGyIAekox zZ*nZ1`&86Qhw@P=Z(>&x;ARp0>8hS~9}KyeD>li(=rCx4^e?QEnx+3`oEyA6+GNZnmZ#7YHL z5IITs5QomaULXEb^rwKI?mhVE*tF(gTJylu*7C253QKlw|iZm6P z(d9W@r8&tvtF(;hi7G9p>(o@G6(o;TX$^Ek_QYf+{q!nMq!t!WWYV@yU&nvnzqQ7- z^ug5BsoCVh#%sLRU?7uTvQ4GZsfFZH>X_~5Y1`mrW+anI`(Qx2;FrKgKL9DZ>czF6 gge97fk?bg(rg2dERTv>l@iX9~idJf0Tk{R{Kaui$V*mgE literal 0 HcmV?d00001 diff --git a/site/assets/fonts/icon.svg b/site/assets/fonts/icon.svg new file mode 100755 index 000000000..86250e7b4 --- /dev/null +++ b/site/assets/fonts/icon.svg @@ -0,0 +1,22 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/site/assets/fonts/icon.ttf b/site/assets/fonts/icon.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b5ab5601bed7765790037c721c2ee1c7d444a7a5 GIT binary patch literal 2072 zcmaJ>ZD^ZS6h7zPd^bx!mX9TkZNApHq|4go%g&_h)~(vEUF()a8EswGW$kL4bZsXc z{#b?xf`|$Z+`tL`T!ufyAL2xYE5gLVlqDbt{t(MPB;9@p4s7DNZ{D%&kLTsw`<$

vJhI<5Xe z^&QFMB)b;UtBYWSqa?48?8v4UGUKsFzmfbg(%Sf&xy$DPi zbfnwchv86wxm^ZkGPbc`Pb6wFS)yL2t0NqW1bfUTqsq-LxEk6$od+|!dou?+Y3~h9 zY;P#-DOO?Z^y#tj#l>+<>OGUe-8Hl1=4scviv7i!dF-^PzW_;|q^3}((HZq>k@AFj za`SOHRw-aIR%U7}ZV;|qiIO54r&n>b%tw?$r;Xb*d)E+ zLNcE$rBZdZYot1yCMT7`AXeUd%+%!=(zRk6$#NWpFMS^h;0NI)@-?8k52LgOu-0U= zCBVG~G#Lq?*De7A**d&!XpsRA_VlrEs3T0F3b4l=&MtlXfX6<*vvZ`^$=Tkwvd6qz z8iPJtmnr?Sp|w$G)EeJ75P4^Ki&gI)c_r2P(eIxe!uGI<-PJcMj4@A(P2KKs_Ky0u zY-`}I-b1@A;pd_gcHE*z#F6Dju3&7>Vf1w|G`p?(`K!fQwLxu;wu}Bk^=rD%Wq6eY zc~C6oNH~UGRY!LKyE`J?ZP;y&M5){Wr@4s+Fxq9d^dSupt=(pox{WSsVA7_dyGQ%T zkLHfS+_m?{LzCx6wl?A1z80_B+wr_>(yVA{@F(`|uv-;+)4*`sUZ-@(rOxUz_){IXb+m(ESuc#BROaaae4B#(WznI{#M;k znD=Nk8f^~`59wO>`-Z2YR;7NICpfCtZB^K&&Rt51V#M4rnyDoB(|4iA;f>}+;x z5otP{++V0d0sZLTyuwn%euOGiis-N8X;i3RN$~RmPl`F;uH@0}4XCtm2B;alSGl#i zTDf&^@W;=v^QH}3D}UNqE(z!PfayTO(nue&J!2t7nh~I_*9l`!Y*`4VjnRT zN2H^_cpFT>oA54t4&T6Sd;!12+jyTTn2qcrYZJUi-4XPpI!TZh1AHOZh9ZTG8Fll3 zj5+Cd%2+}8sEn2L{p)3{B7Lunbzp;&lo1tL(rCz1!wd{CB4bYaZW${GPsvybX0XUu zMf$jmbr6F5sp(u6PQf(fAe+i8EuYF|9o>O0NI?dcV3|y000$i$fUbJydVDxDb7nrh z1cxbT2F}1dq+zMvVKA3nam-}0nWgkf=7i(;S;x?HZZwz624GN1utF(jC^{>pO~VT9 cCrEc3&eA$0)i+9>qL=`6wATCjoC1DrZ;vj6}9 literal 0 HcmV?d00001 diff --git a/site/assets/fonts/icon.woff b/site/assets/fonts/icon.woff new file mode 100755 index 0000000000000000000000000000000000000000..ed0f20d5b80ab98072f3557225b3333e01b78670 GIT binary patch literal 2148 zcmaJ?U2M};6hG(Qeym;Bb)z4&t6RTVr5$BkzZkY-Fqm#^Y(iTNVUx0zjk&dB8w&A( z8e?KYjQT(#L^1J^5+8grk{BY32}Tk$w26s{CdP%2q=N?^NL=f=|NfEk;{E5G`#WF% zbMEQ+-@ZLQGz18=8fKtT+PBtZfuCRFM|SoCU;}B73uHeVHCj?Ez9{;wK zTUn*D_W$R{332`_ehf+gc8O7y@KJ5YhY&;!$@L2j^^(8?0P8LMM)d{^a3azm(bMIS zfRu%hoooWzi3=|~D5MA-b&3&2aI9i2uExtracIOW6c|0?H$$~W zZ9y!=*Vf_)tPsDs7NdhB6d}+3tSBZMy=t#;i_#gmKVB}!H#Q{BF2%~_Sb0P64eD(k z3OrBm<)9XEQD?aJn4IA}hfUH8DkSsCQYuwfJIy)O;WRm^6b7;K<`bqa$B>Q{+ent< zD0~4L6~GU|%jBy^bw5Ul2e8&;vn9a2dNdgcpw}(|J=r?F?P!q!5BB!6aHum(p$f3a z9nNlD$DqePv7>9W&&k=|ce2O5P0c}{t=p7-Mc>w}HEN7+9*Dd@(qz@SM_)~Kee(OK zhp;1TV)t|{3S-REYEyT3oPA^drmcrvRh&Z~^%oU97IgGw;hGw@_ zw{WdEr`D^@(GJmHsD4A|xdN||AP+eZdXI)&A~eej51Z$iVC(RU|96Bn+}^DBZUFQ1>X@m8%S;;ip%T zC`Qa3qnS!_KYb@^(9x;gEzTCV29c)2$^C^Y6wr_U&8sX$|R8 z@T8dYZAu>9)`&_AXLP3y-LKp}d$w}>{?LzKVAm}hwpISJ-KyNBN%K)miDJY&YUw3m zx5+}J)FAUE5{XIzOY|hKUAvk}<+<;l66GmTOp2rQJq25wUUv)C$xc41+%-H(AWe5A zm8g_hNz^3KLmYYUjpo?jVm`(C<=%tOpY8ImEbel;MWjV>(tSr4mRQ8ao9dULW~r$} z7|D5}0$p)g+KbO*$tLVVmn8BLQE{}iV1#!1Z+QzofG^=&xP!a!YrKOGn1b2JF0vZn zb?S~-Ppgvznd#vxxi%CjWX!0W2V~4izeC0f!bfGSr0-uRV-@N9WUK`noTQAX(2%Bq zEH%tP52G^Xr0R1(LwEqj{ug`Uae@E< literal 0 HcmV?d00001 diff --git a/site/assets/images/favicon-e565ddfa3b.ico b/site/assets/images/favicon-e565ddfa3b.ico new file mode 100644 index 0000000000000000000000000000000000000000..e85006a3ce1c6fd81faa6d5a13095519c4a6fc96 GIT binary patch literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` literal 0 HcmV?d00001 diff --git a/site/assets/images/favicon.ico b/site/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e85006a3ce1c6fd81faa6d5a13095519c4a6fc96 GIT binary patch literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` literal 0 HcmV?d00001 diff --git a/site/assets/javascripts/application-997097ee0c.js b/site/assets/javascripts/application-997097ee0c.js new file mode 100644 index 000000000..1199f2e1d --- /dev/null +++ b/site/assets/javascripts/application-997097ee0c.js @@ -0,0 +1 @@ +function pegasus(t,e){return e=new XMLHttpRequest,e.open("GET",t),t=[],e.onreadystatechange=e.then=function(n,o,i,r){if(n&&n.call&&(t=[,n,o]),4==e.readyState&&(i=t[0|e.status/200])){try{r=JSON.parse(e.responseText)}catch(s){r=null}i(r,e)}},e.send(),e}if("document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;o>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/application.js b/site/assets/javascripts/application.js new file mode 100644 index 000000000..1199f2e1d --- /dev/null +++ b/site/assets/javascripts/application.js @@ -0,0 +1 @@ +function pegasus(t,e){return e=new XMLHttpRequest,e.open("GET",t),t=[],e.onreadystatechange=e.then=function(n,o,i,r){if(n&&n.call&&(t=[,n,o]),4==e.readyState&&(i=t[0|e.status/200])){try{r=JSON.parse(e.responseText)}catch(s){r=null}i(r,e)}},e.send(),e}if("document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;o>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/modernizr-4ab42b99fd.js b/site/assets/javascripts/modernizr-4ab42b99fd.js new file mode 100644 index 000000000..e82c90988 --- /dev/null +++ b/site/assets/javascripts/modernizr-4ab42b99fd.js @@ -0,0 +1 @@ +!function(e,t,n){function r(e,t){return typeof e===t}function i(){var e,t,n,i,o,a,s;for(var l in x)if(x.hasOwnProperty(l)){if(e=[],t=x[l],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;tf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;tli:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/application.css b/site/assets/stylesheets/application.css new file mode 100644 index 000000000..965bbb3c8 --- /dev/null +++ b/site/assets/stylesheets/application.css @@ -0,0 +1 @@ +html{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}*,:after,:before{box-sizing:inherit;-moz-box-sizing:inherit;-webkit-box-sizing:inherit}html{font-size:62.5%;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0}main{display:block}ul{list-style:none}table{border-collapse:collapse;border-spacing:0}td{text-align:left;font-weight:400;vertical-align:middle}button{outline:0;padding:0;background:transparent;border:none;font-size:inherit}input{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;outline:none;border:none}a{text-decoration:none;color:inherit}a,button,input,label{-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-tap-highlight-color:transparent}h1,h2,h3,h4,h5,h6{font-weight:inherit}pre{background:rgba(0,0,0,.05)}pre,pre code{color:rgba(0,0,0,.87)}.c,.c1,.cm,.o{color:rgba(0,0,0,.54)}.k,.kn{color:#a71d5d}.kd,.kt{color:#0086b3}.n.f,.nf{color:#795da3}.nx{color:#0086b3}.s,.s1{color:#183691}.bp,.mi{color:#9575cd}.icon{font-family:Icon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-search:before{content:"\e600"}.icon-back:before{content:"\e601"}.icon-link:before{content:"\e602"}.icon-close:before{content:"\e603"}.icon-menu:before{content:"\e604"}.icon-forward:before{content:"\e605"}.icon-twitter:before{content:"\e606"}.icon-github:before{content:"\e607"}.icon-download:before{content:"\e608"}.icon-star:before{content:"\e609"}.icon-warning:before{content:"\e610"}.icon-note:before{content:"\e611"}a{-webkit-transition:color .25s;transition:color .25s}.overlay{-webkit-transition:opacity .25s,width 0s .25s,height 0s .25s;transition:opacity .25s,width 0s .25s,height 0s .25s}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{-webkit-transition:opacity .25s,width 0s,height 0s;transition:opacity .25s,width 0s,height 0s}.js .header{-webkit-transition:background .6s,color .6s;transition:background .6s,color .6s}.js .header:before{-webkit-transition:background .6s;transition:background .6s}.button .icon{-webkit-transition:background .25s;transition:background .25s}body{color:rgba(0,0,0,.87)}@supports (-webkit-appearance:none){body{background:#e84e40}}.ios body{background:#fff}hr{border:0;border-top:1px solid rgba(0,0,0,.12)}.toggle-button{cursor:pointer;color:inherit}.backdrop,.backdrop-paper:after{background:#fff}.overlay{background:rgba(0,0,0,.54);opacity:0}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{opacity:1}.header{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.ios.standalone .header:before{background:rgba(0,0,0,.12)}.bar .path{color:hsla(0,0%,100%,.7)}.button .icon{border-radius:100%}.button .icon:active{background:hsla(0,0%,100%,.12)}html{height:100%}body{position:relative;min-height:100%}hr{display:block;height:1px;padding:0;margin:0}.locked{height:100%;overflow:hidden}.scrollable{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.scrollable .wrapper{height:100%}.ios .scrollable .wrapper{margin-bottom:2px}.toggle{display:none}.toggle-button{display:block}.backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.backdrop-paper{max-width:1200px;height:100%;margin-left:auto;margin-right:auto}.backdrop-paper:after{content:" ";display:block;height:100%;margin-left:262px}.overlay{width:0;height:0;z-index:3}.header,.overlay{position:fixed;top:0}.header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;left:0;z-index:2;height:56px;padding:4px;overflow:hidden}.ios.standalone .header{position:absolute}.bar{display:table;max-width:1184px;margin-left:auto;margin-right:auto}.bar a{display:block}.no-js .bar .button-search{display:none}.bar .path .icon:before{vertical-align:-1.5px}.button{display:table-cell;vertical-align:top;width:1%}.button button{margin:0;padding:0}.button button:active:before{position:relative;top:0;left:0}.button .icon{display:inline-block;font-size:24px;padding:8px;margin:4px}.stretch{display:table;table-layout:fixed;width:100%}.header .stretch{padding:0 20px}.stretch .title{display:table-cell;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.header .stretch .title{font-size:18px;padding:13px 0}.main{max-width:1200px;margin-left:auto;margin-right:auto}body,input{font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.no-fontface body,.no-fontface input,body,input{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.no-fontface code,.no-fontface kbd,.no-fontface pre,code,kbd,pre{font-family:Courier New,Courier,monospace}#toggle-drawer:checked~.main .drawer,.toggle-drawer .drawer{-webkit-transform:translateZ(0);transform:translateZ(0)}.no-csstransforms3d #toggle-drawer:checked~.main .drawer,.no-csstransforms3d .toggle-drawer .drawer{display:block}.project{-webkit-transition:none;transition:none}.project .logo img{-webkit-transition:box-shadow .4s;transition:box-shadow .4s}.repo a{-webkit-transition:box-shadow .4s,opacity .4s;transition:box-shadow .4s,opacity .4s}.drawer .toc a.current,.drawer .toc a:focus,.drawer .toc a:hover{color:#e84e40}.drawer .anchor a{border-left:2px solid #e84e40}.drawer .section{color:rgba(0,0,0,.54)}.ios.standalone .project:before{background:rgba(0,0,0,.12)}.project .logo img{background:#fff;border-radius:100%}.project:focus .logo img,.project:hover .logo img{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05)}.repo a{background:#00bfa5;color:#fff;border-radius:3px}.repo a:focus,.repo a:hover{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);opacity:.8}.repo a .count{background:rgba(0,0,0,.26);color:#fff;border-radius:0 3px 3px 0}.repo a .count:before{border-width:15px 5px 15px 0;border-color:transparent rgba(0,0,0,.26);border-style:solid}.drawer{width:262px;font-size:13px;line-height:1em}.ios .drawer{overflow:scroll;-webkit-overflow-scrolling:touch}.drawer .toc li a{display:block;padding:14.5px 24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .toc li.anchor a{margin-left:12px;padding:10px 24px 10px 12px}.drawer .toc li ul{margin-left:12px}.drawer .current+ul{margin-bottom:9px}.drawer .section{display:block;padding:14.5px 24px}.drawer .scrollable{top:104px;z-index:-1}.drawer .scrollable .wrapper{height:auto;min-height:100%}.drawer .scrollable .wrapper hr{margin:12px 0;margin-right:auto}.drawer .scrollable .wrapper .toc{margin:12px 0}.project{display:block}.project .banner{display:table;width:100%;height:104px;padding:20px}.project .logo{display:table-cell;width:64px;padding-right:12px}.project .logo img{display:block;width:64px;height:64px}.project .name{display:table-cell;padding-left:4px;font-size:14px;line-height:1.25em;vertical-align:middle}.project .logo+.name{font-size:12px}.repo{margin:24px 0;text-align:center}.repo li{display:inline-block;padding-right:12px;white-space:nowrap}.repo li:last-child{padding-right:0}.repo a{display:inline-block;padding:0 10px 0 6px;font-size:12px;line-height:30px;height:30px}.repo a .icon{font-size:18px;vertical-align:-3px}.repo a .count{display:inline-block;position:relative;padding:0 8px 0 4px;margin:0 -10px 0 8px;font-size:12px}.repo a .count:before{content:" ";display:block;position:absolute;top:0;left:-5px}.no-js .repo a .count{display:none}.drawer .toc li a{font-weight:700}.drawer .toc li.anchor a{font-weight:400}.drawer .section,.repo a{font-weight:700}.repo a{text-transform:uppercase}.repo a .count{text-transform:none;font-weight:700}pre span{-webkit-transition:color .25s;transition:color .25s}.copyright a{-webkit-transition:color .25s;transition:color .25s}.ios.standalone .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.ios.standalone .article .wrapper{background:-webkit-linear-gradient(top,#fff 50%,#fff 0);background:linear-gradient(180deg,#fff 50%,#fff 0)}.article a,.article h1,.article h2{color:#e84e40}.article code{background:#eee}.article kbd{color:#555;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.article h1{border-bottom:1px solid rgba(0,0,0,.12)}.article a{border-bottom:1px dotted}.article a:focus,.article a:hover{color:#00bfa5}.article .headerlink{color:rgba(0,0,0,.26);border:none}.article table{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);border-radius:3px}.article table th{background:#ee7a70;color:#fff}.article table td{border-top:1px solid rgba(0,0,0,.05)}.article blockquote{border-left:2px solid rgba(0,0,0,.54);color:rgba(0,0,0,.54)}.footer{background:#e84e40;color:#fff}.footer a{border:none}.copyright{color:rgba(0,0,0,.54)}.pagination a .button,.pagination a .title{color:#fff}.pagination .direction{color:hsla(0,0%,100%,.7)}.admonition{background:#29b6f6;color:#fff}.admonition pre{background:hsla(0,0%,100%,.3)}.admonition.warning{background:#e84e40}.admonition a,.admonition a:hover{color:#fff}.article{font-size:14px;line-height:1.7em}.article:after{content:" ";display:block;clear:both}.article .wrapper{padding:116px 16px 92px}.ios.standalone .article{position:absolute;top:56px;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.ios.standalone .article .wrapper{position:relative;min-height:100%;padding-top:60px;margin-bottom:2px}.article h1{font-size:24px;line-height:1.333334em;padding:20px 0 42px}.article h2{font-size:20px;line-height:1.4em;padding-top:92px;margin-top:-56px}.ios.standalone .article h2{padding-top:36px;margin:0}.article h3,.article h4{font-size:14px;padding-top:76px;margin-top:-56px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article .headerlink{float:right;margin-left:20px;font-size:14px}h1 .article .headerlink{display:none}.article ol,.article p,.article ul{margin-top:1.5em}.article li,.article li ol,.article li ul{margin-top:.75em}.article li{margin-left:18px}.article li p{display:inline}.article ul>li:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes-05ab2406df.css b/site/assets/stylesheets/palettes-05ab2406df.css new file mode 100644 index 000000000..ead0d849b --- /dev/null +++ b/site/assets/stylesheets/palettes-05ab2406df.css @@ -0,0 +1 @@ +@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes.css b/site/assets/stylesheets/palettes.css new file mode 100644 index 000000000..ead0d849b --- /dev/null +++ b/site/assets/stylesheets/palettes.css @@ -0,0 +1 @@ +@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/conn/index.html b/site/conn/index.html new file mode 100644 index 000000000..5709ede76 --- /dev/null +++ b/site/conn/index.html @@ -0,0 +1,612 @@ + + + + + + + + + + + + Connection Management - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+ + + +
+ +
+
+ + +
+
+ +

Connection Management

+

trackservers.q is used to register and maintain handles to external +servers. It is a heavily modified version of trackservers.q from +code.kx. All the options are described in the default config file. All +connections are tracked in the .servers.SERVERS table. When the handle +is used the count and last query time are updated.

+
q).servers.SERVERS 
+procname     proctype  hpup                            w  hits startp                        lastp                         endp                          attributes                   
+---------------------------------------------------------------------------------
+discovery1   discovery :aquaq:9996    0                                  2014.01.08D11:13:10.583056000                               ()!()                        
+discovery2   discovery :aquaq:9995 6  0    2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000                               ()!()                        
+rdb_europe_1 rdb       :aquaq:9998 12 0    2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk
+rdb1         rdb       :aquaq:5011 7  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
+rdb_europe_1 hdb       :aquaq:9997    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
+hdb1         hdb       :aquaq:9999    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
+hdb2         hdb       :aquaq:5013 8  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
+hdb1         hdb       :aquaq:5012 9  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
+
+q)last .servers.SERVERS 
+procname  | `hdb2
+proctype  | `hdb
+hpup      | `:aquaq:5013
+w         | 8i
+hits      | 0i
+startp    | 2014.01.08D11:51:01.928045000
+lastp     | 2014.01.08D11:51:01.925078000
+endp      | 0Np
+attributes| `datacentre`country!`essex`uk
+
+

Connections

+

Processes locate other processes based on their process type. The +location is done either statically using the process.csv file or +dynamically using a discovery service. It is recommended to use the +discovery service as it allows the process to be notified as new +processes become available.

+

The main configuration variable is .servers.CONNECTIONS, which dictates +which process type(s) to create connections to. .servers.startup[] +must be called to initialise the connections. When connections are +closed, the connection table is automatically updated. The process can +be set to periodically retry connections.

+

Process Attributes

+

Each process can report a set of attributes. When process A connects to +process B, process A will try to retrieve the attributes of process B. +The attributes are defined by the result of the .proc.getattributes +function, which is by default an empty dictionary. Attributes are used +to retrieve more detail about the capabilities of each process, rather +than relying on the broad brush process type and process name +categorization. Attributes can be used for intelligent query routing. +Potential fields for attributes include:

+
    +
  • +

    range of data contained in the process;

    +
  • +
  • +

    available tables;

    +
  • +
  • +

    instrument universe;

    +
  • +
  • +

    physical location;

    +
  • +
  • +

    any other fields of relevance.

    +
  • +
+

Connection Passwords

+

The password used by a process to connect to external processes is +retrieved using the .servers.loadpassword function call. By default, +this will read the password from a txt file contained in +$KDBCONFIG/passwords. A default password can be used, which is +overridden by one for the process type, which is itself overridden by +one for the process name. For greater security, the +.servers.loadpassword function should be modified.

+

Retrieving and Using Handles

+

A function .servers.getservers is supplied to return a table of handle +information. .servers.getservers takes five parameters:

+
    +
  • +

    type-or-name: whether the lookup is to be done by type or name (can + be either proctype or procname);

    +
  • +
  • +

    types-or-names: the types or names to retrieve e.g. hdb;

    +
  • +
  • +

    required-attributes: the dictionary of attributes to match on;

    +
  • +
  • +

    open-dead-connections: whether to re-open dead connections;

    +
  • +
  • +

    only-one: whether we only require one handle. So for example if 3 + services of the supplied type are registered, and we have an open + handle to 1 of them, the open handle will be returned and the others + left closed irrespective of the open-dead-connections parameter.

    +
  • +
+

.servers.getservers will compare the required parameters with the +available parameters for each handle. The resulting table will have an +extra column called attribmatch which can be used to determine how good +a match the service is with the required attributes. attribmatch is a +dictionary of (required attribute key) ! (Boolean full match; +intersection of attributes).

+
q).servers.SERVERS 
+procname     proctype  hpup                            w hits startp                        lastp                         endp attributes                   
+---------------------------------------------------------------------------------
+discovery1   discovery :aquaq:9996   0                                  2014.01.08D11:51:01.922390000      ()!()                        
+discovery2   discovery :aquaq:9995 6 0    2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000      ()!()                        
+rdb_europe_1 rdb       :aquaq:9998   0                                  2014.01.08D11:51:38.347598000      ()!()                        
+rdb_europe_2 rdb       :aquaq:9997   0                                  2014.01.08D11:51:38.347598000      ()!()                        
+rdb1         rdb       :aquaq:5011 7 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
+hdb3         hdb       :aquaq:5012 9 0    2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000      `datacentre`country!`essex`uk
+hdb2         hdb       :aquaq:5013 8 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
+
+/- pull back hdbs.  Leave the attributes empty
+q).servers.getservers[`proctype;`hdb;()!();1b;f0b] 
+procname proctype lastp                         w hpup        attributes                    attribmatch
+-------------------------------------------------------------------------------
+hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!()      
+hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()
+
+/- supply some attributes
+q).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] 
+procname proctype lastp                         w hpup        attributes                    attribmatch           
+-------------------------------------------------------------------------------
+hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
+hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
+q).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b]                                                                                                                                                                                                    
+procname proctype lastp                         w hpup        attributes                    attribmatch                                    
+-------------------------------------------------------------------------------
+hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
+hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
+
+

.servers.getservers will try to automatically re-open connections if +required.

+
q).servers.getservers[`proctype;`rdb;()!();1b;0b] 
+2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998
+2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused
+2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997
+2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused
+procname proctype lastp                         w hpup         attributes                    attribmatch
+-------------------------------------------------------------------------------
+rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
+
+/- If we only require one connection, and we have one open,then it doesn't retry connections
+q).servers.getservers[`proctype;`rdb;()!();1b;1b] 
+procname proctype lastp                         w hpup        attributes                    attribmatch
+-------------------------------------------------------------------------------
+rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
+
+

There are two other functions supplied for retrieving server details, +both of which are based on .servers.getservers. .servers.gethandlebytype +returns a single handle value, .servers.gethpupbytype returns a single +host:port value. Both will re-open connections if there are not any +valid connections. Both take two parameters:

+
    +
  • +

    types: the type to retrieve e.g. hdb;

    +
  • +
  • +

    selection-algorithm: can be one of any, last or roundrobin.

    +
  • +
+

Connecting To Non-TorQ Processes

+

Connections to non-torq (external) processes can also be established. +This is useful if you wish to integrate TorQ with an existing +infrastructure. Any process can connect to external processes, or it can +be managed by the discovery service only. Every external process should +have a type and name in the same way as TorQ processes, to enable them +to be located and used as required.

+

Non-TorQ processes need to be listed by default in +$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format +as the standard process.csv file. The location of the non-TorQ process +file can be adjusted using the .servers.NONTORQPROCESSFILE variable. To +enable connections, set .servers.TRACKNONTORQPROCESS to 1b.

+

Example of nontorqprocess.csv file:

+
host,port,proctype,procname
+aquaq,5533,hdb,extproc01
+aquaq,5577,hdb,extproc02
+
+

Manually Adding And Using Connections

+

Connections can also be manually added and used. See .api.p“.servers.*” +for details.

+

IPC types

+

In version kdb+ v3.4, two new IPC connection types were added. These new +types are unix domain sockets and SSL/TLS (tcps). The incoming +connections to a proctype can be set by updating .servers.SOCKETTYPE.

+

In the settings example below, everything that connects to the +tickerplant will use unix domain sockets.

+
\d .servers 
+SOCKETTYPE:enlist[`tickerplant]!enlist `unix
+
+

Attempting to open a unix domain socket connection to a process which +has an older kdb+ version will fail. We allow for processes to fallback +to tcp if this happens by setting .servers.SOCKETFALLBACK to true. It +will not fallback if the connection error message returned is one of the +following : timeout, access. It will also not fallback for SSL/TLS +(tcps) due to security concerns.

+

At the time of writing, using unix domain sockets syntax on windows will +appear to work whilst it’s actually falling back to tcp in the +background. This can be misleading so we disabled using them on windows.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/site/gettingstarted/index.html b/site/gettingstarted/index.html new file mode 100644 index 000000000..f0306b5c5 --- /dev/null +++ b/site/gettingstarted/index.html @@ -0,0 +1,757 @@ + + + + + + + + + + + + Getting Started - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

Getting Started

+

kdb+ is very customisable. Customisations are contained in q scripts (.q +files), which define functions and variables which modify the behaviour +of a process. Every q process can load a single q script, or a directory +containing q scripts and/or q data files. Hooks are provided to enable +the programmer to apply a custom function to each entry point of the +process (.z.p*), to be invoked on the timer (.z.ts) or when a variable +in the top level namespace is amended (.z.vs). By default none of these +hooks are implemented.

+

We provide a codebase and a single main script, torq.q. torq.q is +essentially a wrapper for bespoke functionality which can load other +scripts/directories, or can be sourced from other scripts. Whenever +possible, torq.q should be invoked directly and used to load other +scripts as required. torq.q will:

+
    +
  • +

    ensure the environment is set up correctly;

    +
  • +
  • +

    define some common utility functions (such as logging);

    +
  • +
  • +

    execute process management tasks, such as discovering the name and + type of the process, and re-directing output to log files;

    +
  • +
  • +

    load configuration;

    +
  • +
  • +

    load the shared code based;

    +
  • +
  • +

    set up the message handlers;

    +
  • +
  • +

    load any required bespoke scripts.

    +
  • +
+

The behavior of torq.q is modified by both command line parameters and +configuration. We have tried to keep as much as possible in +configuration files, but if the parameter either has a global effect on +the process or if it is required to be known before the configuration is +read, then it is a command line parameter.

+

+

Using torq.q

+

torq.q can be invoked directly from the command line and be set to +source a specified file or directory. torq.q requires the 5 environment +variables to be set (see section envvar). If using a unix +environment, this can be done with the setenv.sh script. To start a +process in the foreground without having to modify any other files (e.g. +process.csv) you need to specify the type and name of the process as +parameters. An example is below.

+
$ . setenv.sh
+$ q torq.q -debug -proctype testproc -procname test1
+
+

To load a file, do:

+
$ q torq.q -load myfile.q -debug -proctype testproc -procname test1
+
+

It can also be sourced from another script. If this is the case, some of +the variables can be overridden, and the usage information can be +modified or extended. Any variable that has a definition like below can +be overridden from the loading script.

+
myvar:@[value;`myvar;1 2 3]
+
+

The available command line parameters are:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cmd Line ParamDescription
-procname x -proctype yThe process name and process type
-procfile xThe name of the file to get the process information from
-load x [y..z]The files or database directory to load
-loaddir x [y..z]Load all .q, .k files in specified directories
-localtimeSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P
-trapAny errors encountered during initialization when loading external files will be caught and logged, processing will continue
-stopStop loading the file if an error is encountered but do not exit
-noredirectDo not redirect std out/std err to a file (useful for debugging)
-noredirectaliasDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)
-noconfigDo not load configuration
-nopiReset the definition of .z.pi to the initial value (useful for debugging)
-debugEquivalent to [-nopi -noredirect]
-usagePrint usage info and exit
+

In addition any process variable in a namespace (.*.*) can be +overridden from the command line. Any value supplied on the command line +will take priority over any other predefined value (.e.g. in a +configuration or wrapper). Variable names should be supplied with full +qualification e.g. -.servers.HOPENTIMEOUT 5000.

+

+

Environment Variables

+

Five environment variables are required:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Environment VariableDescription
KDBCONFIGThe base configuration directory
KDBCODEThe base code directory
KDBLOGSWhere standard out/error and usage logs are written
KDBHTMLContains HTML files
KDBLIBContains supporting library files
+

torq.q will check for these and exit if they are not set. If torq.q is +being sourced from another script, the required environment variables +can be extended by setting .proc.envvars before loading torq.q.

+

+

Process Identification

+

At the crux of AquaQ TorQ is how processes identify themselves. This is +defined by two variables - .proc.proctype and .proc.procname which are +the type and name of the process respectively. These two values +determine the code base and configuration loaded, and how they are +connected to by other processes. If both of these are not defined, the +TorQ will attempt to use the port number a process was started on to +determine the code base and configuration loaded.

+

The most important of these is the proctype. It is up to the user to +define at what level to specify a process type. For example, in a +production environment it would be valid to specify processes of type +“hdb” (historic database) and “rdb” (real time database). It would also +be valid to segregate a little more granularly based on approximate +functionality, for example “hdbEMEA” and “hdbAmericas”. The actual +functionality of a process can be defined more specifically, but this +will be discussed later. The procname value is used solely for +identification purposes. A process can determine its type and name in a +number of ways:

+
    +
  1. +

    From the process file in the default location of + $KDBCONFIG/process.csv;

    +
  2. +
  3. +

    From the process file defined using the command line parameter + -procfile;

    +
  4. +
  5. +

    From the port number it is started on, by referring to the process + file for further process details;

    +
  6. +
  7. +

    Using the command line parameters -proctype and -procname;

    +
  8. +
  9. +

    By defining .proc.proctype and .proc.procname in a script which + loads torq.q.

    +
  10. +
+

For options 4 and 5, both parameters must be defined using that method +or neither will be used (the values will be read from the process file).

+

For option 3, TorQ will check the process file for any entries where the +port matches the port number it has been started on, and deduce it’s +proctype and procname based on this port number and the corresponding +hostname entry.

+

The process file has format as below.

+
aquaq$ cat config/process.csv 
+host,port,proctype,procname
+aquaq,9997,rdb,rdb_europe_1
+aquaq,9998,hdb,hdb_europe_1
+aquaq,9999,hdb,hdb_europa_2
+
+

The process will read the file and try to identify itself based on the +host and port it is started on. The host can either be the value +returned by .z.h, or the ip address of the server. If the process can +not automatically identify itself it will exit, unless proctype and +procname were both passed in as command line parameters. If both of +these parameters are passed in then default configuration settings will +be used.

+

+

Logging

+

By default, each process will redirect output to a standard out log and +a standard error log, and create aliases for them. These will be rolled +at midnight on a daily basis. They are all written to the $KDBLOGS +directory. The log files created are:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Log FileDescription
out_[procname]_[date].logTimestamped out log
err_[procname]_[date].logTimestamped error log
out_[procname].logAlias to current log log
err_[procname].logAlias to current error log
+

The date suffix can be overridden by modifying the .proc.logtimestamp +function and sourcing torq.q from another script. This could, for +example, change the suffixing to a full timestamp.

+

+

Configuration Loading

+

Default Configuration Loading

+

Default process configuration is contained in q scripts, and stored in +the $KDBCONFIG /settings directory. Each process tries to load all the +configuration it can find and will attempt to load three configuration +files in the below order:-

+
    +
  • +

    default.q: default configuration loaded by all processes. In a + standard installation this should contain the superset of + customisable configuration, including comments;

    +
  • +
  • +

    [[proctype]]{}.q: configuration for a specific process type;

    +
  • +
  • +

    [[procname]]{}.q: configuration for a specific named process.

    +
  • +
+

The only one which should always be present is default.q. Each of the +other scripts can contain a subset of the configuration variables, which +will override anything loaded previously.

+

Application Configuration Loading

+

Application specific configuration can be stored in a user defined +directory and made visible to TorQ by setting the $KDBAPPCONFIG +environment variable. If $KDBAPPCONFIG is set, then TorQ will search +the $KDBAPPCONFIG/settings directory and load all configuration it can +find. Application configuration will be loaded after all default +configuration in the following order:-

+
    +
  • +

    default.q: Application default configuration loaded by all + processes.

    +
  • +
  • +

    [[proctype]]{}.q: Application specific configuration for a + specific process type.

    +
  • +
  • +

    [[procname]]{}.q: Appliction specific configuration for a specific + named process.

    +
  • +
+

All loaded configuration will override anything loaded previously. None +of the above scripts are required to be present and can contain a subset +of the default configuration variables from the default configuration +directory.

+

All configuration is loaded before code.

+

+

Code Loading

+

Code is loaded from the $KDBCODE directory. There is also a common +codebase, a codebase for each process type, and a code base for each +process name, contained in the following directories and loaded in this +order:

+
    +
  • +

    $KDBCODE/common: shared codebase loaded by all processes;

    +
  • +
  • +

    $KDBCODE/[proctype]: code for a specific process type;

    +
  • +
  • +

    $KDBCODE/[procname]: code for a specific process name;

    +
  • +
+

For any directory loaded, the load order can be specified by adding +order.txt to the directory. order.txt dictates the order that files in +the directory are loaded. If a file is not in order.txt, it will still +be loaded but after all the files listed in order.txt have been loaded.

+

Additional directories can be loaded using the -loaddir command line +parameter.

+

+

Initialization Errors

+

Initialization errors can be handled in different ways. The default +action is any initialization error causes the process to exit. This is +to enable fail-fast type conditions, where it is better for a process to +fail entirely and immediately than to start up in an indeterminate +state. This can be overridden with the -trap or -stop command line +parameters. With -trap, the process will catch the error, log it, and +continue. This is useful if, for example, the error is encountered +loading a file of stored procedures which may not be invoked and can be +reloaded later. With -stop the process will halt at the point of the +error but will not exit. Both -stop and -trap are useful for debugging.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/site/graphics/AquaQ-TorQ-symbol.png b/site/graphics/AquaQ-TorQ-symbol.png new file mode 100755 index 0000000000000000000000000000000000000000..312cfc403e2c0400dba7121adf42889e0700b83f GIT binary patch literal 125149 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
= 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 NB_=OgB5dIIKL7<74O{>K literal 0 HcmV?d00001 diff --git a/site/graphics/discovery2.png b/site/graphics/discovery2.png new file mode 100755 index 0000000000000000000000000000000000000000..14d350884a83fe7f29b8477475596620e9210389 GIT binary patch literal 37928 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 literal 0 HcmV?d00001 diff --git a/docs/graphics/simpletickdiagram.png b/docs/graphics/simpletickdiagram.png new file mode 100755 index 0000000000000000000000000000000000000000..552d5572818c0add3aeff796c2275a3be2ae6632 GIT binary patch literal 16225 zcmeIZbySq!_dhyFNec=LARsDI3XC*Jmx6Sw-Kdl_(%sz+(w)*ncT0EIeFpWd z@89?PS@*8{`~C4(xskSrF*fZ4e0I z`|Vr6FT6Ny7{GrB7P6uOpuC>@tH2i|J$?y(5U4N!<3bY|_>N}wQpExU!ft~9A+(uh zXoEmJN3VqV5-^duhgVnE19$XGqP6=katPiL-UYNTXJrTFoi zIAT-}FNe$DDO6c+W*)h?=n0Y;kY;_2rKB0Q>#{l!=s_hBu=!c^p6WY{B zUCyJqE>J*xcL7DI6<_Rm+JJ`SZo<=Ed_Ip z1~HQ|qRbA$3JsKT9o+P8ftYE4@9QV0p0~sJ&MvDOY>Ci7IPeuE#iltL@L!^NO6_!k zKBl3xf*vQV@8}pRC2%9vfj~PTMwAB#$a-``t!9hLXup3!C71Nl&g-+X1xwum*#Zh1 z=sM78^emoCvX!q2H4X{1gUN`JAXpVQIM!yNK8)x>^dyBjT)*O^9zg>QICxaexqXRK ze@NgzKa`D5U7TTSQ-cu;$bhMcY##YnsL${DA}Hg45&IBYHPjeUG`QhYfsqxLyn%@t znDzF6xUh{2tDMi@woCth4tBL`0Dn9LRFbp;GI>Vu&my0mS&x`FVGyCWf^txO5q^N6 zj10fYz1_&0zCihB=)dWye%rG88n7*b1`L@KHVV%cl_hL-E};@qbvx z$?lTw51S^KBekFZT4!p>NS)u~GX%5_91CYX_&dfgHtPwh#Fb11|HGp!y7E8N-?f@y z{6ierZm5#UpC!$p8MVm&Ve|BgGymenoxxP#za{85w}m}X5U|8H#eM6$^NYy^w0{Egzu*=_9w}Q0`sZs>!>AHgT5~~*NIN|rPC}Yu_s_c@-V6hU0!BFVVKs6;|bCqbvFQLa*Xudrs$_=qq0A0ihQ+dMMV~S5W}?lEnwQl zImRY+9Y0U(753JTr(#ygoOR1;<+RL7Q*V~kOk;l^yBV~?7VFPOo>@~8=Km*!YgG7K z;bN=I@c*8uN0-O<-)ZWOj|@iHs=wzxV!c)0U$Q|FgiTmQB$j-aoDeaDo=$5B~8j z|6bnf??)AonB2b&ShZn{_K(#506JAV;0BWe=Z;7aKIA($&{TpjMD$NT468TRTia`ozQ;aR{p!|A~tE-x~N4VQXu|Pz{**i8hojEC**ZMI1?INVwwSUa(YsXuGqa2L!Lc{sA zv8$9rekTD@Yc2Gx3Hk!1x5B|Q&ei)Cbvh80=!>}XM>=vd!tT__vU52ES^l&V-cjOM z?GoNetB=n(;x%SIg2j@%RJ5I=loT`& zhDjRv*o;ZmgZXMsx3*`(Vqf##BdOGE^|V0YVX52~Y&6W)mtR4psyVkcyPoMLKf2iK zm{OA1E;ZO~>z{*aDFsZFzo($Fvr$$Q!5qwN6cnZ;GE}`f6VU%|0`L%3{DDj7j!B|G z$gNB>Me)gTG;9rx71 z@p;vC1bJLblC3y%w6YTf9twd!)+#tsAgfvANWI zTH^epOWneD`E@q#bhT;~`bFc98DC-YhKwxH#C6uz>T9>HM1MT6vg_Z$c3}ISLrXK; zq^UG|GIM?9;nZAZOa%nVkK5NDj$b+|w^Q|I6L!|~)V(1ZwOCo6ot)g%37108em_XN z^^(@-b?NXX#{+GnH!|rNMlk+yZKT6Xzsl{BS4jwonsbQSOrs|l;_0O=H;X1HI$z99 zCyw@cag#wY=0{Be^5Xir3`UBI@xLjkhdRi`^2GIi4$gF{ixfbS%0Afh5L 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 literal 0 HcmV?d00001 diff --git a/docs/graphics/torq-logo.png b/docs/graphics/torq-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..767a5cebc1262fecfe976d59b9ccce3a7be1ac81 GIT binary patch literal 18931 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 u + +logusage.q +---------- + +logusage.q is probably the most important of the scripts from a +diagnostic perspective. It is a modified version of the logusage.q +script on code.kx. + +In its most verbose mode it will log information to an in-memory table +(.usage.usage) and an on-disk ASCII file, both before and after every +client interaction and function executed on the timer. These choices +were made because: + +- logging to memory enables easy interrogation of client interaction; + +- logging to disk allows persistence if the process fails or locks up. + ASCII text files allow interrogation using OS tools such as vi, grep + or tail; + +- logging before a query ensures any query that adversely effects the + process is definitely captured, as well as capturing some state + information before the query execution; + +- logging after a query captures the time taken, result set size and + resulting state; + +- logging timer calls ensures a full history of what the process is + actually doing. Also, timer call performance degradation over time + is a common source of problems in kdb+ systems. + +The following fields are logged in .usage.usage: + +| Field | Description | +| :----: | :--------------------------------------: | +| time | Time the row was added to the table | +| id | ID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication | +| timer | Execution time. Null for rows with status=b (before) | +| zcmd | .z handler the query arrived through | +| status | Query status. One of b, c or e (before, complete, error) | +| a | Address of sender. .dotz.ipa can be used to convert from the integer format to a hostname | +| u | Username of sender | +| w | Handle of sender | +| cmd | Command sent | +| mem | Memory statistics | +| sz | Size of result. Null for rows with status of b or e | +| error | Error message | + + + + + +controlaccess.q +--------------- + +controlaccess.q is used to restrict client access to the process. It is +modified version of controlaccess.q from code.kx. The script allows +control of several aspects: + +- the host/ip address of the servers which are allowed to access the + process; + +- definition of three user groups (default, poweruser and superuser) + and the actions each group is allowed to do; + +- the group(s) each user is a member of, and any additional actions an + individual user is allowed/disallowed outside of the group + permissions; + +- the maximum size of the result set returned to a client. + +The access restrictions are loaded from csv files. The permissions files +are stored in $KDBCONFIG/permissions. + +| File | Description | +| :---------------: | :--------------------------------------: | +| \*\_hosts.csv | Contains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed | +| \*\_users.csv | Contains individual users and the user groups they are are a member of | +| \*\_functions.csv | Contains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users | + + + +The permissions files are loaded using a similar hierarchical approach +as for the configuration and code loading. Three files can be provided- +default\_.csv, \[proctype\]\_.csv, and \[procname\]\_.csv. All of the +files will be loaded, but permissions for the same entity (hostpattern, +user, or function) defined in \[procname\]\_.csv will override those in +\[proctype\]\_.csv which will in turn override \[procname\]\_.csv. + +When a client makes a query which is refused by the permissioning layer, +an error will be raised and logged in .usuage.usage if it is enabled. + + + +trackclients.q +-------------- + +trackclients.q is used to track client interaction. It is a slightly +modified version of trackclients.q from code.kx, and extends the +functionality to handle interaction with the discovery service. + +Whenever a client opens a connection to the q process, it will be +registered in the .clients.clients table. Various details are logged, +but from a diagnostic perspective the most important information are the +client details, the number of queries it has run, the last time it ran a +query, the number of failed queries and the cumulative size of results +returned to it. + + + +trackservers.q +-------------- + +trackservers.q is used to register and maintain handles to external +servers. It is a heavily modified version of trackservers.q from +code.kx. It is explained more in section connectionmanagement. + + + +zpsignore.q +----------- + +zpsignore.q is used to check incoming async calls for certain patterns +and to bypass all further message handler checks for messages matching +the pattern. This is useful for handling update messages published to a +process from a data source. + + + +writeaccess.q +------------- + +writeaccess.q is used to restrict client write access to data within a +process. The script uses the reval function, released in KDB+ 3.3, to +prevent client queries from modifying any data in place. At present only +queries in the form of strings are passed through the reval function. +Additonally the script disables any form of HTTP access. If using +versions of KDB+ prior to 3.3, this feature must be disabled. An attempt +to use this feature on previous KDB+ versions will result in an error +and the relevant process exiting. + +permissions.q +------------- + +permissions.q is used to control client access to a server process. It +allows: + +- Access control via username/password access, either in combination + with the -u/U process flags or in place of them. + +- Definition of user groups, which control variable access. + +- Definition of user roles, which allow control over function + execution. + +- Deeper control over table subsetting through the use of “virtual + tables”, using enforced where clauses. + +Access restriction in TorQ can be enabled on all processes, each of +which can then load the default.q in $KDBCONFIG/permissions/, which +adds users, groups and roles allowing standard operation of TorQ. The +admin user and role by default can access all functions, and each of the +system processes has access only to the required system functions. + +Permissions are enabled or disabled on a per-process basis through +setting .pm.enabled as 1b or 0b at process load (set to 0b by default). +A permissioned process can safely interact with a non-permissioned +process while still controlling access to itself. + +The access schema consists of 7 control tables: + + + |**Name** | **Descriptions**| + |---------------| ------------------------------------------------------------------------------------------------------------| + |User |Username, locality, encryption type and password hash| + |Usergroup |User and their group.| + |Userrole |User and role.| + |Functiongroup |Functions and their group| + |Function |Function names, the roles which can access them, and a lambda checking the parameters those roles can use.| + |Access |Variable names, the groups which can access them, and the read or write access level.| + |Virtualtable |Virtual table name, main table name, and the where clause it enforces on access to that table.| + + +In addition to groupinfo and roleinfo tables, which contain the +group/role name and a string describing each group and role. A user can +belong to multiple groups, and have multiple roles. In particular the +schema supports group hierarchy, where a user group can be listed as a +user in the group table, and inherit all the permissions from another +other group, effectively inheriting the second group itself. + +A user belonging to a group listed in the access table will have the +specified level of access (read or write) to that group’s variables, +e.g. + + + |Table |Group |Level| + |-------| -------------- |-------| + |quote | headtrader |write| + |trade| juniortrader | read| + + +Here, users in headtrader will have write access to the quote table, +while juniortrader group has read access to the trade table. If +headtraders have been set to inherit the juniortrader group, they will +also have read access to trade. Note that read access is distinct from +write access. Headtraders in this circumstance do not have implicit read +access to the quote table. This control is for direct name access only. +Selects, execs and updates are controlled via the function table, as +below. + +The permissions script can be set to have permissive mode enabled with +permissivemode:1b (disabled by default). When enabled at script loading, +this bypasses access checks on variables which are not listed in the +access table, effectively auto-whitelisting any variables not listed in +the access table for all users, which may be useful in partly restricted +development environments. + +Function access is controlled through non-hierarchical roles. A user +attempting to run a named function will have their access checked +against the function table through their role, for example, trying to +run a function timedata\[syms;bkttype\], which selects from a table by a +time bucket type bkttype on xbar: + + +|**Function** | **Role** | **Param. Check** | +|------|------|------| +|timedata | quant | {1b}| +|timedata| normal user | {x[\`bkttype] in \`hh}| +|select| quant |{1b}| + +The parameter check in the third column must be a lambda accepting a +dictionary of parameters and their values, which can then return a +boolean if some parameter condition is met. Here, any normal user must +have their bucket type as an hour. If they try anything else, the +function is not permitted. This could be extended to restriction to +certain syms as well, in this example, the quant can run this function +with any parameters. Anything passed to the param. check function +returns 1b. A quant having general select access is listed as having +1b in the param. check. + +Further restriction of data can be achieved with virtual tables, via +which users can be restricted to having a certain subset of data from a +main table available. To avoid the need to replicate a potentially large +subset of a table into a separately-controlled variable, this is done +through pointing to the table under a different name via a where clause, +e.g. + + + |**Virtual Table** | **Table**| **Where Clause**| + |------------------- |----------- |---------------------------------| + |trade\_lse | trade | ,(in;\`src;“L”)| + |quote\_new | quote | ,(>;\`time;(-;\`.z.p;01:00))| + + +When a select from trade\_lse is performed, a select on trade is +modified to contain the where clause above. Access to virtual tables can +be controlled identically to access to real tables through the access +table. + +If the process is given the flag “-public 1”, it will run in public +access mode. This allows a user to log in without a password and be +given the publicuser role and membership of the public group, which can +be configured as any other group or role. + +The permissions control has a default size restriction of 2GB, set (as +bytes) on .pm.maxsize. This is a global restriction and is not affected +by user permissions. + +Adding to the groups and roles is handled by the functions: + + adduser[`user;`locality;`hash type; md5"password"] + removeuser[`user] + addgroup[`groupname; "description"] + removegroup[`groupname] + addrole[`rolename; "description"] + removerole[`rolename] + addtogroup[`user;`groupname] + removefromgroup[`user; `groupname] + assignrole[`user; `rolename] + unassignrole[`user; `rolename] + addfunction[`function; `functiongroup] + removefunction[`function; `functiongroup] + grantaccess[`variable; `groupname; `level] + revokeaccess[`variable; `groupname; `level] + grantfunction[`function; `rolename; {paramCheckFn}] + revokefunction[`function; `rolename] + createvirtualtable[`vtablename; `table; ,(whereclause)] + removevirtualtable[`vtablename] + cloneuser[`user;`newuser;"password"] + +which are further explained in the script API. + +Permission control operates identically on the gateway. A user connected +to the gateway must have access to the gateway, and their roles must +have access to the .gw.syncexec or .gw.asyncexec functions. + +### Usage Example + +To connect to a permissioned RDB in the TorQ system, a group and role +for the user must be established. If the RDB contains the tables trade, +quote, and depth, and the process contains the functions getdata\[syms, +bkttype,bktsize\] and hloc\[table\], restricted access would be +configured like so: + + .pm.adduser[`adam;`local;`md5;md5"pass"] + .pm.adduser[`bob;`local;`md5;md5"pass"] + + .pm.addtogroup[`adam;`fulluser] + .pm.addtogroup[`bob;`partuser] + .pm.addtogroup[`fulluser;`partuser] + .pm.grantaccess[`quote;`fulluser;`read] + .pm.grantaccess[`trade;`partuser;`read] + + .pm.createvirtualtable[`quotenew;`quote;enlist(>;`time;(-;`.z.p;01:00))] + .pm.grantaccess[`quotenew;`partuser;`read] + + .pm.assignrole[`adam;`toplevel] + .pm.assignrole[`bob;`lowlevel] + .pm.grantfunction[`getdata;`toplevel;{1b}] + .pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}] + .pm.grantfunction[`hloc;`toplevel;{1b}] + .pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}] + +This provides a system in which Bob can access only the trade table, +while Adam has access to the trade table and quote table (through +inheritance from Bob’s group). Through a virtual table, if Bob runs +“select from quotenew”, he is able to get a table of the last hour of +quotes. When the system is started in normal mode, there is no IPC +access to the depth table, however if the system was started in +permissive mode, in this case any user who could log in could access +depth. + +Adam can run the getdata function however he wants, and Bob can only run +it against sym GOOG. Similarly Adam can run hloc against any table, but +Bob can only look at trade with it. + +Additionally, any system calls would need to be actively permissioned in +the same way, after defining a systemuser role (or expanding the default +role in TorQ). The superuser is given global function access by +assigning them .pm.ALL in the function table, for example a tickerplant +pushing to the RDB would need to have a user and role defined: + + .pm.adduser[`ticker;`local;`md5;md5"plant"] + .pm.assignrole[`ticker;`tp] + +And then grant that role access to the .u.upd function: + + .pm.grantfunction[`.u.upd;`tp;{1b}] + +Although the .u.upd function updates to a table, there is no need to +grant direct access to that table. + +### Gateway Example + +The gateway user will have superuser role by default. The execution of a +function passed through the gateway is checked against the user who sent +the call. This should not be modified. + +Within the gateway itself, access to target processes can be controlled +via the function table. For example, if Adam in the previous example was +allowed to access only the RDB with .gw.syncexec, you could use: + + .pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}] + +Since .gw.syncexec is a projection, the arguments supplied are checked +in order, with dictionary keys \`0\`1\`2... etc. This could be further +extended to restrict access to queries with the +.pm.allowed[user;query] function, which checks permissions of the +current user as listed on the gateway permission tables: + + .pm.grantfunction[`.gw.syncexec;`toplevel; + {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}] + + + + +Diagnostic Reporting +-------------------- + +The message handler modifications provide a wealth of diagnostic +information including: + +- the timings and memory usage for every query run on a process; + +- failed queries; + +- clients trying to do things they are not permissioned for; + +- the clients which are querying often and/or regularly extracting + large datasets; + +- the number of clients currently connected; + +- timer calls and how long they take. + +Although not currently implemented, it would be straightforward to use +this information to implement reports on the behaviour of each process +and the overall health of the system. Similarly it would be +straightforward to set up periodic publication to a central repository +to have a single point for system diagnostic statistics. diff --git a/docs/index.md b/docs/index.md old mode 100644 new mode 100755 index 3b18e512d..9783c06d7 --- a/docs/index.md +++ b/docs/index.md @@ -1 +1,11 @@ -hello world + +

XO141LOhA7`%DN&ZVMlW++ptwu zi5RDJOQ^a2#DFOLo6-8+N19P93G#?fzk@SILOGZtdDdRWh{tEKRelnZC;oNRgIgFL z26=m^2g(Dz_eNJEuujwvH%XH^U2`bsH3`c6o8H7K2Sq;31b72j?|^_C$?}~cj6FyI zf7Dbj3oP7lxT#Al5Xid*1H)1u6ZglJ5bVrNdul6i3mv6%RLcb+E_{F5;=W%cfKz2a zy@o`hXPn;Kd7aym^Pm#Whum#$Yy=!z<4PX~3Nkq(ycW&2Z>rrPOn#xkV7oUan_3Oj zn~~>E`0y&U5dIc0!Vd`Jl>$PxY=H}Rc}VJ_9Rt*bLPL5g-ANIL;*@4%5ST>2{Qe=L z8INNfrh-vqRy;;)0rAzZ?MhM~PM$=Ik$$FrH9`P(jqt^Y3gTfthO?0}G-f$%Wo0}m z@)`q>kHn(Pq-D!nzn)Yn-32fd2lAm%5oJ1vK`}i3dNNehKxXYVy)`y^c3ITX!n~sF zAC=t@Sp#fg3A=F~89m~%CSf(rPRix0Qql79itR%%v8+$j;;A4q^=0mSreu=k*HW73@+mHg zv+D5!LK7Afy+2g-IfvZF6VZB^V#p$23;a=d$cbSGyxq>~6Ll7W1g#!C^ifAPuyDkg z2zs4n>NQ(=6b!lHhjiuXvVh+Ld5m$1s)1mTT05>tQIunHD9BjGM=?`UipoInA{hlh z83L}TJs>6|$93EISh%>7qZ)dqRO4gFwwd^xK|MYCxs6*K8w(c}8gCmFHzA=};O|<2 zrl8rig5XB1FCTY2Md|}d0PKM6 zg%v@)d@v_Ce1>7-kBOG1EU}aGoi-Xt6@;f6NgDZv(xN)j%=pJtaDWu`rGkwk5XlN* zOMx0Q?Q$~#5gKDDxt8%jf3YkKoK{4Ky;MHb9s~SSR(JveoHaXz?Y(-fwXNo@Bm9ea z)=iB#h(Hk=>q@XF*g1w}ZkNbNT2*K*#`;9&Gg96PRTg}0aJUm_Pv+0g^;mK2wmornI7dFL>%0A0A{Yp0asTU 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%0DEWUD@r+wI!!{^4)L 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 literal 0 HcmV?d00001 diff --git a/site/graphics/fullarchitecture.gliffy b/site/graphics/fullarchitecture.gliffy new file mode 100755 index 000000000..b57d04263 --- /dev/null +++ b/site/graphics/fullarchitecture.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":389.25,"y":752,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":60,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Example Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":558.5,"y":564,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2,1],[-2,31]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":595,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":13,"y":693,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Discovery

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":452.5,"y":356,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[104,134],[104,46.90809452078793]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":490,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Data Loading

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":127,"y":603,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":121,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Housekeeping

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":10,"y":603,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":119,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Monitoring

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2.5,-1],[-2.499999999999943,-106.14394894619477]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":0}}},"linkMap":[]},{"x":113.5,"y":547,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.5,0.5],[140,0.5]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":81,"px":0,"py":0.5}}},"linkMap":[]},{"x":13,"y":510,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Report Engine

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":176.5,"y":420,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":40,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":331.5,"y":423,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":283.5,"y":664,"rotation":0,"id":101,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":150,"height":14,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":216.5,"y":653,"rotation":90,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":180,"height":50,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[],"linkMap":[]},{"x":253.5,"y":768,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":325.5,"y":508,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":34,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.289321881345245,2],[219,-104]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[2.710678118654755,5],[161,-102]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-3.289321881345245,1],[189,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":271.5,"y":543,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[11.289321881345245,-33],[-160,-148]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}}},"linkMap":[]},{"x":284.5,"y":509,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.710678118654755,1],[-224.5,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":1}}},"linkMap":[]},{"x":253.5,"y":510,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[156,130.50000023841858]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":25,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":146,"y":195.00000023841858,"rotation":0,"id":65,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[107.5,46.99999976158142],[-62.5,46.99999976158142],[-62.5,114]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":60,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":22,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Write Database (WDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":136,"y":185.00000023841858,"rotation":0,"id":38,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[117.5,41.99999976158142],[-76,41.99999976158142],[-76,144]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":0}}},"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":0,"endArrowRotation":0,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[0,-3.5],[80,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":0,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[2,-3],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":433.5,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466.5,"y":329.0000002384186,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":10,"y":329.0000002384186,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":59.5,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":486.5,"y":309.0000002384186,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":506.5,"y":291.5000002384186,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":33.5,"y":309.0000002384186,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":273.5,"y":490,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":622,"height":843,"maxWidth":5000,"maxHeight":5000,"nodeIndex":149,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#010B14"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture.png b/site/graphics/fullarchitecture.png new file mode 100755 index 0000000000000000000000000000000000000000..b5a5148a7f80a6cafce106c39933d270dbf4e061 GIT binary patch literal 108103 zcmagG1z45K7B>!?O>CM?BQ4!2Atl}2NC<+6A}tMjgMfgPQqm!%AT1~@ASg%+NOy{K z*Ejo|d+xp8x##=;pNHpx{qA{Z)~s2x)^Gi04UxLqDg?MRxM*l-1Zt{^`e$#fQH71rlxqu(8uamCbkXPkBM+u$!FScBDB|d$}vMIM4qjP}=$069`IUe2KNMhxa(kI>N7(BRMU(4lf@|N7BXMT0wj&dLAEhz9xV z2i76_pAQf=7Bra1y@A2||LGY4U7-2*Flgwca0E0>V9iko2Z8plA32B{!M{Hs5HOe= zM2pH(g!(@NGa~D;{w;-E>oX`Lk_}%n4gcR#K;q@@V*Di%gwaMGJRrrQ)57}CWK)SjN*UK4C=uA%(aO8hlMkI0GHRm?Mm2B26Bei|lc9?N=5lHnGcm z6uNK+=%7^$NERskq*xRuH4W_;x)c1$Kl4vR)pg&DKDmrDJMl?Efs*js$p=jYrJ|REui&ht~hQ z9Y1Mnh8#bJiW?9t2-wG3$~~ogxz-lc^n$x6%P`Q1cL>o{bG*g#$^O%=02z3c`x*HS zh*-=7I(Fiir$T-GJR6OL*aQa$f#@dz9sg@&8#y2a1{S6fuu#xq1-gKXj#|58prGjo z&uRb56jpJ-lJMOx767vc?f$g1|7zE$iRJ-m!l&&7>wLlrq_7SrkAa|HvjHKl=&Wl9 zff{ZDbDEidq5ogq>Vik%xY%46z#hUu$8U3=*`dB>3<8qfWdf6zQ2`zQYh(mE5R8C| z%nN}!_NO*aW_;zuwx^2lA7XT{Crxkbv+1Z?rWqC<9rj?b{jme(q`)}!Qb1sQ4Map> zgyvoK`P;E2@9i8ZS1;dj0-<;9X;-Ku$0ky&HMg|>-cSs;a`Simk1}1}J!^WK( z1TWsfrnpa9Dn5;D*P15^`3f;SWPJ-my>tcy-e{*Q2m!0lQnA`C@$*K#Ms+t2_lG$oXtr2<{O;7yK*X#{^(|C=U#8uF?i+4QF~D? z7%ar49fAf}6pLJIvzUP7%9`TS2f38QDI|aF1QlSMwEVOLUI>ou&W0RX!?Nq2f|tpWX14E?ke*3o%MX;Smtuxvf z1HDx%({J5kMOT8z;=a?kCPlRhkPZ|LyeShe7r2NRy3<+;X5$beHQ}rdn%jlZ!5vF| za&9r&+(NyrM7t#_if#d0nvnxKW#JHOY`6UY52?OGQ`e@NHXk|dE%d!(Xwn^NNr#O^?MuZtGM(P1%hXC34QE^V} z$nhg8oW+oPs^(NKASV!rpFs8BDcowtMu1Ab;L5TLnC{9s%e6j6X((EJ;*k^N1H4<| zGfK={8+`1|8yJa%5C=9eq{qSF(_s=HK4dKnUL1VF3$Ld*2O7a0L4#@nSM2z$B7e|< zHAi*sJd+8jT#sc6Y01WfiOBQlViOD81gfIWkG++i4A#{&Hv&q-Oq2}fhHMlD(|$^TeTsb@d7WKp{8g|$g?kK z1)+%7V0zza18b%|p=7WC9UR6#b%8fWluBCcLaZx^lbQ6vO49gZ65GCNtyt%YR@Vsm;G=Z% zpUJgyA?Y5$S#+;=G+-GqS#p;*ku(T|1ZoIs@0y7>U`>8;vsM(UaZ(lioWc{Qfjed( za@ZJcgn-?@!leB!Du(XOvNM>kGLq+Iakkw}a{D>?x0Irv)egEZS=6S&8}6?QeR5yM z_1dIyNHJ0Dcz8D3s^i$lFU;w-&@nnoKz+uFiH&X0b+k3bmo8kvo87ZHk}I9WWv2hC zaq$}zz9v}HO$FRFCYTVesyGyS5r)WwM$O1QfNR(cCzloLY|oIv^~1Ade7SUVUW&jl zmwVSWjS1r{E1k$QWf|0@KY7)rvrCe*bTpcJM zKgmjx8^n8_C8s4HfpV#L0Sxj)r_n}7w`R5BMoO{#(zJz@jui`P(a2gIG?TyZ+K9O! zwzlcglJAR0q3U+#(1Ek*HswEl+;qHtvb#7^Xv9sk(-Oy_aCSgON2k@&o23=nLZzO> zZIt(*KT9w4?9f)t@>zT`SR<7Y=e3Eu(iX!^1)qF_O<;s1;@<~ z&WVyAB}9>N%HM3hGEd(B$&Rt?yPI_VKE9P+5WZG?m40=a zlFVnJJmzw@C|%5Du=k+>r~S9Yx0O|B@(`oN&qxqaX@F;R!YBKQL?pnZQd()2qM+_N zHq~re#S1;;YrBhG2Z{$+$vkEuLpbXjI}@9RHLCYE4p-6-wpYH3EcM(YYkn#!O>S#a zqHaWUwXBODHT?w_jGso!(Av+a(Q7ZVKnM5Gfik_bOh!AziGts9fWefuWwlrO6Z(CSycT{?VvxdD;};g+nl4sSMyz@z6Zpxq!?%eyJel&k5^)y1 zliLnv%g>^Vv*J7Wipu12tlUfsn~?s^>y``VXQM&y^Cs4+p;zMA@Zx03Sb(Dkfa}w> z$m%A5;%l{9!XC4QyZfddcXq;8`!e$fCcJEGGcjZQyUz}`C^x-%!d?|>Cgl|@)hXha zSv3bpBt!RH1&A)MgzP?Dx>j^s6Joa<(Ue)VWX=4#Os>snZI$B;lG40X?zgJZ$Km3) znr}R7oJ_g8dxCxFe~l5b%nhfare3eO${5R%_Fvwq;)cQ3a78mvfS4TYWn-2EBAgR6 z5HthoLiar&H=fV;4a#1~v1%k%JlgvDioIlUvwZmNa?kRBK+kCK^`*+gp*Ojf4c^03 zr~41TjFgOe9Bs|&obInudYoVxY^8~I5=5MTymNB*-?R#ZFBAx z*HWD9WnvU1x3ZCSV3O0=JC)%g&D<&`Cih*{t+T_2oiACdR(BV5WGatFIemGr7KsK) zPmt|<=gr4ir7DVw&)Uyi#w(ET?>5oAYj)xfV_3~$*X8A=1t2>|8qDTMGvOueS@%AR_MJrfj<7j}1`~weERZH`;!>fHDm#FT73Wy>&+uvFQ54R|@qXEIK&gCsC%q z2KDic%1u8#tGeH(DXWtuFZ+Uqbp`r9{&YO+Q930N`)#gSX5=)7Qq&URWcjZ_EPdka7 zCJVKAV6-P+iw>eqHEp?(3K0bPb0KXbdA`CQ{d~R-73?*>zjx2w?VAciqs~Y7W#&nb zW%b3>MxU#k{Jrz&+=VC13|1!##aE3&sS)K3O#%^mye3&h;#eM#9}AyRx#NF3Fo5lv z_Tj}JET_0rdCY_cLz6%MCbQDI*qK+5P`p^coxomLjSS;y_KBSkN?N2%%G8x{`W9Dy z1zX-;JJyE;w|^!!Ih~gRxb_%;tLepvY5<6Fd=wyoxX=5N0GgvkBO`*afn-eN6ce$M z9^L8z!)K+3EB}Gn;!b&K0gSqV1z=VoNVP?r*9KjM;T5ms1X*6Z;YX*(4F});4TR~k zROt8*lH&Y{D(nVHi~k2z7(pg0q2XySkqI>4n-F%vVC@oYLp~u8uTcn)%(>>r0rW9z z{GY(02?3C@9SSM;qHtiW%)}E(5TWhDX#W8zD?w%{+S>v zToylZ{B()~V!{SUp`QUGx>2F@0^JtL^?xCc|L=i~VUH~`8IflZ*6MS24*C58&IHCHWYYu+ZpuSM`fwpD_~xo7`5o= z)!<_q?}B4_32a=Q@h|iTbomb`$N4Skzfev@7}J>wL=+9(1BI}Ke>>Ky!8qXK4O*hA zIq2`vlUsN9ufE72v7TeT{jYR&7&NBgKKRF>ZCw6XY2>ag2bJ{y!rEV~6=~}eE;U%y zApXWskdI(Pdli5#vP|;}80Dg%M^2V8K2|7*W{Sq%+m#^~n2%b>MzD}8G1BHwP+XK9 z=0Bx8ASd`t1av8-dxKcu2Jk~anPZRA(tvrEs!RRL__73oZ+>__D25LprzQ$=P7LJF z|B;0okNo2jR6KYDko&y64J-oyqMOekUTEkBC{+pla;!0ffz3wFGJrFNNNmNVBE0qY zArm5l z@tBB+C2=Qrjqtn}ILVCA9`0*@P@$7U5`vWc4WDAu)}%0VxP*0pHee-8Sm83F-@paa8%GSlq7Z`Rlay0Q0KV!su+vXnL=OOyhCl;* zY(Wx582lGg_BX!jPeuz3ryfNr$|x)Wess4I58DRWwH#^dS0lk4+Xlkb}0EC7k z$aRXDH1A_V7;VhKi^Jjc1lZ`aC?0TnJa+|%^aY?G5p5n_QsDHGfTUb^<^@ok!1D;e zr=?*3!KWdhXLq}G?}5h{DB~C4D2C%8VFM|u(vnB))?YxEn)^r@d%0`%d7%6NKO^=QGwtigz9 z_NIdz#5*oPj_X){a}dVo=)m9GuF9OK*aBKO;gFhv5&xY&-f8s)))y%Dv{(Z4;RbXa zLy9*7SUNcrDX6Y1j*p^t7Jynimj9$r8IdxSLWUrBX+;2)Vd3Mx1$-^BEIQzkiBYO{ z1=Qt0V0bs+$6I?q3oESH1r%=r0`mZWdz3N~5ez2q51icqU}JR^QoC`%i#6cILIP{^#bKyGE709h6dpRVjG2gz6btfBqjo*^AUm3|C>g{LQ!%yy1J~y zXvh=L+AR!d41qWYUH=wVBm^&70SEk#oFdCW%VP8>(320an}ORIdbr@laPT6{XGLT1 z;=kh|@s1_X?`#a66CtokTJZN`2SgMwV7eeG6vN2~f#IMbeSlise8K1^v_Pr-Vff?# zsR%HFztKZOxWF(SU`PBfHwrjU)tnS$zBrgz3z*D7Peq;{;~WDt$l_zD1J6%QqWr9J zQ4Z!knq796Sh>?mEzVc$1$J|!h>KaOM z4}qTP*XWuM3s55?^y1dvmAqTqeE81x5bH}Av%-Yo!GCd_uLgyzJ;-6S2guYOWo!;VDzdd&?K`SX zo03H*&g)s6>o@P7Dh59iE()@XNeE!CQ}s^^_~NlLMQdm|ZbBAXQ# z(e_NC20Kxwvr04F^oz4E!RF&i3#muD#%vC&9v{h7JeoPi~3Ddqw1M-M+MPSQ= z6M?lJ39z>%{EBbmIBFtTU1keAJw3g}=|~w=IK3mI_Dp=$jb7Robz7;YZ;QUC`F`dh zb}4Yl@X7tss4m@k*EciLPqio;2R#dZ5KpOF!-SMn&&jye=1u zOo5d%7UzN7eEhH+s(!Q|pXJ zg46q}y8d1wQFIpl`mat4eaLFr3+buJ!XPzHy^CyzO*9*AU)WR0?(kIhz282dUxH?^&)nSK&LL@RtV)DEtGT#QeLly zmPq^{?&`JhMFgeZTPNU&zfIaSwoLA1UR}(zQCJACA`206@=za(l>UjOSJH^`r#>lG zTjOH62KdM4lim!2s!T|OmF+jb%X;*#`HVO$X}T=BsNSOsl23^Ei#Vt4=l>$1mE0yf zV)10s?NhbM`bEuA>Lx*{-o^=L`+R1^5(+zLd4vvM3l>z0mTP4~&${kvZ~dszs7a^N zdt|2n?iO9XQF^RFlL=mwPDTF*yQ40;&W#0Uchl5W7_)>*D>bat>J~$o&ae5q=;G$^ z_@-2%#deOSBl55X3UrPjTytXI zuM)0EnvetyLE15&2zGz^tQooa!%9gWi1M_z4XdipK~;0OE2~fj_PK9u6$D0lrV%2j z2usD|4I3t;Lb2!Nk>Pb&F3rk|(z{F*?o$tHyq8_%A=oe&?JsqTLK$rMTIP-dz%FKS z`iw|FU6t41#04A%2(NT&xM-T@8}RCu%G>CdOM2cEg22}nSmzs|PrWNyJhB}US~;l* zkJ@`c=!>|c^h&Ok1ohr3FOM;F^$pf`Y>wf&5F|APCRHC8YJ720IdywSy@NzGC;Flc zK7P~iG0CEhxR1%R@2&zY1LPy|awf&6UnD@BdQR#DgQO9IEKNN^21VdmP-^CxOdJ*B z@_sTHT57KQY)r~w)w`rNa&w~D75DPCx0KQ2Lo8PHMAcpxEgsBM5G!7evQ5I5hGjs_ zM#fW|WgsFX>}?350h+9Rm0{cqsKCh<*1Cv~JXT&G{7-2oS{!7^%SNB$nmDUsT7S81 zI=y_caN1Q@mVfg`%J6(kir!brGR`;mu)i@|b#_g5Jic7zDt} zGb$9o@=JukMnWaOLD4gDIHZwbcJC3?f7JrK8!0Meh^ZP~=&OzPeB5I$`B6GUduv9~ zSKXxWZYQ^HU!Fau%Dhmbh?07y(=Y!{8Q+6==D1(E`w`xQKSL+i4`#k6@-G>Evt~*R z;r>xrgZx<F6@xTcWUaY1(XyS0-~7gd-kZ)n5R4G5Wr(AR}K-=byj_nen;ZnQ}Q8<Q88zacJ2XtKV$Ky6+RI{{ZKWp}ZfYBji=$Lt))-BJ0l-_t<$0a8wl{U$KbN7Cz9) z9>_oU4r`qz$(}sed4DqXQSG=B5{oS#wLRUaeC%RX&@je7JpCwTE%qdh&x7z|JzL-h z#&4<8ab$~{cTU#}?qaHH9!1y1M0~z}Q%l;MlhOHYup~2B0b<$6EX9P}?6eBWUEXUj zz3GunG2!uYO-ot{nDj?NMr1Q7_XrtuiY-UgX8Fj)Af7n>drMq?kq*7V&o7xJ&p{=@ zW50_v^l3Z6PeDqmFNq5*E$ok@}6we3U1d$%i4qf z4%?Im2QOM=0@Zn*Uih9V29P@koQX$eNd+nD4i> zd56O?P$y3aJ1FzX{lGX!0UU|~jdxy}v`m68-RT2XI`g{JKDrsTFs`v&i0wVq<|?Ct zcwgpS+@I_`*7Bdz|BNZT zQw7(~mMNAej_0L3huNnkm6}M|MtIt?Ftr9pPjQ5?vPZi1)`Tj1$LIL`^f6uCL3hJa z2jK;Y*BPT)^vVq>SGX|GUHMRy1uLK|7&;pIQywCXLunR@7{uX#r@p(dABN}u(PI}#~Edo9woCl_SP z@a>0vmS^OgqtqTNwLLa74=mSzU6lc!#?J$G&YYAdaBK=T(y6>G1EH=7qBvABh^^1@ z80x`k|{I z`;P53E}*ZN=r6voUmF!Q16ISf;h_z7;^UpErpBgr+BwlDo)QG`V!WqhxS)6dxbgeb zqn>7^XUk#uMv_h3OMDMP$QR}(({1&-zvDe9*qLgkRjVtv%4sm+|B6Z4Xr4?NZo1OH zn-~AWR>sm#u!Yaz-t$zKE|1?n_U`V2>;ezJ87BK81r@5*?82Q$*)`b0JzueyGSp&A zEzU1>eamP~Jw@2!Ob9Uy2(ibTtnFne^(@3s+R`sN3zqLDr;hn3^tvtedwmpmW}>hU zNfqI@FYx5Ir<`(E73_KPyv|)&Y9)&|cQDJR9jFE6IYx!_V2j zV(iBz`+Q^=K)#Q@Oe-r`7f1Q5JB-Qpceedi_V*17L6!Jbn7NE?Urwql$0|H(`*ey$ z?U~`XQ^ePf1yVtF-GshW38Z^M)Jb$r#y|-&^uGg4#+cdUljS1TX-v8PBhUK zALj&yI`*#%ceQ@Exh17($7=sCURPU_Lr?{B0*iH(u-&`FL7XN7@lM>h#%^7y{Sb11$1IG zEP|u|_bl5n@e8R&ixcCT)JfwEp;dnM*ZUMNJ!X8yNxx>H5xv^a_{vS9vi|LByDi`H zou3x3^Btd0;R%?0O<5i|kA4`P*t!cM>u!i2AM%HzE0IcjTT#gui*K&3sqHW2J1vxW zEIQ;MmiX9rAeO8}v%a9FWjy~r@s1?&8Ou&5ZY7yjq&PF?s-z1QFNNIH3n|{CuRWUU z)mUE%UJX0+vE7QMV3?8B>3zM}bl_9%IPSFnN zBwN0R(p``;V?_&4EG|RJW~g$+Rrq+%a+X|X`kYCp1&b?W1$Yai|CbvtgYNxNq2a>; z;G`cuBl3Oqe#h&0IUU`@$64`m{d-Ek8ErTqfa0Hw=K8Q{U;OEHr4SFoVl|I_;K%rF zexxNW1^I;km;HI0%1V)!`%w8Lf;vIkUs6(;fLYjp(sza+=z&=TP{WI{uT1T$pih9& z&_)9`!ssyx>1;-;we1R29%30@wg6TDR~73v6z*7o$dP26Q-k!gR;D+%8)So@ccCC zZNv_RVEJtx-kM|0iHh{P=Kwp>z*TeJEgjq@f)_LRC*nh_*lpO6&P+%vqEcks)sxtk7(uLO?VaGhu0q%a{rb%kTPo=;^9vJZ5sf~^c) z%^hY$(nB`e9y1~7pGBA6X>|lx`AZbQB~3nneLsI^>s66IKPPOs=xi@u?;+LRR*edO zpnx*^US+cvrU%55W$hAlGV>r7en(CWRS)!6*%C<7=`mDuHh)REv9S!08cL_LvkX)R zB;3ZKib8-Br$#m4K@@JXy3&V-CaH>S%Vx<(EfqG?J<<)YL5E@Cz*8BS%jrR$&GkeJ z7qDF+B(D(&P^H6C5s)qhSWX;jjk#FgR|4z;Y!tcDK{*7s<6!8TO8GL6H9*Z^l$d&- zn$43+N%34DzpdBKCKch+-I)p?bbA{g{NM^iux(+LNXDES=)9}~8+v4ikB5@^GNc*a zNwar!>#V?>u@>9)&&q$5`|*)hq_m3N z?NgE1{ruWPe&^*tNq*P*CXsADi9whC89wz=|4^Zh$^#u`-Ff|3hJelF(l7_3Jv1B%ZjR_fz=d!NhDAVx&- zlb*tn?P%naW2`^6S+;dpEQ_v02&*eN)iI_%cn*zSoS&02pQh=MMzUHxM z#Gp9&lrHBOV~7QN}&DVJX9&VHQO95voT~r&yc#zN^>Tl* z{wH~;_h1K!Z1>r0vv2gLF&Cwn+ckv_<+TN}4!y~%_%!lWH99rgT{59_qA9EMgLX8@9AK< z+Vqw?S{o)svJSC%EQEz7YnQW3n-(U36N-@cIxT$JO5^gvkN^ui1R)Er2b8pswWU&~ zq%k>sT%nq+3K}%9OK|3UdiNbv8JFqC=(ZhAgAH5Y{vab4*UFOU)`)Vl@BP_3>d8{C zX`3x2Tq-k6O!M8OH!foBC)4z@3G)+6^!4kG&j+g49_SCT;a?+zGQ=`v)(+SX&-X~V z^gk(OyYQM3N^5W= z=RLEpY0NS`!hI(4rl2LRfFUSNP3y);&JpisPrP<^b*e+(>8nw`G{s2K)VPhvO#n$z zp=H<*p33p2?hUoM%y_jS%AY5;*5Va;y=pc8PNRSNHfgK-v3XN$`0)*n;4dNL9&`SC z_r&jwA0Moi@BfPZ9?yC6vSy9a&sueEhtrP3LN|6C-t7UI{iPBbbe5c#tu#Dbq+_pR z8{Vq9H-4yLq6T~Xvo@dV$&8}H%vEa|_9{Q?&KIpgj}sX!Qz4audKM;&*Y;*c9mdgN zOyG{dlfmSgL`ei^pB zy~1mywODjP2=m;2+4hs4SfBv01Ra; z%vRn5l4L4|$IDt5U&%oD9=^)!Y({sH4#9sHcDT#0# zrGdK5!S7ueQbt2EXbnpa4?gGEr-m-povD)HgCG9c>aeAID5c^#UI z6_Azat8qS}9!(hKxvM@LOvSF`ejXm|xF;q%G$!0-u=2}ny@T`0c4+rOvJ z_9@`-)7t5#+>I2SB6s_!p(QiC_4L8vwSnZYny2l?8$W`J>-pKD=s$Bf4PDW_)%{RU zD|zd81}M)?zHT~FwgMnnSDBj8h8S`LAGfSFw}g8v&us356W7oF@`EJN*FLaan9guB zc-Z&sVO8(M_ZxcKIb-Nfm^xr{^C-+lqjj>E^^`+H~-@+2X(il4uzKXqS)LQ z{FwUL$>n&k46t3!OwM|x)Qu;%Z zf`QXb$9mSpYa*j#-5}5>DURW_+Q_*Et3h8;g=kQIj>2fAzhEQUkRKne2iqg|2FN%K-b#kWt(FPtN6{A6l>HQJZ!3Q&Nn5%?zK^~QY_sVh zOnDBkCSzy)@(Ou$=icqlYu+tT zy~6~OB~NXL2guN11lZZ+=}O*vXRZ~S&=+2XUhU5K*f+QZc1N(_Yr?tmN_W7us3>T7 z&2MG&U8^*c8Z>`tM?cvt}4M7cMBD0J!%3Z*W~|in$e4 zUp7V}lhXPP9L5E-w|Urwhu#+F;W;Riu=NKt4>5erT@H+$KfDE!wkK92v0rO6(rjsuOR^6^RoN@F0b%Xt zYM@smGxzT0x?EEL-%0|~BK*k1GH#G8GvC?H#)6GJKaB^c{yQD^iDD`_C-;XqOzvYq zCIGaU7qM^VVyOtU=NjhHoa{|VAO2%;we702K$_^*V%}G!)GO74ax_c=52o)))W3Y*(?muh}qJONIC$9IQVdJulvCc1@eO zHOyyFw%)IUBtW%4eHS!UbJ&ahZh=}YgXk|7W56Ulora&FojT@yEw*pn`9P zPXh50a*lO?H|n5;7n7*oU(^G+{Ek-$)Q_z8Z7(le99(=c8jK2zXGVU1N1hXQGp*yb z#>o?U!YqDcY;4qq`VNy~pP_<)VP5jao7|#|q}3 zcR-GTvI#%u9r~Aa`jal5@`Mb_lxR>7y{YH{GZnHb(s>4zjL|$M1xMpypaSJjiH_hW zpHzC}S74;58$LFlGZt<$1ElXX6AYRDbdK0_&|&w7_COze$Xcj@#wzLLyd!}H-d?%v z0n;PT9qR|vd-m_?{grjwpo5c928*KT3@PlJv!5PTDCL#eiIhb;}12_-F5&O#$0JYG$=?O|GixOCUJ_87E z(BiWCb^e}q*(2!i#bMU~X)2?{F%hbAYG4vnMTjy3llZrWKg?yd_WfxR;GWGfzoL%K z=QkO*7gjQ{<)N$Q{+OqaKT7&Mz7atk7Ilng5gs~uPkdZrYBayh#j?${A{yEhOamkV z!~bbvASS6cQ5gQNo%xrYt@1Cfw;16G(q;&7rNmZba^t`}VYvqE;1uVx{qs{lSF!KS6;(PSTKdf@L=Gt-sa#rE{h+!5P6k_A*>@QFHY!-@ zSJ?r`T@T2m0pz3ed_&(ihi!?cub<2WDuT*@NM0{}{qP#jCHiRJ>VlNn{Q=+Cb3EGC zf~aL(4}!4h<`aXZ17bAFBa~cMDg-9#9#+;iUKnla_PHl<7C*KxA8FGJ%b2Wv-M2lZ z$u9Q3@>avhyYFj zGSqm&zQ4mXpls79BbJ9`GCh7_2Ue%^U#nvT>3SM5{OM!%VzpvbjVQW_jfzYbnzh_asAtsYQ9ZgfC?BWA?3t2^ z+7&YrOnNxJx@#+HY49OJz-ZZ@;CoB^~l!JosvQ;WJ+69xA|PR3?Gx(DP2? zgusj+eSvbcrYcdE zLgoRy+Scs@xqQ%#o;muY5|_y;HwXK`P23fzWT^QVN}KZ$P$ww-=bAPmEZ!f-mvvWf zH))knQhn-Cw|jS_Qo^!s5Pwi%KsJ+ikl^gVo`?<-Url%nPg>LT!pD#G$ zYFIN34tH?}eSF>VWACq8fG(ni2N~TSI-vMw!L`SWj%%fbV8bc_OXuf8HN3bxTWD#r zK#dheiw!TVa;Qs{yYDr0aUgOyo(FVRiYRke}^ch0^G)1#B)_iR=_dm@$i z<#>MUzUlvQ;hJ@f(|F>L@c1=kZQ<}dIjfa;*2jA%%g&^@vn#q25;qCI3sMJ>%V@r| zud~sEHq`f##^F(~hd-C6nMXWVIPYi-rj|y|G{jHyfD0#Va?9Z2q%vbdj1I{hCfk%< zcVtTy3)k%acIoVFL&3v_KH2Yg5*A(wtFbH-Gw>R`9a%5)KiYk3X@4!Fv{%n_MQwcG zq-L4jSa0GwQXU-HFS+?>g$GXcMkg$T!|Pybdc?)EUMe&qP$iIK!?HP^RH8npxJ+)J zSTLGVxEj!!@HNT1{Mj(zWyJsVGGtJn?$fid=i-x2+^=G7dS{-dIJh*a&~X)YfS={3H7layUE6r-c5z-mtK=xK2j)%Y& z5eQsJ{j8zfXC`eDU6%N|SUqF>+eyd>BCCUA7!%^%a!|0;MGwTZutLy}hq7#zdlh%) z)47~JK&mIU0|NeFH3W8bhd@L@M<<86wv-^ADP%AYG+skL+NQ47?>Y>{&hRW47Shm7 zU3U@KZl+8NiCLZA-e~{eo-KQmm0tfrc;h7@%YbS^WD6hI$F^Y+FTwf};1n|=&b2UE zXcx%Pvld6UCqIhVeWmcVYI({evS-<|;nD;@KC7jwc=oxIdsaN=B8T8`)6k%NgT?f{ zkWPGE(e5a75|ld(V*wONkE}u36x0B6!h#wSw_X-P;Dm0GXypN0l8%K^DYHCPL60|m zW?#?D>aNUuhMe@q{XGmS`6DIb2EuSKPgr`v%~P|Exg0 zCSo?ZjoaE+R*IgU{zti_*F)Wr<%@;F3f}yv zYdNVz5#Z8McOj=-xESY&>u?(DF>za1L#>5Zze+>NPYq@+a>tJNpCH@6%76=~#d`HS ze^a#xQ!5zv{oH=teQ0FZ%^yp;mBx`KS4Y>oE)8PAI}1elrB^@RW_EY^fHMc0PACy8 zDo_*a-a$J~2iGqZ4ImfBBr~KsKe57C1xoMfIT?$#1f;yLj$FO?Zt9jwaTz$o73^E} z;H5>2jb2!_h+E@3(9!#s{_|3Qm;O7f<1kHv?^#%dZ|%h%cRy3_E8en9s;ZsoPdAiE zC|!DDvYb2P`X8JwlGg%E{mAOUeH_RxD5ZDu44nI$Mtu^|h)DU(TT}v$%>A)5IpaIa zePe|5F9d#V;!DuJLzQSNi~QZ}8kIq8>`$m(@Q8gf^HHbKtx6~&p1aNEWRBNhZv`ij zAzAi$_Somp5L8w7$l6}(-)sW)?-P(vP_iugN%8M`28G;mXz-H^xxDz9J%+)Cu17)l zfY1{9U=D<^xuEt=P$Z5jQJ2%nImfpr{QKrY75o$Zo_XWZb!@I7?fsZ&x8F+hV*lLj zLMnH|s)hK@>#9|)wF=V~BGp$&08Bd0eBV+A(HmBX?DqF2f~8Zs@wcUef{HxX$NgBG zo;+Iz7>?r2I1!B%;^7Imwa#gBX<1Knu=N(8b!bxIU zxH>2p1E?lI9v1{t%h>-_G6L;*XKS)Pb+n(3{1JzkUGiPS3Pq!DOdYXGaV>t;V|^we zU-YRs6%#NMTIgjf5}w?Zd1Mm!o3(WC14Gi=i5DmSH`#z`>HXbZpd%@9DlT}lC7*%Q zfhU&)8rG3fF(o-`^9FvWXnmp(b(eX!K|3FtP5s-Pr6Y_lXrA7r<)uyo$C?41|)$S;oNa>ar#b4yGR><>IiLiK^ukIf+cH-AaF(j>i~m{MSs z%m#Hiz7B3#$p2BPAjo8c>Br@--YIq}kCb+qBywsz+1Z67H&glt7QSLUBj$U>+AI-} zdruKu7avqY{7(-dXyu5@QZ1R&+9&7ehUM*Db9tmlBM;?)joIdx(jf|~nL-^|&wy*@ z!}|M{CnkpaTrm(~>~GA}g`4^1#UI=h`29-R-Aj-NZ(r(86S$(4kMsAvjX*GhN>WC1 znJv7Zc&2sIe&~nI9LCoU>jaO-4?UbloS)D9U;>N4^uPO)6B!x?CCpVn{9Np{J!q3B zj67XDA4)bF22bH|anscaViw(Zs1eE4mM|bN($>plft$4G5KVAC+be-Pbp2%ujVu!u zaB1xO3GNG0I~7`Z*gIwBJ;e1aXmP7cVA)mXDimZa_QmhBio>9M zm;SObSxvFA*-f@4G3nm)1K)2Sb1F=r?W)-yH-vl?GMJ4OEpZd=X`n~|&TI<&%L>mp zhQ3=w$bwh0MdZTa`k5aXBDd~g!COd=XOj#ZCnwCv^lQnJd}~?B-wm`%$u*7)DNLFS zWN8Ht{Eop}Tb{^VPdb}kzMX9Hom%_RN{|A{Yr)5mA5)uK4EU`Fl+=@$ar&#ge z?oeDxvEuGdad&rjcXxLy?(Xhz^PPLobMt5aNV2oDW!{-JYpoGIf}h{@Q(DDvx%fx4 z;|wvFkjWobn6NrE-Aoa5^zXSjs)n!1^y15Wo1|^2GDmPMxg4fR=9}F`w*D)rA>UKB z4C)mYn1`Vkf_YNH2}UTC^QDB}J9XsSL3;xZmk+9>%vu4%7DaVK&S4w99r52u2#uzc z!)sx%5`~hvEh(jvXn3H5tIXz*t_#D%8QW9H6R3H_`FA7I*E?-PDs^~iu$|Jg=?i6Fu~#8|3Y%R+hQbFI2YX;wS9{{ z0~b7F%2hgBm*4gtBfQ$FyCTb9vfgNoPL2bFC(>+52$21hSE^g@8t2-me zO3Qoh)Fd;WCSfscA*-XL-ozwcgEY#G?U>1Y*5i+^UmlgritxiQK;7`*|4pU8t?-}4 z33JoY`Yts5erZ#I18$u(<=QeDZq4Q>)y=$D5Fv?}&oCinqh0bhYssA~TZ3g4-GC$( z`%2*c?eQGdoy71e)CU|gcrDC+b+$rf+G?iDf4Z2Ub2vPpX!U$2TW|Fe^ymQL>LQ>U z?Zr%OCe`l831x5cN zZA+Rux&{Gaz+X-1@5&r-xoz6Eo!8(*AOZ(tUP2F0$&0bDs6N4}XsK%!Id_th%qt2( zA(fsSODQclGnE+AZlj6##pQ$1-Tep>%4^!=_6fZ|Z}vvRsZ=j^&h>fu!KBg#)u{ia z2s))GasbFYRIoOX0=+m$7g+B?d2`EDG*Ml~GbLheGkuaWJgcVAE*9mE{_N<+i=$L_ zw`UuFcDx%v`r7mcZgq?XG#1UOY7UcO%RUExXmEgSX<(ibu~e6ejF?;1BW^ zAgLa#<249zE-ChO6)$ug$b$>YIEs{ZluHD0DniBiNw(O*H)vIkm>>*U_C4ziNcL7j zHQkjm(WM0qOnHkQ4RW$6WyF~xD!iq7m`&MjJGzUpwEK1h7|<)&n$1xm&vz>4O2&X; z$GAk^0Ao}lDQ)#h@`PjqQ%;>kV?_8ok5@HEG`~M5Md%U+(Oph2pz!MSF(P!pDa5*` zX@%4a8%>FPS?QfznHr5J-n*K*4o;l?v#~zu9*){7GG8624wd7K1MU_fqb1pJm zT6e^^b;-9zOmcD3eii5Lcv6Py_U;J5ordOUWtzC?jbpVtvd3C!^GSPb+)JZ5+yj`9 zxfnk)7}U^ed%f9x93Hyz4t$Ev?rsCEc4jvl(8YYy`*H-I)V|o7{xse{ryqWAq zE_wo98?S}AmRzYO3!ks|pE-0aYr2ZSyD= z8dBa&xF%G8*;gL&7B9ou3^NpIP^-bERR6s`3?S2sGSxRHm4n-j@}}i@&!hXyE)7Tb zYj2pGi>(9+6Y@x=-U6?nE=7mkBy+3BMX|PMyW=?+VYbw79Ei_nh5QWbw)3RV2qx-tvbo(ly4*$ujEZhKY{{rpa8wt6E z^(M82%^QgeU=l*7i>j7#Y6JZ1%Ug$TcSNb?0-d8T+4r`$IfIz)TvDjP7Bk?Za7ZAS zyoCmAxKX|U5IasxUuE{5{dD+K6ZBPGhk+4Zemi;~yQfbxdfyUOC)B1EPiAHpt78V1tmrUu=1} z)+}ygzWr5AbAWNuLunxr7g@J#-KJV;x)UR&{?Uazfic-%3d`jq^lKEyFjNXt>USRw zMqKM;#Ca%LkwhGBrwD{ghFC!`(r1#V| zF=<`o8rVv}kCJuDQwsw0Nb7SbMbD1Y^#?;I{(LK%=>b;6Q^4HAe&`3f<2bb31f zAr|}Se1FGSsWt_3xGLz7sNBIa!0EZaFhyNT zpld-yP+HiTXFPcK;!r_mR1)23Q~f|Xe<;(@>BgOu=G2q==irn2hH%Q(I1*o`X=TQz z{*X9@e?whLH3;|X+xV9)(cMooL@S-Kg;7T$Q<;3=cEeDmkYV|MPDt38F+phXF1IPB z{SWvha*b2qrdtqMp7s@~>gupg{n(PJJQA3fSTOMU-B_&@LxHN0$_B{|aQ-YhccUR} zI`p#HAGoIa=W);#ta)N&PT&3CXsAmGKJB?lX$Qgs174Jxmy^RpY!a1UnHW(Lr?NalaKWwu{?RXE_}tK<5=>nld9cFqd!NahsN;CNI5Nar6{ z9c!exS~=4rFE>F{$RENck>~lm0kjI0exx@GbnS*|NyfJxLaS^{9#!fkujD^2Yv5NfLQ(xzvL%nBas_FX-3rU(j$gQ0dZdfboCuGbx2j+{mrHq6ztU9f1? zYq_z|nVP*=B0j1qGx%!o(U0DvbNYY4iHPWa`yfYuwO%ef_O_z@_{&~FFThj??zby$ z5F}1$#DKb!;9Pc6j-<~YRdm)pDHj*3scaa2!U~|&+4bDkp3bVKD#tMj6Y4@eTIt0J z^%>Z2-;uUDTm*aI5MQoiPzOdp)g7Q+-jB&DJ5%No77;7$kW1#1P)fzCAGp5EB0aOq zFNW8Q7VGdQ58hdBmz>JqdOSA>wevhzoZ=iUHrzVwj&fad2`@2b6q*|(Cv64{yJH(6 z(b7LK(NYGa3~)Je51|ZFu<~PcRD~TKEZ9ebCcXuJ(IM^5bLsLK?KpISJaG_#1<3HuOfJiC5lq zNQn=RZ=QdvG_8LYKaC-&uKQa&E-{G>BN1r)RoCZucTVwIOZCg-tsB-8qH(+tVawJf z=}`Ki(Ef!Ri$Xe6>H_jVZPFOkpYKw!Y%S5F`SBtiPv*J(ApzR8`joYIN>^%%3T!yo zgbW`=9+^sabtZRb#~5z3{5Pj@)NVI>EPSqS!#5#r5>a_X3iIEtU0w7%E@uDRen!4k zPxCc9D}UMCh!$=}x!BBQJ7!hZ{GeuP!scw+-(NI9`F3r0Dzme{$n+4+y<=muYR7_d zWnRv|oLsn5#L30gIOkB$_ zazHsWe(<`v$UA{-sHDEnp!H^;%jeP) zVn$|$Ol9(8O@YR4qcH?l-=0&xuCz0;A6=EKCP6VF_yQ5a!JWcr<|g_qIjx^EMFh`M z=w10KOu7Y!VWRt)N6&T?I-b}PVMJ^N#Yay@G_JYg^SldLcS;8LeX@=B+itgdD(O$# zy`Mjoe0QoeyQY{9wvSVu0tFmh>iz|qU=Xh3$nnHXY7Lvu4MkGpAbgsDnXLDC+M`g83 zqr&r&MT0U|Y2-mMV2_7dG?yA&!3i5S+6`~s66>TloA5EaZzNydDr7%#qQklP`OIRd z|H$W9u$YOe4Ew{++3&vo%pVs1PhO2IDg-&e@MdMton8tqT`|ssa;4o`jh|^?>W9&I ztX8M1uvZpW(pwW}T-}rim~D0OkYcUy3OK|V4V?_b5fNxVd}1mCvZBILbN+3As@sd@g#DC}7ToLF zsuamY?K=@ao=y2Y>P-<=D$gTY$3X>dsIy#J9JP(?0G_N!zciT zy82!evK#Pc>pcK(pgk=fVYr<=qMq=qmY`5^*j7KU#x8$<>`eZ-P4a7pyP=|YkMyg( zbRlPd-!yD>*sc6Q-Uu|FNDlmXYlTgqH5FJplZl?nGUTfNVsss0!+)^ddsD`1I=@CT z?&FSZzegtsRxE_vtDzkZb>u!?Xk*-RRnD%bsU1zq>VCCT^dQ^!7)?`~l$zPsMcB|| zv5)ivr%b;_6U&0NMG5r`Mlu9Cv(9D@Rr~*+(2B<&F!X{3`2i)@5{0#GKi?h?xf4~J z{HpSi^ZS->b4qF_i>?D=GPl+75z>?EHxjs_8QCuJ)a;PTaw-u%p3Ar6a6f&=r@1hp zxb7(bqI^4*aJkP%47U6u3#1R}5kdvqK{%K2{}}0l`+A;v1EceNHn)?B{;5;LPds2B z%fr(CF7p>SXgg5-RFTD*`taT%@o>|TtZwl=M3?C!O2B(xUaZD1smqPdllu>srvMf2 zz#G*Lfcz{fQS8XmF=C>@Uy>xAi`AJ)^os{e#|Z8oM9}T z$J`Z_zxvl$(lYJygh-sg;Fh?zg_QoXvQORbk;oQWV)rX3mVK5ZkvG~;Wn4bMh2>7|-{{3ePxH={t69nw^cN}lGwPNRBg|&`%v{pE!!Iv&r?`h64&3G@c9%c5 z-^kQUYz0|;)B1)T@Z=#+qWACgFrxPKd^bo$@EWAQy$k!7lNkA0bpLJuU#033c>2IR zTGK8&UK-OuE#LTWb)cEh24!g@2uW9Z;h9S z_qJrK&~qc&`6H2plR)^KaiOvRus;=h&lyI_6|pr~xEZr!!lNhuAQSeQ?Edtm`*1*P z71_-f?k2N2p~1wz?F1&o5M>bu3mowuDfok3p$mDOKl&msO|XSB{moy+i9T6|g#J~p zl8n>M^C@MP_%N+2XOd=nR$gx?=O$G*tII2>o$Vf;vTgm%&16*5It$DqGuy7T`Lcpy0w=V8JHJp>EyW0ni^=lxwp~xz)_adBm7(51 z6Ftn(w}mvColK>P-HNTEi8s!U2!Dod3=A3M9i^(|TM*X#$j@09YX@rwMc#LlpMSs1 zy|m<&NBp`jTij!yCB68g7G%jMdvMuN;|^8P;ZxADgm@&w<0^6H(;U?@wEh#$y#8Fg zViOnaFZyF~3+Qp3`TfW2kFvv~%+i%+PIe^xMEy8zSIR}Jf*c^@RS$!K3-l!zw5M1L zH&7Jrcpx5get!{)?eM*nt$%>Q9!*I3cq?uDPJ)d=p6Rs@3c9t?HfJCZ%ch+V<`Hm% zSP3T1D5!WmKCbO@o~+|7X1*b?^C+z&6XWMLF_D%gZgks7TW{@B#gnD%$KNviFBf1I z@vB*|Zuj4lDL%Zi!|?3$Q{ypV*A4wH;-%O9gAVwbtD?=<8@~NhTbJw1otU~zVeGlz zHJ6o%QzFXJB##i0N7!Ul38k`b%C|&%&ufl-7^4CNO(Ki0LtYF=5tIoYl}KTfDA^Ix zgJW)o3~#k-+Aj|gVFqbF_;&o+VBs9gqtbYr2aOg#_zL-`6QI*`eyXJ91M!X$ILuBX zcIPp+Hav(v_5}`Fk<-6@g02ec&!=%;l|GiTxaE0_OmDDy^Ts$rQw%apI5K%EEr<9L`PM`Ej{iORn< zbAek;|4g8xt7LR_)Ya}_>@?qn<&)G&#D`ry+JBJ$sohIe0gFE2 z#rlkM-vo!0xi*O3qvY>C2B70Ui}CC9zje%&(q5P9>&dM7UwdxS+O-Z1DLem$GS~Z( zTU^(*rpzC@S-H~qsM2NKmyyYhg#)#pLQSFY1->n9F*IkZp_9_rTCL%%>T$oy<};MRo-d*T$NJO6?KtRtQTK>sru$Eb?@7ysh-a#RPfh*$2#g z3rw~qEaR;%<-8P@RguYls91c~wM>%v{L4X)hX{YyF|A=9?mnvCqkKUV1~jW~u^(qe z`YqD>=dnn`z(e%mB#%85Tur}*^7u< z65mXr^8gQ9c~?j~KhgfqB5;30C=Rw*lh7gqqxp*R{L5#=A`=0FTEWlKr39(2S#2H3 zAEOii_fH)Wt)H@SRrX~wxl9R&mh!~))n8z}&%ye-hJR#(1?tbelA};%R&9`WSyNpH z-c00%{2jB|u&U+ntsaMLu_kcZ9X7Fzl^K%Ys$GUuRZF>I@e<<_vi0S$3Vcw47YW+n zgMzkC59oK6Us$yHk(?EB1dmDjBqxy_>lFCONK8b9^6^b~c^1^}nahYpt1LW98hZ*< ze~7%$kpDc_l!a}oh-Ml+fE8<*c3PCFK!1A0T0*q5p`7w$o~5&7v(6r2RUuMmTDqX; zASC|wM?3h31P|w%ocpH+^~OL-NN7TpJh=2%+#q90OHX{Ah0nO)L6SL#I^0B^umKlRSr$FOWX zU(~*Uu2d`IhJvkwb+gOmxfr*jDJz9s?EK45gpI!(X+QXN2Fo`(q&)KLc{mwo0_I>t zI9qs~4Wc|6R_lu7sr70`cizWT2g=rk1_q~G&o%poyf-&%nO2sfLBt{TwxuP!)pj9G zLwD~^I_04w?yjFO+@v4PyQeJjISBD(`oS(iHh*dkf5ML@wozYu2$8!3c&noHM6qyf zLG7$AOc{KgX>!EtjGtQSpf^&rYC}g?fv#jRZ}qsz%zt2F|287RW4wvq;RWA58a(DL zU|rUHzyp+(fic`>?d;`EyHBItLkcTu*6h5!v)s3{U?hHgQ9);yOv7x>Ps-j>!Q)yq z6`wI1BEJ%@K`n{?uJ?9fWn($zO}jDWemH0Z?yCUS(TTkT?<43;j$aB`cNVOQ`peek zlv3|fXrvWL!TDqH8Ls{xFU4BRTV78?o{5*vv~fiAVx#);xTKrz9rqT8goF9~F@>Or zF6Y-&Og!u~aOZP|;u=q=GwZpd*Z0P2^4q3D9E&|_0m``KjTg4}Re{v+l*%pn5IsaE zt+$!M$D0cC!-0!2;_zN2>K^zM^$ z%Gp$njsh!&Cwj$P&*SO!Ap=0zwlIuf)boBw618rjOGz&tO!U+CJCEzHUP7z@95i~i znA|Ol3^K7u$}Bjvyc;TnfT*u2z2d`;1mL zI$cMyaPGhm%yYZfbGU%KA)3nwBD6MtGSeU+8Ycrsls;UYq()(I2bz^5sm?cmsTjIf zshS!Q_F^%H5b;OTDoB&9GXWmR=-|)eQep?obEn{bEV$yQnk~cwL)>((C^3Oz$e_K3O1@ANJ_`9c~uNoxq~W%-f8jbq=B=ld?h>yWAjkyvSePLhrR4H0J($TZW=UJ*!JnqGp%E?w^p` z!?fE0Byyg0r~IfV7${JSWF7b0nikGRMj(eQP#&D8f%H{%kU-n*qQtJu2a!ame@K*T zxG&1(LgAYzwWjaWD1Vss65BQWQiG_5BDu$7`sH=q*(06en|Ms|E~NX<#T6=i+vwwB z-TVb2dXUN0r!fk`8nDMNu@dmPy^Hbyyn9Ab+95Gw>FMniSnhzvSvvee07)Y72phlc zLi*w-X#8{qk%so(V`8Y$P9|mm8b#C~hfvY|SA8UEu!R7DXj2}<4%E*5-G)6^0#!zB z5+WAgBqLpu>r`S0*hB!fzRU-7+^WeQ3#J_+736+-LnW{?xU^eo@+yTOwz%jPh!}A! z*7*Z=WurR!-i`SJ)9l9&WwHIObsWFc+4^gA$L|a;bATy?MIj1^;FQfL{pdS~Iq@5( z^|X;}8rl*8#Fv~Qh;T|zm|$S`Ue>hHM=+82mb?p07TUM#Am8F6)>9V#@-c|ge}4h( zq5Q1L1Fn_zR47)6L3sFFcNuLetfSFIvA_U}Um*2zIcM5Uk6^kag+n(9fK*X&6EuK)@nIhcW%)2?bYQ5%U6V1_V_3*$ks~>T_K&4A+yq-PX%r9cP0g9b@)w{S z;meFpdEl`^ou(m;dRS>wiaybj(E%Wnzd3c%?t)vrIIe)M`&jx$VJDso7juAl{Heo; zq!`xY{tZ&DuP%u(V})kJcRoFi#qz-}e%=qi`RH-+%a>1;M38k$4aZ=K1FeHqW*s-! z!k|_6R80#5krhtFCb$gAquX)=0Z`V6C%%lZ^eh5XjZ7x>v=ZR&@P31~jRYT)?k@x) z{|t2fZsXZ(_RB`~NsNp5CuH;Xhf!og^avV3?;4#=C_3dtuVTtF1?|_L0;f)nSaS3|U^{88FLpkn{T#V) zJ>S=(b_S77kupO*tv)ASJVGws?R_t<#4b2s-F!J>w~A!qgP-RhW~WU~VQ5FQ4~~wqsce6Cm0KzsVIa@%F@5p2cMW_lAo{oUGTh@iHz?8@hBEae5R{ExA zy-X&zld^j-RswmFV0P5U9)saP?IXRL32c}zi z9Jv@p!;EJ4i)VJPs2UmP;iw9W$8xfZ+9A3gm!abL1p@hnlP+%#8?R`HZx3)LkA959 zifpYeZN8J^Z@9p#XSv?utF$@ZV=`pS3$85$ll}B1ZC&Gta>#WUWvK~jl*1}n3xELX zSgxd+)&iZJ8h9eV5bbv)c3WXYP6xU|k)Jeyo}J7B;?{Hhkvy!IXU46@^Os7p4 zh7r>>w|D>el1~3VI3XP#`_2q(=ih#Owtr_Ms?tb$zt`CPFk2J6f(?*2#r^6BV)DMo z!Tw72GJaX$1F9;`u>ZxUgoTB-s)SU4vMc4a{vD6o_0SH2P)Yi&Z!NgnfAjmNUZ!|!>ViniKit?M z*sfe$*CnCke=W7<9hb)XsjLm2EaLKlue z?JA$fi;%Wz2{mj`JOYpz3-0cNO8hwf_41d5L#f1mmZJk~6uB*IkfZe0RRPM`hGnxu z%=lM*F=^&79e3@6A)m*Gg(iXPpg2+QxZut=O5d~2J|%yw+nKI(`j<`f@e-lhqprV9 zu2C&Nt0l}vj07pgzgsoOo;Osg%D|fjeH_D}4ts#00iKT|U(~Bx(Y1RYQh)XwP^#5| zMALZEnentaEhIWWh+5zBY_wv&p{N8^FM>=2D@Cr-FE^jlKH3Ie!a+=nht@IFsZf7* z>{YQLj-CXJtLcc;A)DxlD%W~+-ymo*W)BaJE0h6%6r3Y7C~+e5T!1hA$hP#EKS;|j z5r;f@&skRFCMf+Ev7y-&V0(682QpID0d<6nnv6uFo~FklzjzCH1Iwr;$%wzO@1ax4 zkGjR*ok8INlEi+Gzs2Kcr%1X-`2tCd(8DtIHnQi^{EHTr7**uupSF?U@ZNQ-jm@xp zZ8G;<>rYkiBjj508;V?Cw^~7)4-VCofpzcs^^ybDm1V1CN>CT2MG1!1xO)L!m&EQj zSwsxYFk)*s3VK&sY}dCSW5aFW3l(@SB(^0TH&^`y4oAtb8g&aI#WN38D7NQ={M%&u zAddXCU^dQO3LS*48T}F0lTV@HjDXF~e^@fRf3LR9bczI5XFVuu;vbQBTbucRh2BXw5}3|Qkt8;QyJga!ylYcIy@ zKQst1G5d($DHVGvvGmh20~zU+10W+LA`zep|4tVoKv8B!g~;cteg)YC)3mTP|E1K; z`N`7%oq4Yz-IA>C)gI78yd#Rld2nLGg1H1-^<6Q3i16GQX?y1HEi!PcZ>xP zD_X}WzD<2-n#y0t_)}KyR1!*NeM$_1qjf3VSYrDMa)kK% zwx-zpyPvJ>VC}z48>PT~@Vo4yU8q-U$N1Bfq6+GQ@zSWAsgE>fa7gqXhz7l!b!D(Z z3Z7ll13KzMNfW`5-h_swL=}m}S5BT28o=iXtKHQ(OY{2#^W^R10QrDj(HFFsuq}Pj zR>@Kdn?y0)P)d`v75(h2b1~KmWkVc2qwNb?7c~z?hGJ5$Tv}l3&u@1@-GZWZuEyB} z5w(JMwJsoAq_7UP2vSRHq(p!#&lV0%PRJW}XYdWff^)d{o!xz_T)>2z7moZ@69q!V zz6Ge>mIEOmzyaip&*uI_sz^H_yYtYTy8x8^+s-i(qZqtZa=cXpC(|0;{A(SW)!~lz zSa58M?{Fig@p1toW*0m|9VFFpV^Eue9v~xl2aWJwZBVRm>4z}R%%NIz&ec==`er@f z7c0Pzkow~{@;pUwd%vXRG95$`te>D7eK8{`S4=?EafoDv!D^NM{c> zk$VQaoJ;~OZ>@)@>t4OOu@sYqs0*d?3+OnWZg%cdTehg5u$&5xzUmvC_I?44K_J76 z{3lPLn}a4`y)+G75+%iX=-A$$r>FiDw*VmQhY_FjvEHt4`^yo0{=G4bdUj~}Xi>** zAIb8+DR5&cjkFx{$`&E0os@rrBM=S1gdOsOz9bJu2^?zfJ{)*Xwt9+=tfU zOiG8DOytFnC=a7P68)2>D2p#TH|J1Tl+oC0!zhwhTtA37nttfOS4 zipsIaVN&Q@oH*(&2)kL&-grM6Q`c)1Ev$5CH3HY)ZDa!9(#_d2zWd4Wa>2+Jb#-iu_WgUeU?~-s~iMS}|yOr{3_vBlLYg>CSVM_;{^nSDWI9uwW`KB6Z$e z0(Y*k=6GOYY;m za@TRjSIv7F_OMKEOS@1%p-4`C?&8N$T%mCKfEoedJG4z+V+*=0Y>4XRW?xz=jt=pB zy*a|^Y*}{cqh&I&yK=tK++;M3E=m2f`<18N6Xo6h76z+CAvKakKOBn{EK0f$eY4yw zJh#(5FGTwDc|cfiw~qH>bOo`};l;W{{NeZUekm}T%tV#3;hl{B9zDHl-$>Anjf|k^ zOB&cpQE#)07W%0AWi*D7MKlzZ|6dQTY>^*fbrf;-alAU)8z)1KHRigj*}xeS7Z_m{mOz0*Y5V7ii=u#01?wVf$wd% z>cm1l9zS`@V+{?6s8FQPjQVZX3ric#MU%jk?E9TOig?c_qELA-vGP^?kONg6`9dEo z+)9DDYVtn)azHml^7i_gHLENR;}erNU{{FWM0kn`N6-q=0IWMvr5`oB%Yp-!koJiJ zB78DV`KV4YTu}&%kXENLRs?}S;KlnR6X9BGP-iGckkv+~Xi2R}{I;cbW2&9e7-@FZ z{S=|;du#$aWcVf;d%N?l69CR)se-jar#?NgTwBZ@d%S1?F>&-6B6UbEGuu$$og7=_ z8#_2lVpOIv2zQW2V8fMdi_|@c5Obl8p~KprN)Jaclr+Zqf~Qy%PChkF6jrF*ss+dZ z`W{AE7v2tW&eV8HkCRCx74a^dvad2jphDe#g%e@Z3v6E&aOHn-yp%oHs>kM(lUSKm z9XsCW`cyhCWGFWCU%6wA8>}-K!Hcal-CdlBr*lURMdJ(XJJe!QLC!kr_eB75lhQky zlE8np?U~(xrU=6>5-6I$UiY4&(c60Iusww#T*uw|SO5`&whFo!>#%A{e7d_T-(>gA zRk5~$AmX$K5T-|;!peA=QdX)+E+dyICGFVMe65+K!F0xNwovwT9z6DJ3TyLN?m)vrq>2WVw!N-vF_! z%_TZ1*K)?HGg|81$+%ClE{ZH5;bP^Ej9 zSB8U9-S(LN_IE+v9Kt)G)G<3BHzO{AXYcoV(GZBF8y&RLIzT576eZ{B5RCR@qWEgE2Uh zVsG;2>(y+J6Mhk+wIyaECOqlpaoqQR&= z+s{ko8gbl?CnC74#ttWMeL*OQ)ol*P=%SGXDOPLEf&y<>P@+*p8H~E^5}RJH417DU z1Uya_Trdy|wS)p*+Mo;0O%Gv+zn-rT;JJhuoDk~%pmV$}_*8oT5ok;^{b?QUguBg>;vY^jJkxqBC;1_M+8)5CHZ^BqvYJK4(eqw-7;XY1b>N$z-Vx*oP!ouZO=h zD&-1jz5d}z0#3s3fyn65oZct&qcQCG47xSr#K6XUN!CKe9*<`l(OE->(@9G_W&`T& zo{4yVC|NwdNF~bO(L++xB_?VseUfIj5u02%8U?lcC702@Y{ok-q_O_`AKQK6q-j$+ zcP81lEEk0CPAo3$G(ssm6vr1`k3T#I2sr(^o9!xk5P&BSynzXk0Bm~35<^ty>de|9 z9^o(uud$i_D!r~)+4OxLv8mIRl_Ypz`5R{h3u5iX@ykB<6Kd7_7J6 zU@%;AAQTJ3N4>^C^!Nd6!v5b3(X`tJ=SvHJ&{tZSQ_OB+@Uy2M;CF0Ftak3N@9@7| z08b5pG6AfT@+vuBy44a#9;qbm2-jjxtBv^K=RBTA_=fE-T00P>j5a%WtqbNe-5Z`< zSW5I7af{X)B2&7&N$e=^4wt5-d1+-|#;4hW83_dwsCV{VY%_r^QY9UN?d zZ%_hbEk9rZpYu4tpXFM@rO+N9Es`yA)xDg5Hl>`-DZ()Gesx6@K1*YdLfL2O0V#gq z{2MGNGlY$)iiiJFX^=Ffc<@?(x{(rDvugU-*Ivx|tSv@oy+Sf7PHQ{riFQXd)MDLYc;bgIAeTz4@lq zN$;p#sPk_WBEJ0cfEzftcNSZ8TX_n(&x$tzR|b$=05;?kGi3#&4a6DypV_~qDkWq~rc0F>J|GBbf-v)LAvpb&R!8&HAGTx@>0EK> zlrj>^g)%u=-XAGoe^YW2R1n54>{bK&CU|WdEtt}25tim4W*_4bzV~&wiET)tfB>59 zLVqn+VCEBb_Xxi@Baj6*fq#<}XUR2O%*G%bj8KVz!{0{T7rp6Z$=!iIN7Gdzx0^e7 ziiz~ZK@|Lnl4t~$DyQFMdd)4OAF4pjvU zs(PGS-{0P^;MF=9oY@8Qb(brE9) z$lF5Y&K@wzAi8%0E7Jb)#RtWW=;}u&slGt8v^(5~0swhp5mL)xdr3i9Jm13anUgAB z7D%;^k8mcRgv*ggvL6YilNRgJRxK~|!63{>f6z7SeDHayJdUPtgIpva%7OtnSJ1lC8+r3#$^ERJm zu>vXNpDm!-q5mmtG)xlPMi}REE;LB9-Q^m@3Difj(g}yxzqmV|`^zQ-VF8|ei@{Gq zpWMt*o>-z(@Lh`+5)TppY5c3^Y^9-0UEqA;v1!vQ&YWr4F1*w+!#L47SE=LZB_jw~ zfI2`~tnji@z9>{R?Gyp<%QX4Bxm&ia3axTx;N80_dSR7%lP2%awnZ|m*~3@_8f9N? z2eV63Zm*Yo^(%-`n5|717lV+y^oBlUhc$6yJ=9&6L>bm&j$n8My_1W z=RZFbsd5><0{u$z-JHvpp#W7Vw4fVYG+Ho==aGSkV1iwu8%zb%0dbViAv<306I3M3 z$ZZ7rj=aO{Vtqk~<3Y>aJ;bT-_)EU#xFpO<`NIchYZQSgS&FziE4de!Y{F>-bwq@)-+URf(APzny0RgQH z*rZX5-|>G}bLs)JyLFC}DX!)eizG0Ur1s>_Ii&UTI3|pAAb&s&6r)%DvdM`&JmFT? z`f0b2?#3XKJyF|ZWBYvBHE~Mv5$FhSeqj5Mm|z%|!GNk>XU8sCX|)W2>5XfUEBFWL zR99KbhX)yThTfOzks#kxF>gfLh%Ig5mPN5$eZRKeY{NjYe(E_On#CKL zyWWvAuIQUWB|7vU95tqHE7(L4A7S2M7u$4x??i*EF7Wy!lh$ZmfV)dM@}rx@;$NWb z8TPH6n-Sc>-;0L#^`1KGll2B*05xiHn>x~54ldA+i-J!_EiffJ2}z_JTf0*uIrB= z?qVXyXZ(D%X{?YqeL$nm7`}>`?9ij0fSBGDBEI@%`_gp1%^63UqB4NL`?VhE`C||d z_;55MJZNa$`Lyw~4(DqwVVNx;>`-Qcgjp4WO2H&!c9ChqfO3OXH;Xa~PrRX2rDz}) z;ZJ6>*$g?>ER9@1fBFldyYt)&Lz?M|y0Qa{nT6Ufx4DZ3uq9`AVt2wvBIuL7S@Jb; z2iKny3F#Eij{y8s3Nz_;W|MX$mq%rr@R?-(x`mP5dx^^8H7?WtZ8qP?Wq(trT;~?C z=iw36fVwE)BR|&AYSza+pVv2a0qt9^yn}oYRW`A-BvJ(WA7C`0=-FfBdVn{e5sOcO*j+CH9nD#1124nwLv~^r<`w8ku@PLwaGo# zSDOAHVBnr15%8s4qlFejxk+J&NGHHtJr(gE)ZM^-@b|yFpWFt)Hi*~Vy9B_{?(Z5t zvMc}IeGqL!xo`vM;ti56rC<^iX^5kY@aeFKp5!{(5Y?bc7}t#8&lGtwhmE4a@Dg9t zuYzw#z}!O0;4?SQnytDv_>yn+fj3tEuWwSWc6(nQ?6!DFzhfe%fT@$e`I3CY26`Yi z*0vgjEN7UUTzKWGWYWSxH-@p zf=vL|-){4z+1GUOR+Krc!kCl$2eLRU>(Sf|jHWp3X@&A43F>dr?7eKoJ_=^wDaDf~ zU9(DVzL0^nW|-Xh(dBQGKUJGv+Zzn8zaj1CF-9NZJEP>^mvs<3i5Ka%fweh6^Q+kf zx_rGW_+Qi|DpfEGyCldq(8?6@f;y{?=o`c?&v5A?Tf^vbLomqvv#pk^9m1m=WcM)oBWOTWIFrV2E%cf!uB%mh7 z--v+ii%(?VP*kXw4=3U}T&e1BI>ASMFbMCfKK#Jk1-ZL;v8Fl?L;$ zdt{_FZlHX3t1$|&Hz7Qp&L0*f(Y|}%e}Dz~P)EcD9wMnAY?+%Gm^iRMmL$y#uNg}& z3HE-r?0v1Xf(Vqb{+*JAN`elWL;q@KW%7S$`s%1Czwhf|7+~lQ$)Th}>5`$Oq&p-; zq`MJ>0i{7eLg@}^q;qHiX{02EE~Sx%_wn=ny=&HD@dt}}?!C`F_w2LxK9>hSCMBDw zli3i``H@ykJ4DlQWY#PyS>qJ)JOz}AI)UurgK6rWWSr7q$tob910b>0jq=+!^7{iO z3f(S`3-Y23Zd4F>K#l10a%768iJdhbE+z;Owp~BUu;+NytMrEGGI*-h)`8#m0NP9Y zY?KV7)oSlWutC)=lRD6c4EgJoQB`6W=#5@ws*ct8n`!zk42?yIM%mkS=n<6`h-D&P z&kBG0_buZ)F!mm|L92aEtYt|s@cgkRL{e}=Y!{fSKPeZleqN`{ zGB=B(2n+gq`$*wUNA~9NCBcDtQeLeyR5Q{xfq8hjM)Ux^^^2U9)>9KOz=do*(H^LU z$f85QIWi(Vrw*^a&A80LPS*R-uf+oo9QS6%UPqS3)RDF|OL(3|ID#hrx^29RDj0O4 z58wDR2bn3;G6|`!7PTb(%&aObMtO!;5Z}EPj^X(mMGSFZ@oc0lP7lGw-+sX$l7QoS z#!B7P1sl!pI{%r$bI+(|c=#i9i-2fn=iHpX9`jJoX4%M>GJjqii^J?FQ1kGWJSX~h zSY~u9O?gI2cjDu8R&@9GY>2YL2(JJRfRLBuPnfp z!N9g5bf{3I3-YN3BP{>Sv`Vi0N6z?*IE7;Rd@3xX2r$!Rk8@m6bP#bt-DaVSwNH^m zK69L@5n|jU?)3~tUJLC5Nm1eF%Z`~XH?=Q5Nu4jW(7uo=-ak(1ul&J=X=7me`p4#n z=ojb-SOg3O^|&b$?CN%i0Q;UB!dI13&h|gd!uHwtCcofrvv7gpA_oMCbo`?^yV<;b z&>1vce5zXqe(&F<+hcVWuZcCwDjf(C%o0!#?OZ27k#WBqtsqR(6K8CIjQY_7JHebznpV z-VjSP2-D=m(?7j}>eguc^rDTf2rpD^!mf5PIr7cEC`-nOnIOYRx@4$_Pnx!T*V6O{ z%C>Bh2PF~bl_WTyA?shd6Vju`I2~(PDALKB>wY0$gjMAa#;+qM9!j0=Eyafeh z$j^BmecZPxNY$VR*1^{wT`Sd^;^Tw857sc=aKxT$&k3U}s=e=bnJs>P^D@n}7y2;! zde_}~cHKsq_-A71&|`P&kY}MmLKi%=FV(jQE?hkxf6q??Q!|lCG}vHZpT?=uM7R$Q+{G8Eo`*|N}ZbD0K^iDeoQSff5{ z&~V1_}9t=lo)8P%MDwl>S=nO4v@ zj9R%d-dEUd*JDD1%-2~C)!iRrk{+3)ROJqSd!wn&D~7GgLfxcG`Ov}=AnWs%nhbjO z?#{hY-LLb#tPduz*UZgHGtm(qu{PN9Ov5WpIStmsz1Ttt3#?uzNuHb6dPCohrg=>I z0Lhd~D!ukHzSH-)1i`aLEkxW^rt0x@sc}!dkmB2EuaB%pa~-U80ngc@XoVi*8~VpG zc_`EV3{VAcVMODWwT5;=h$3#YNDYJPOg++l97*pMkQ~YG?nlq%ysuOiA{*#-`P9kv z@;Hk#E!0u`1O#0xnw(|YU)-k~ZpMT^?vHVB;3RSJ5+^cW<3BBo_^S6|^gu%PhLEnn za{c*42mY@*PQ&7*u?svnjBKiBbZm$&uQzoTI;}BV5o)_=N#x@eBBleYhP;Nb+WjRE zm>A@q63SDT!e>Cg*YDTwZX>dZz35@VkZe63hS}&q+JNL)wS6v6z-QVZf93{DO_r6f zs#w>2Tt>A`Er*k~lrezkG!fIBC_;wq+(p>-cg*Xm!)NtadPcEefETR{C*~L z_?fpQ>{|MMWhZjo?r10YjG|1;mQ|2K^uM(KLWip5uGys6^b0=RLaLH6##04AY2qna zevQ@d)>ry)$cpgnrUtLE=LK=wjSP4kS1Oe21=FfK!=Gz*=xn->)U8Q6Wps0G zQ-5aMZMLfbA{@rgUGXm({2E;*Y-CueR>R%vZKH4cSm(VyqqYT3N*rP)^c`?nz~&L) zLW|faQ4dK}vBDy>iI%ge;hf%1A~kkc$&YUO6fZGuTVbXlUAH@bYWAl9HQi;=v{ zRB(!SAbErah%VGs`tMt{Jcm+};NeK)hA=eRkaF(XMqLhVZ4Y(EP@y^}flhEvEmCl;bJXx%^!Ms{F$qVizDe?e-9jhctR_Rpvx4O;;xJwMIfbP zu)sCZGL?LiNI(jeC~PHWw^{08^W9}iy~S%=_@~3q_kUfRX@@h%_hR>LNhr6?hG`3( z?{3DU4fsj}A}8C1{n*Z<*j(TIWiAIDcRWe970}){;@f~7jY`|>E)<4>Z;xCmSV!Ws zzt+*H9)D^nE@@2IpiCJcvF&=5T5X?|3<3fCaaKE4rP}x!rHn;@|bL(oB-bmJ@YfIA(yr0eYPvvnQNu z)BCM9Fn~@6!k&!)e}DZ~R8W+8p9~HInZ7I%XVenm42986W_&npX8Mk@kU_B&$@j$& z>s*h|C|2NLi=O6V;^FJQ=wd`PU*+V$bBsx)$vb94k^QEZ)EMR8Y=)Sw1~^4Z6#h}; zZgS6~Hpl3prauD0j7&)gQjmXXr6RD}>|W}4!WP(hn?v2*Z)RL@lZVhocRpZ(-^NNX z!wA*TeGT}oBONG_WBSo_e2lEahQX7Y74Y4weB-&q-~`I@YA?1I-vCv~&0$M|m&#&S zTStXuoCC~`mn3vI)iq%Tjw_>(alRszVhQ`K32KEXeq@-K;~?Gb{i2g0{7NE_ zT!Nr}6&e5e$t%rv`+AmyKWbaVOz%5pS>e}Fy$uNQ~`3X zDL^?&YHLrfnp$Z7ZmUisLxd=xNLz?gIgPS{5y$WEr*M9Eodkc(7!3my2{y1Q;iH9eDC=x!=)wZSV>AHkjd%roF68f~75rQy8 z^)|lg`3{R4cUfwBq=;pnA7C9l)ou5U!@Hc1HN^KWMNQCi(N?_0iSO<+yBm~sJ8McX zQzeO0qHxGewj#1CVt!x7V*PK$hD<#KF}InzMMh>M<`h$bfqomI&hu+11To`sX@MC= z3Xc3LcRJ(#B4%e|>9n9_ybKe}_WLRux4lHCCl3-+Yr!bnsgf_QO$UkA%6m~dx7YD< z?~VyW!EKZdN`y7)+>y~-C}?`s^0UDy)7LqOSY{(vf;=`eG`+;PV=1B93f-P7U%q9%nwiMXSGGH zaA_^Xe~+N)-AiC_`vS+Y^hxSsJ`4bqQ#T6}H3nofiJS zA3CnP{okCGAtFgjxDg$0(sCXYfHn#zYnXJdNsfzyFQN=CCq*hO2V}38;KhLUDE1!y#n$Mb%{MPHl4@Le&$e@Ps9qjts=6^iN zP{rU%$#Y%p;75OENKeYDq?Ddgp6AkWZCu%WIF7bO@G(c|G{u)29odjPL_(D|)+teG zO_u3Cu-I0k@o#B`*kn*@+x`ZMtw6UQ>RtobI8WmFojRZ@%#;*f?WZ%=@!&N|9+7VE zRaKwKN_V(Yr#WqPy@<~zl`)aRI{!qCiqMBJ5Z%H_p^p79R~?utDp8NicBb2}E=lz} zn&f>~mxY~98Yeb_&9p*Us#F!Pl5fGQfgS8?d_kHfE2A0Vjul?id)}F%<*D-U#n0xW zN^wT33jl-I_~d8-9XO+Nr~yGYJ1zy>VwBrxBn1vVwc*|LJ?wl-l6$$m@#R(KuUe1R zV3GKr7cO&;kwma+r;phme$&VQ-IYo%(a(x!@8B?@^hjc-fp#l*Nhw<5+ ztgba!Jb+ZizmUlYZ-HHW^N;(q!|lIsRtDCN8xZoSw;hPJ7{~#?eS96*X>b~%mxV4T zD%z{#w8!x6ec5c0o5v~9jMKc5S5xnLLS*QRK7XV6sdl8Sg57fOE_en6E))E! z7W4vDr$MWGvNLE!E#VcSdp$okxTLkf8T27>I@gFRlHfVf_hSJzRuz)%Bp!Y3O6-f{ z(ZE)_AHkMc>yU1eCKZe@-#xME^_J%o98z0rxPefpuK4Cr1t4Lw)OxfH$gg8P_}ZLU zo*Pv+94yF4VV)PF(=?>}y)}4fR{w&tT|~z<<1t$6$z;62!ll#7`Loj1iM!DEDJ<=tk!gHwkW``D+ zhV+Bi@2U_K+*`nZ?qY4Vp7kE;DO}8xk0Y^{LqtE4Vf3rrJTrtx2phSkl0ot6O%79V zA1N0vK9%9yFYuSl`2Sh}-G4LjgOO;i*q+JX_d>k>pfRE2t}Dr1Mrce41*DR8vYjMk z5@xbdI+l;mvujgcDSVWT?1=7>W)KY%`g z#^>dWguGtY1I|6$mn=sBE=qgSMvVr|`=Pr>;)DSiHTy&9_>jO9M#)dbr;axiFZt{z zU%Jk_uM`a|M|)RRdpfMd?f%E_IfdxezPKCUn}GSp9Y6jtksY@2%=@loH5ptu%kExh zh)JDE9hFa_DZW`!uo#p9ETQ#pB51GNvmz(7mh)NV8c535iBytesHx_{m1>zlMgsCD zE|%?G_dOWY`M@FNMcb)E5j$T-$WLUdIO{C!+SE#+ccQ(rWzD{9fb&CwTaZCq^P8!K z%7;1Dj51rR`WoE6o9L0ndmaInSd6q?_CaDUG zSRrK_Q~q+ITNu;)72t*Ueps-&20UnsH~3(`Z1;u7)kA_W=}>&tLPtT~*S9Y^_~Kbh zK}fJsBF0-Mui!%!r29mOH3LOgh643esyWAgb?d=({*A~ka^?}l0fT}E1GL0yH+EL$ z$$7R}={e-}MFJ08ui7QlW_4`n#+GY|rkq?O>Jbwq!2ctc8;5t9l$!uZXP;=;l4h=d zY%oMx>sA|MaW0jtuo*xXs7nytW4+{yjS6=5TCCa8`MSk7ArNP?XELe-UOB^T-d~E* zRi#0ed9UZm9}L3N@rLi}Rk1KGS67Tx(-@`o>_k%5*hX@C^mHkoCj?J&T&!Rh>Rb=a z*%3ty_i*~UkEtw-S`hKR8pc!wm%lfBvBs*ziqsUkApxOU0lgA8QT1O-8>@MXE3RG? zU*Iy1x0u|=>~^x$qq(bJSGuaIIfK{5LYtWS8hJd}7OM+2uemc9+b7$ar{Y3++0+w4 zJJc*DZLB%!9`Iy*6jEKPdCiXmOb+V>suNVRtH9*t3o;041_K4)nHDX8AK#ypn8`xG zJQ4w}7t~i3*=ngD5Aj}WRZC*d$Z|8)P{H0kVtdwS6-*`Oju%D6+7fU$jE~!$o;tQO z5t@E>d5`}9T)~<qfCfMgh5(M8yc z;mvYj{CupgLX4Lky$r7*)jxB-joW?NlzzNl%`qCJ`dZqoL7mo<^C6vpr1>WIbLeaI3j$ixKakJ>zhOf5Qc zv-_1_fTn(*ytoN%)$#C>Sx@vzi(NFhqq7J1gH*6hAU$^=_8cqOLor@b5@mFJOE}mB z-Hlw8$oAT&t?HF_^pIbvSZk=BX2f>#*bZ}WAA`ks`BeEBH9kvIja;e_99jiuSw1ro zc9OF#%QkG&>Rmav|2Qvu@ma*OAA3KdT;NKcT~*uF7%V} z+;!_@Y5cx!8_O<-+kzyS)Eh?}hJ)zpb5xUCLkr-ivHDPdw3_MgKAZ58je?xLNA+G5 zhvYo5EB!$s2aBQex}eqOAzEES`uW4g%`b+IPlsy(@3K$i7Z1<)K__{xWPB9p+(d32 zYAiGDbNAAj2mBGF-t^5ZGE9K#hQL#|`PPo(O&xpPn+p#A+uzBM4`)th#u(u{9Jl<_ zl)`?tponp+9f7o+dTE0>%D!BLSb9LT`UdsHTOI5po=&Byf1) zW`&hmJFJ!2ax6*0b0fj~GHA<`oIbez1#z6#-qCg_P3=a*wCBd(=!m*Kd()OPQTys` zBl`HWaF<>xtybLzi!t=i^inP~YKBdp7N)u3bPkmIGf0cVtvR$XG(;T!?0G&)SWWjU zrIg?O!s;l=JDT*$3WklN<1ESXNordzYAU|3HK&ae8A3m-U*#Aw8F22+REusZrO$op z(Vx{P(F8t6_SmQ;@z?#&(^>+mdQM$2p<)ZWBX2)G;&&>1f|o|?l+gScUfBJ}PUX;; zOvqhcQRCCP#k^_V6;$Z=O?c0CUj%jJUdo_)r%x5}Z!y!CiQWvYFFI>e9d1@tb)Wj! zqkRO{t!NB9@C@@;syIpq`@I+ul(>8;Fm0$I+m;dEb?ZpbP8uE8UjM+ea{l|E+90>;=7n!MNAstGmKwybri30Z zQfBLX39z$W&UvnmUWIzz5Za|3doZ=T5(<61T7XYxridnrI+-5Kap#u6EVHNQ#a4W8(heN)Wnco7d zEFe1*C89#>IbHD$8Wjk{HyuN2!>7f!h<=|cb+J&x^dE_9&JCBDpMFr@XqY`A8Fp55l})(?N7etj;0UajIZN`PM5H@$p&|&9cebw;UXp!t(+Jmd-TeDW z(DCnMWxo9Kkp6Z9``0R96>xtlve?$?j4hN<^{m#3 zzJg6^eqS}m1Iev;%~}-$A6FK!n#5hHu82F$*=)q>qd7xh!SBvw{}p;66z%7W`0lal~#gCqlNvn`Rxf<)*Ei1_D0ggi9HBAiym>IZ#Q}M(cyQj%3^*IXx1>r3M{-oHZdc`)nUZ+ z#}%e6I#}0l5wtNxORdEq)kl5{TB+e;Go_qCaw-ULI9Ncli}=yOAG039Yp1E#sz1ZU z|IFsaT=^EH)L@2IC#_O7MFm!Hl;u<{X$di~qOqd+D1mNIfJN4>Ixg$Gws~}f@G2e| z|Bxs_gpYjT!UaRFERzOJ9L<}EieI!nO7bc-f8l=g@_yT#Ak0)X=&9(GvC<;4ajr$g zZqPYxG>77}4icpI=)GO3b$N3Hs2iZf8+9_72%;J8F0$LyD=C|v3&V#Y$`^`vb5f8KfuM zyuw9m{iN=^);ld2=nc_t1bJ9zkbKV`BYXGIQ?*8p&JYq%jJ@ z5!Nn$tGZ5wK$tZ>wUAKF4j`Of>vl+4lj~OD|C?`C1PB{>-RM4mjTVer!bm<)P@M%k zn@mMD+u7bk@kWy%9T!9B1QAn6&@I}W5NCGuf`Hnf{wDDVb(8O@R(O75CPq-or^#}} zlYGS@v9=WPA#{0$)XEjoW@BUCP*TH+L?c$~7q#!*LM3$XmQ=vc2*H+|e6yC|^g%x3 zVEBGOFj|6%^yAC4nfsY2ZI-z0qn=l_c+LV?3B7Ar47X5o^iUv%9x>+<=>D5zEo?*M z2a8?KL}mGj0D z0E)OzfgPky*ULNsQ|XR~VP8r@<#+ryvx~)9ldYN4m9gn;XjB@yo;L08Sc~bQhgNfU zzc|DlNzo&6Ml*!}1B|#jx*q?|T1}EmdGO4Pv`MAG+gIpK{x=8ha-~|o5uC$<+#p$~ z=I^QUBst~O3AX;AhY5jneK8XhA?TZ9N8NOridlG7?tqoY`T=u`+u;P;%MsIN4X`P- z!FN_bgNz1!9C1-dF9+2L1fH&Z(GQ1C+~d!u^sgVP2W%$4dJXrpdV(Nw3*}v~Yc!>h z<^=;}PQ6|=X0aq3e~m1XwlOD6w_{K8f3L!L5?rY~$UkOGe_SzapDfvW$$grR*ZgYakNxT4e6whM z89oO(5&Wr5Y<4r3IXHAiU#4liwMMxElMSM$FJq8R@70kQoETip3Lq=mp+K?oDcX-LtxI&&p z9Fjgqf~U{^IZG_`LqHx*WGzn19kDj$ziEeBW24%o5_vRG0r?9_%!|@eVbC(>6MTE( zPNka3TKi}A+8m7|IfOQqcDT2>515|8J$Twb2Hv0GO9h>W zx8Cso$_68HLE!pgRrJsZ&TlUy@kO3o(k(AqkoOLg{Cv)@0Yu=f*3$k;79wv}i%ic) zuu?iKv%1PG>E4WIiUoFbvADyg=dZr>o$tQztf+99M-TExs48x4?>)JjkDvUQA9i!> zKR?S9UR8D%c76(wbP7ZzQjQHI8aFEBB%L}2wmao&b#@P8r84DBA(nUK`CC;iC@GTa zy8Cv&n=JPtjTb!&2JQ|P@4c>s6q)1b5;(8TzU`B#y=(|4xMVAznX29SPIV^!+zou5 z_!{*NVAVlTJRH1h*)=;IStn_AtLmkE{jS+6bDh7x=k5Aq9wo7=QY;BU?*IjB*6r=> z&M+T(-sDkWN5Iw2(P}W>-AceIK95=3=acO*h7D0(^Nts>G$KWr5S`;CC% ztM-lFE`?{1t!{W&QgHn_q2EQC-e?c)_L}pz`_(i6h7_P>kUawNu#_79#-7rDxx#YX zndfiqzO$w;yrHHWijx2V9ux+xgM^ld*k$@I{8F9tTi}H9rvR1^z}l2x0!Ov_9I~sW z2@1VQ)Ff(lx0 z^zE_N-n23TNz|_WQ+fF@V!Yv=ac3P$$$x1*xd69bjyIX9y){ z{!s;7ZmFGs>FuNc*$!jS&3;v9iQQDut5S#AO1fM^kcfjS47t7cvkc>XUf|^sB9T?~ z@jy?v_x-IO;D$>+BbD;^OnVk6u2-fXYk^&^T^JRN1QdmHv{)q7faWwlik#~?V5MO) zd{q46i!3>(ZoC7Xq;I^q&%ukEzkfc}5YUMyy&8y90~~pYS6LE1>Z3GIUcC=^0F1|b zORXZn!l`$dw|escD&aY!KWl3s$YS>pL$U@C#k>eVAT^@w7dJ39H+q7 z!Fc)psDpbsKz=LFN3iB}^5+8{FfHaqJAhw46aoJud}B;bqG5;;3Px}lR2KN3?@a*y zz8zrP6#FKdL&>E<5BIvYua%=72|UJUc$VS3(xKMuzDc4=526E^Rv6cBprh)%_Vv?Y zL@7wXe5ScjXSWN8X~EDc(`MOUjV{F^F3XyLq^`uI(HT4hf=GDo!0rGcwmBRHI0Z{Q zcPE7h5YHy0x5E8sMO}lh&vu!&rGxG>-d(O@r3pJxlk=Jy!e34nDDMJBkwTZwJN=G< zTTFavd7IIUT&G_RgY{Kr?VLG2>;19QMQSu|)~!7s4zgxHZ@<->4vk+z*U%!=^s~Y_ z-3S|7ev#XC_l@8hTKOYAf3ogima;4RF>W8W=UJ)ifhYzT9|v6j%eD+BvhxT6lB6EDd}VKfXY(H>g<{l z5r4VGQ}U=)d)9zK`Kwug0vO=0X(0>fp_j`hq#EHVdi*6H9;I{wMwxj$Pt?{(rbHvC zhDOBs^HNdTEn1cZ9mMwiIi3uS3`Q8zzR7X^=}6=v66;}CeTJV<*a&_Rsgh-l&g5XSel*oYArp1AVDGptSi=S)5SbU|U-@5*EK z?#Zj(_)cIzr&SjycupR@Z)7{j!ldyBrP!gwo@9dNp*sf!H#Aj%r==VQ8X6Xuc zhcB>8rt{6Wv%SYMazzmb39Vp+85meg7p~(vkq{Y&GK;Vc?1E~sMB9BmCwY_4JYAn3 zD+VKh&8Q7*#tklfNS36ZHqrvH$Mt2>aOrcqk^AgUe#ldZehfR9EL43p^7ec$`REo| z|E&+Zu7md)l3fM7dTV)0ZGPXH(k#F999GYD$zu8No3>S7&QoK-bF6i10l@+*(XDJ# zrt~_Ql+WRE;XiG;VTOQBTvOGA#WDJk>Sun&&5`s}ATYo@WVm#SVqA%nS;vo4EA!~7 zQvZ!x?!JAYuvTTazNtoyhM_&J;;9St$BuR|jjHr~WK>2GC# zntAl^tYDhWX=Kf6sKa?4MJ4lec7JoPzZ>s>w#g@A@`EZq3QJ!EA`RmQTVTTpWvFdk z3&9o$39Lr;VB_PpzCNIP2G3%rC?Se?AlSi%i@*1zrD-dHS@C^#_&e=F6@~d)YtnHn zSIn}Pz{Ud_$e}^Hhp@QvD%_Gd^@ez%kR7=PQ3k8a%~bQ(0TH^-gVKea68*RhtAqDu ztN3zAJqAR>@M#|F_e%Pmu&Y~CSB)aE*!Q}&U(4^w*cv@JqSY5j2gpg$q(a?#t3-aD zduhLv^=w*$gef_8Wfj14QbXXX{G#6X!lg5-6?#hL6(NA;kD|;X(zNttEzZKwELL+Y ztytnhqYK|mWmhOxG&|ba)>t+ma=|8jtmF!z4p9J6AIl{1`}%_njHecxx;C*P*+dqE z2d^Pf!9)++*+D8I5h`IH2!gO&G>1t=?Iu~$*FlYAS*%3sh8+RTF*NvhU4favPKU2p zNka8GG;=_J6g)_`K#91<)?N)G403aT=NX(w4~gi3PNVM&av#*)8x?)_JKp1IPKz-@ zNN;;;(EUmKcVfB|l`Oq`tEYtGtTY!6chFE~&-|lamebA=ToxV%Cmeor_?9-*lP{th zLvcJg%mTk4Gm?xWamhJ^T2XTrbNqelf`81y1?r*erQmVZnYr1%NW zkx!}CyFP7i@E$Of#|Ri4Y!_Tgcw%2y>n-4;>a}z6rc;Jz3RSNI4Ry-kr+OLii^X?9 zS0V@m69coo6lZYhM#Ju8a!Js7m%e3~jTpmd8}D*Xmw+%y z;^6>LZ2C$zs1*83Z#?by(=!?tOahP(?4TxamQH7SNS?y&5foYb;Ny+6eq{M^hGI# z3sUvWd~@X5VRqPif96nDtIP6MrI;b;Evm};XTaCGbbLEb^_;1XpXJ!tiFSHmns32v z_5adM@q(T`7+=D_HCbeDFTrXk58A{n%6~U9yz@rpTSr(K_LmBt$oQx-Nm)KEG@%#h zDsTjn9|Y#pxfOmlW<7hCSh!D$43f$K4f%oCGswp+q zQB0*0GjQ(fe!Ap@$aKLg`maV$%PM&t%-c?*NO!VYzrro3z=#FrjaWUUnAha;g+v89 zU5XA?1962j6(;*QmeHoqZ;r{m>LqG1OeqGzVOz278c?IB(W^{>Z zUfQ*@Czi)Xb3rFKtDm?6Nv=wYJ_0WkUMOswo~rlaxrXE)yE53Kp;Bc`qJvyGL1B~I zx=NniG>LjDFC7ro4MboO8G$Q75A6lTT58I0o~g2p!}ublB{BXvC)9KtUyaxUNOT=RjyPA;>CzMylUxx-|l%tS>l7BYrj7 zPrUe7EM4*A|M{ZL3^@KciEQ6RI3Z-14H%E#>k$oRC6qj>G~W+PYgOuqQK9{tD8|ev z5GPZZc-V0h2joW2z4m94#rthn7v?$bvz zCD=CqcpofsC}(?Y{osJ>CI_5e`+R!=*CKpYf6qAFHFh2qG25*Nx6agEAa}^*IZBo2 z`Ivb5jAf#y;}}wAMD_B&r@I^!z~SHF`7hKRU{;iDAxJzM0I3;Mc`#s=t;YqU?d3g> zE-K-(PJ0wn#e7-G5vH4q5011-KHfOBzCNfb>fLc}DmiGmu^s z19`^;kX2Qrt1j&D@tf0U1N)=lKG)1SftJJ8V*fLSM!Z6~n_}@uIEgKx_shyw8#PY@87ocl#{}i>v1G$IkP#yTB=I&VG+>g(2BkI*`Ucw_O$zrl>5f_t<$k= zX+HPfTdnkWfCawR@8Yp|92k&BV3w6oQ_1^(+4rFzI)45_l8#!x3%~-{N8Q693X$ns z05dS&9rX~dMFEcfkS6zIS(&?~xf(0gtA^KuiG$H#IG;wA5-$k%qQ6?}2($VCC9`s7R`( z9?SruG$^uLS@yuBdLHK|jF7=H_+(W2p?QK0Ps*wKj;!bI|@4c?TqdaW?c?_IKk4syRdTJ1)E|DhJZ z7`k6|ffl2&N3a&run>A z0>OSwT4vNSUb;0HJb;F9!KV=>t9lMtmsupxE(ZbZcDZrwJKMF7@SzeeG&X7TebVKS zXEf@F(bMG~WwxE*y>B{Ydqn;sbUSvXXo_} zvpcEg?-HI^puYr+#fPU{vkjaO9}%Eq#8u8};Xj1e9ewyw`kn}dRUIxFWa}%2QV6ERiR<(8 zb<15XjD~-dk0cqy&DSYbf1?UBi{~+}i(j$aM8CWRQlCx9HriwDUPGizZ~X*6fjleC zF>o^~77t!FSxO1k_-sOuBV(HZ(9TNZ>gk=lRg11iyrKxk&GFkDBCpv3z_}(8hU9{?*GeLz zF8}^9X*L^9;j#Wbmx0c2WfkY(4Rq&-LI3_c*pV0%>dR(D5BdOw)}^${5$4elYX5uZ zQ|b9Oep5>XwKA5)w*fS#@PUMC&l@ME&Z*h=3?*y^4bz7p%fq@WoCcIvQ3TMq!JnVpw` zBvvVzMQ~huocn4ltsAM6DBlW;9QCg^)i z3B&cIX%k2wM;ow%X|@u;OSTd*fQB^xIx9exU$htT`V@#|u?v**eFHQM+weSGmKx-VuKBg*^Y%m`|KCy4A{o^1 zHQu5zmI=5{$+xz7igRbsuhikD0TPh;4;u}CdG-X~!93Ev2-i;tI{Zvdduzm?E4zrp zI2gU$Z0?1zu%;1;-I(=ibJ* zz@8P@5k1;K=6wd5T-2y{M?s@eKw$<#1<2-9O$h@WhxgG?cELmes*prOk>GA_qgtxH zKJqs*u)Ln}g`eEEB{XY)Lec)67kUyJUy5J7=VUo(!12Ec)L9oPf&?V^qX_o10nGO^ z+Bzj5M0qWU?)OOj7XI4%!_G(rp0cg{$I0#zv_iDMKS%}y_hTVR^h z+l-odqx(u{NeA(M3$7=q)Hcb0gC38YqV6G5{rdd0+>Ri5>g;h6O*9BNi7Bly;Ob;8 zw%--#a4)%^yWwn7Fr`ayvRKSizSqZ7sm+FZAF^uC=;kcjgl(X#Nu!BT6V zf)l-%8yW`3?}+Qgp5RoP6v~U4mE_VB3sd`)W0z;pd+B(=!(QS zgel69Zbo}bXDh*xYfO~wJQkB5aSXx@778}~jxzlQpTLI2S~OCy(~Y-6Qg~n{z4lw-CfQ)t|ZcxI`FEOlLeqa zhBY$M(ur9?S<46=gOVE;uFGw`!I5noz%$&NsmMDSY`0%1t$Y1FO`P#=;cL0vPqE(! z=?yqOZs8IIuc@tiWXLwgL|FvR^LJYN7KCrR7*Z(Yhb0jxdFCUvVNxi+H5V1oxycuS zERyo!htt5h${lP$?jU1OC~DTo1YEyDj2{EXm&bL$M-tJ>?H3uz5|_Wa@+p`?{G!%Z z#(%xgN?#s>BI*u-qMED*2(X{Z$iZQz!gJtCJyYy~1t{lD;W)ZhC z5~tVVgvs0Q(Xyg#v-~5#(`p?F@w40Kt@jy_8wns6sb?yVoXhEexxB4V=65!?X zrT)>Z!^I!5fu6Poc-VIQ8IKj-%D8nYKbpk|#;y3u4r(`s@Pkb(=oGFq#-819H|6?o z90HXK`QMfodBBeMeR^C6eC?8r*2rQzNi|UEtylS@ZN#dex;QtgcT$sF@F+vdwZ+6> zjKPtmrlO?-P%-2Q3!Uf;F4~1it+Xd8TOU5B>4*e2YnnOAlc!&(E!X_T82$U}tm$EIP!ZG&xZwiAJ{1@-a|Zul(h( zKk`LD(Y=9DezAqola}HAyB^QzF(ALOoi5P=ZbZ3%tI?R#f4Ez-8yIM!rzGx5r!mb& zFv7_K&@hJVzh*h*@rOPfh@PcX?P(~(>R56BK-1RVmmW9%y*Z=x&sJa*u@Fh}XnI(S z2q*Dt61x$5QOgNuV}M9ldV8rmG{$j6X{>>0i4##qI>Cq%o_tq+{RNNG&j(Zo|1AGq z5Sk8i274k(qTCItnYv#=qiLURF*6XkAHcGSsE4c=uk!VytdCG#WFpR{U<9d`VL}11 zUub_U4ch?o3z|D4VfoXXL%c`e+Wye*kx&*M9H_p$39C8ijn*XQ9rFU#>ItkXPnbI| zi3t0{@3qh2n}>g|zj23$erICYmzOI@Y(IWGg}(K}Fjo6R?lxg)6%S%a0{Np;dl9 zv_>E$04MlreSgxyOu^3~$~|tPC=UjCyXr9i zpb3zUnG7mBe>q zdvyE$j$N6}HfGjk)Y6wR4;q@jJxdJss(!B29Mmw>#<-KOdiUxF>yI}+O%2FwkyP)g z{fbLR`Z%M z{y#oH0mHPO4d@S2CSk~(D8Ki&ilL%Gvh))S7fKO9t8L1p4FwWPX}xf11Z`pGW?Fez zNU@URx4-SMH*rl27`ry*B#zGj<%r$RkJvifDXq0|bt4S9t4Ert0u2yUt%6+xPnTOSaL7f4*CT2We0m8TJ~i~+ zVs8h_g5*}L=}W>R+Cln>I>+^f+R&bn=}elP?JmK?Xf`_*2C6)e*fwOxKJKqx8L1^b^0 zg}OI=x4ZtWHl~IfM*IFF?fjnx|6)bc%VEkF1Gt`#!Z|%{^JP$&Uqyg1>cBIY^~4>M zy>(C;D>n|k%bK|U|3}o;%4h;aZ4)`fID{47knwm;187y5gRL)B5l3%Yj+*US!sVjb zqYSYL$0RTZ@Fwg2Mdiy@C^mx-QH0e5VO}85J_Ia}V2;@MID>y@L|L?aqi|}@Yn&@#|;_cI`^qm0=o2D^l zTQfj9LD{=kEG&C9KwM29iA~Y6vW1}X_|i@G6~lEv2f`S18BUM|iXI%FE85^SNIA_R z4_8iN*D4r=E%uZ|mbihRJZ@^$3c;$hc4a`@L5A1;Tmc{zklD(wU1PElr98i#hUc^& z-z;10EXGJ0{YybITMhPXR}zBh0m9#Uxf-!QRZh0~BDJ@unuxvjZXBb5;-IJkYi#&Q zoFQJI;)(s^_~122%eEL4nD12w3Xx#?>8Y}ptqq2^?d$HEXi z!9BbLbEiU(0eu+BK-i7kAyVT+Ut->YI*weX!P9ByHJ9{8eOi;OigC2y<@n`(VC#Xj zhTYapgW-mPU25_uT*Cu zF%vXHK)oqI<*~iLiefnP8!#dnhOT3*3N+^DRY>#ihq;Z}r2r?=915I=qj=<9bkLJv zFMPE!9jFC4P?Ec{Wi_mOSO01+W!J{>CFy~cpektR$6Uz&W9u#0>I{~x!LYL-cyM=1 zaCdjN;O=h0-7UDgLvVL@cP9i71Sh!b_j2yJGxN;MAK3ft?yBmpRjX=IJp`bzeTDqk zMPi9yxrMq<)Y8ASd~y?NFN7HDzpJf--_7iJvuDKnKVR}ts%Ye@3`%)>NO@!?CWIiG za(HXV{e0f~y^GXjrO!i0Py9?;og2{iSa%%eMFdqALo%SzYO+YifNZm7aRa2b#KdC5 z-aA5ja!dIxT-tp0^WZ61q~-wXk=a>$Tbn1@hhxGyR)`NI8uh>${lpjUgCS?*az8`9 zt~nB_R7-&bC40UTAq9$_L(g^gz?xq}@fiZ+xqxDLH_M|!|H8dc`#TUEQaU`o|HaDU zMYu7Fg!9`>&(dyS#X=s;plVw4(IAtwh*|u-o-Yaa@eY11#^W=B0_w8}=pDQb?TZD5 zSu3e@hKRxhxuBx}HKnNSw89mMaFL6?{QJesPMLSt7r(r*P-;NGMn-dMQ2W)av`&&p zKQHfc_0c0uV)46kJYYvhWD@1JeKgS4{A*}Vms-CpPva_%78OuxqCi**SgZJ70}QZFa&4i+weRqkR`I$rHDM_tmh#xI<+;EKv3{k730imz z&5a>7tDdJ%SduzQ&RuJ1DhueD%mi>qYf7~(dEP`RPsHM~(^(tXDLecZS{SI|_n?F;Hbeja&?maC(cCw+D|A|-9o{N* zTJ3j4ip6#v6`xjuzuKN)nF>DVbe4aJInwO&joO}@9v|w8<T)md>s|vxtW{FKKQ}CdovQ3#7xjZ+<8ZD46(CBKJcGdA&(_}Pa`q7L!IfgnI z-dYFwW^A`!9sV~jp3k{7`bH0XU@Oc6^8v*r$w^wedqqKyjiAKd75 zoF`IeSfzhfX6fpXS%R|JVW0i=URwfxALldL&eAQTK4H#lVyUIEYZb0Db?0DAmSYHJ ztPEDtg${hldDcPt4u%MWaRSpmJ-z?3`I~KAHY|ja_jV_T~jokip9 zjZk(ECQ2Rv9~BrA`wM|?erv#(EAy7c4m7}0`0yf=FVW^ZU|Q;I(?OJu7N_8>J`P)G zq$|^vKbl<BOh-T9(Pk+ zVm3Yfl-k0(qBz5)O!zYvwOQ-5syLzLt1t*DrK9)TF+iYCKmhoro}k)!-Wn;|^4J=c z@2cvFup4h_+YJL$2N1zH=3}YoJg+U@pX~=<2b)d?oluz{o-QwAEalTi^J4iwQfi3Q z3JDkjdxrFW21oVv#>#LYdlg~>HTwulQ9PmWozJ0D8&ZrqDax8SVdzfKeAQ=otA)5~ zCxi(DtWJ4G&vU$EV<}7;hRT#_A78Xo2EL@t@ru8?Wm*{-+UMYbzlIN zvmoyLzkjo^k2F&TJ38IH*;~=5nA*vvSrGtZo-K99s2f#!^)LNmjKEMCkGzOq>`5p(!3%G*)Dyhhd9tSP}9hUN3 zrC8k4JZ@j!pFBRrhoBiY=TcIa6FuwW+~19>nRM7XudnPAc^sco~k%(v6P4ZZEoCldNtcs^X&&ET!_ zv#>#H?`}TdeUZdmsr}v&U6`j$AWa(y2@D_npG^x{i6x0-1p(B&Ri)s8WR+OEc!x%0 ziy>j6rkj|ZN2rD}zg#YIm9*xM#odi9t`Bpc_90JJmI*(<`5216*7@Eewz0zqbUHl5 z(u^JtX_ZKjL34xwp27u_sSdIsJ^!|Wc=Y)V<~>S|mZX#DN5DU#kK}&~I``eNWULH0 zoGTLXBtidolni?FwHOj0D!PeDU`?ToMmlbfT~?Nbi?U4Z8Gyd^|a_3=Sj%^@V=3oGxyy>rP=3nGieD20ap>X$9nTegBw2 zGOh6KI6^<|A%{f^`dPf&i*kt2@a_4Txw_+->Gk1GujBEEdPFdpKN=H#Jm-WCxYU@B zz8c=%nMw1#?M$!W__QYNZj{Kr$CQFo*|=j!Xbxc0@KptUYOk>fi$-!-?udHm(nk@`5MTg5*&Yl=~ne`lrrHdjJez4yBAMH6uR+vj_<0ZWq6Uuw;|W6=!MaQgDz9M^sSX?U&Fbh z7j-FC@3)sb{>0HYMkp3)xUL)SaLZ?c!f-;b!<__pJEf`aL=LZ4?xeSAnO6@b3w9q0 z({|BX|IT8&Atsyzt${TH`bgv(iVhJ~8{jy~XtQslO|O}$-mmOVPmM=+7|^XMG2<{M z-G;*ec{!2RE0YTL&mm}AMZ{kJ-A*v&-4E>5$2*twzve21NMjfi;gkl7%MM%8qOVMy zS5O;L2_Q4N7r$--zCIvg=ZlTv9VoYh9gKbUgZrY@8{kMW&Qvja%U8w9-lR~$6VM~r zH_y5ZNB=p@nX6)9vKdGS&$3u^19bSTMwQ(r>NIX<7g@{dam@~A1s6D3UE!tfbJY8% z3sf``OuKQaVC0)YlZs7W)ws^)Z{)+D-lU`85=m!-UZwsDh>u-h5Xx%ufAhbwgalBvHU@KVWsZD!C&G zHy=YQ0`~MBcVV+rYjk?$Umre+A2^7guiaVLTjqhRnP=$HeB+`(iyZ8n<>A$vQZXN+>i})M+vNC zoOaqto1k?xE6zekMH^bY!fG}9nc>D#L28R-clgVA`YSD2Q6k-!?pA-G90?Pq>y2)0 z!K(Et^S3(I^zU?}XAZU&gZB$W7@SNA?(9(8ZX}KsGuFTVIF)$?D#=_6J_JReS6C2r z+(4C3--XGu=M}D}3;9OOkf!Z%zN;_K}uO;2r;%|0szHMtQ_$T|s16`5)snHxv1Lf%G2P z9a{_J5T0X`wKMiQ0%YJ@l{JU}wlMu>u`Lv}wEk6)2~30f+t)int+x%Cq{O+uJj!ox ztR%iMIq}`{%&(ubC?}==&9x?St535ThQ$i-Ufc}TR!ZoDxC_JJ~)6uch8Q+a83TQT}1nf+Xbg2nZkK8_Xz8FnSFM3rP`!=o#yiTl|{EQX&oQ-EBho1nZNMyE@kxl){^xp-J z?28&-F@S1O<;`+~hP07hX41wv1i?QNP#j5CbVZOtn@bN2fT`dcV~^q@skA;aKlD6c z!l5sBW4tsrlrDT4rS=!rFEKp_Phc@zYhIsvGE8eI{7pI~opKTv|7#mLJmz&@ZIFM+ zLMf4X;uChgVN7{Hk-k3c>p3GEy5x9#y_WQ_`NB40ZvDb7Y=z%xP1r>Eic^j9;3;&f z>$tPrjpCG6WY$0THDS7~A%i-%|VFMVv&(G zUC$enaPKFzmpAw~=>n-t)&eirOz>~Dl^kaeo5BC(0=S+U4Q4B02_JV!9_qXrB@m8W z7cafR7W$9+@oE416$qGQqerg-zF{lYHg)^-jkCH0(PHUd4T43sXwQF_IGqihwoZ-w zBg^d(Jv?~l_K3PV*DH_aKr}_NW1Y&p=@lW3FdCZb3ZuUBb%pw??4n}Z60HUFX^niiX1DqTb$1zlK=4y>Q$mq8XxQbk)JnG zRxm*u+rzI7uzp!}+(vnvS_!xFz3#nlHfK|K|7{}i zZ}2U2$ACcm#W43jUR3`@$n?$VQ17H4-6LD`x22nF@Y|9D{T32)1C*({0jz94i?R%to|6~C{_-q zT;K`&N#@2)l~9nyDv4N!^L&g(-9GyGtY@)8yro7IF*ZN+wtJ12nJk=6luHgOreCY! z>i3Fnv@peFd`roobYUQ7?P5sa)4@p`OTtzeP0Bp(cXiV0n$=}!qg94#!i6CAcM;xA zjuzuCpi2;_!ssz6Oof)3CxoEzTh9QOq!L;L_?1I5JOC=fGQ;$?rk5!UFuAlZiDXP1 z(Nb-Pf>4WarfCD<{n-k6pO3%E$;2tUXSw}B4Vu6&}AvJqLZVHqJqGdVI_Al zCbFQ99lnCPT_C^|iY0S__ec1L%W+a`kz6Exb{iRrpql{9QcM`s-XE>JYb^CLJJQhS zzjv7@DlLLRSeva}-<}j~`3sK1>8G!=yRgSyvK2@|e3ziCu@}m)|3MZkwi)B?BO{?4 z@VI#JSTrynp~0}&QBn9|sv;z&gc5M?LKn^C(!!eVNqSGV`+#Ssw)N8~EIKcdOFA)=ZQt4x} zP*=ksXM~@^Xamqarc_V2G89pH$%18$qo7muVDb8Dt-g8MX$Q!UXm<_Mpl>iHZ+mhM zMq^Bx(__&tkr}mw0I&I9=kt#iz?Otc5)C6a!fSxs{mnaB@d&4%Q8YLjI6>u@&R!qf zNd!q^OQmYs2I=*-dCGmRFgd$;pLe%6(xLlRdlZ#7)p@|_J%^})Jf!|63<|)2_+Om5+(|+w zZe9bq3>Sr2MVByBqjP#U$##`uDcO5Jia_h<`ju2x5$7CIvpZ^qf974f(1nX zpC(V`y?`(xeo+@sJS$8hSAO;qs}{tA-qV;nGKxBc{HuF_(HHq#x%rUgc9T!AyYvUK zKb`}yX)%TI`X+vHXG}kT=)xjN7KkZd{m(5l+#F;Df`)NI=nlGV0A6GkYce3_FRvd} z9J_;KA$sqx_GHnh)o=_V)JS}@I}l+ibQ!4sy3`2gKDe2|!TeM^$dfSE%@o{8J{5X`^fH&!0`-{%$GviBty22Z#OIV{CD5=aWT* z$_z*n_c~*9oCOr|TaiCWYP$ALSjCUHz$VIrTqDS5O7U|qgeAv;84E@d-X0u4FjU0| zJP4^_nI_4V*!tE4-V?mPoV`C?VI`mO%l4kB_M{KhlPSWK2_lQQt*L3-tJOd*u^4%aU^He@Z6O+vZZh8J$ zc(+6rW*EGgh9CTTrtmHjz(yA2_pQELc;96nvvTmSB z=X3v1RNusd<07+lmUg>w;p1wbi8MorEB{GYWY2}tm+x0gv=h1^}$D)#DX@3&fP&nzOnF2M|e|Ib~hRK&ucKV}KE3GptlVc?OZb0My+ zNc=tXB#2s%wQUMU-lMOY;&tVIr9>{OXC$rv2@`J%bDt0hJ5P4CdHd?2zSdV-L>la<5XdZ!oFS!= zTfMbN8m;eonxeN_gc2T?8@6~Vd+5UZQ;nq#R!Ag42yOWi>8w?Cp3Sf55}i(pw%EaH zweP;#?Y2_A4cvy+kM3``>k`>4*qT5&bZO|=Vxy}OCxbSSmK!q9<|^5IH6NYp<}g~% z=K<14NPMd&PWWJ@8j~U#ul#k-oEeC9+2B*au}dy*4ssd*rC300b&;_WSbEU=d&UJ4 z2m}>~UfwR95?g@Y%;;s)2kL$Lq1NiIpVBgrBSO&H)ZMiaMeZ)#xa}Sz!9YM#hf(#AAn~(qDa$ScSJ6mDe^*hJglJ{UdS1Np@3%y z%Tl=s9Xy`gmo7SfE}3jS7Oqj~Lz@&$$*S=%0Zx(Jst9(hC7m$7fM0DP;D5Pf4ghIU z-?6m!^N&5}dGOU3X`#_;E5A(6?lF^{(-ZqgAL*vNjs}5`0?MlqEhRB$BWVD5NfiV_p^3yI|{bk)#q_Cl?Q+)e`^+6h9RvujdQYL4QsfuLNf z0OKx&HdKUe@KrmPNViC<$^CHO=qX>t%Ziai;VI1T<#zbY{x-thB52y1_zgv!&6U`} zWZIxGl2v2^5sxpjbcX`SCGJf6IP6AAo^O8XVc~OWlWXb$qLimE&Yvf7*#!UieN*qY zPOAHBU;Zl}MyKnja{DD6xtCXfESA3gd|xD`7@V-bowFL>7_-0Jz%=22+lC%DLIMfL zE&AWvkQ8Wa<5j6MKJ!t%OBz+<2+D{D#X>$fkJh;OFC?TyPrth|+YxgL*XF`4Ya zXYzYUK}K+|+?yx_@p+L_x`fWNYv13J!2X>)J76e#yIiEc;O-1+b3WOgx$3B*!{<75 z@l=TGF+oFJ9?=_wY+G4?Gc8<0bU_!_^VkpqWvv;>fUH<;{7f7%${gLUmSklfy>R4m zxC0A3^C=5wbI!|EA%<_oNY_{2`v0cQFOo;n=SP2KQVp8Jx6fSHvMUl5m>gq!@=m3! zhjie(D;#P26*y&in%R1Oe__-W7SLd<^9=MwDb_h?oM?8VyF2U-#V3s?(%_*kx7vL^ z503I#_xQ6)ouZg0$J&@(a!0eak}34$zgZI0{iMQ>P)drNF$Ta4GmB(qmW)pF`uo9YFqr( zVUHRKiygvJI{i+)&MwPl{ zy`I3KnVz3pN4Rs@&O#b}#U36fhca?QV+Ok)t^L~azYd>6%fCg_StY`s6dDC>#?Kz+ zh5(smw8IYPC$=*7vcM}nUlZ&ENuqr^n@Ht=+#OFGY#Bv8Uu4%adTNth?(oJpEt`_kIOe- zDk2|K%;8)2)THt6e!b0bSjF3DCw%%WQefGsxm@d$KoTc9me`m7`|A9>_ai(3BmC-; zZSJan*i5=EnsXR*lhr!ZPO*$CMg-rw$M)Q=onoyj>&-Lwo98E4i_@VSoLp*+XOC~` z5oZS&e}WW^YCSh~Zyc|uI&F#keQ-2Eq~!9snQm~PX^C7mPZ~P&hw&vVr&H@f_Q$7L zQfZh0%$s^O8=ejRL=*~(xu2>rJS63RP#-a$?)Kz(Tv5W6ylxiN{$)uOX2TG0qTwG# z7(U+d_W(^p5#i2O`Z6Qmi!ZU#C35YjO0JT7zSn|RIwPD;QY-S+LC!(H_CtV7{x8Z> z*-cTV0rUQJElw3;p&1spHQI(`N_3ZrU0*D+FnXTH?ylO%TB!7@SJghRLK+qdH32xHrV@q zrp+TUd4N5>;bh)uv6n*P;aAb)nk=WPbCiF>f`jmre(sJ#0u*eW8_&pCes20jB6Toa$ zn+h6eMos*$&mVjHg(>CCTX%mY40#pJaa0uH8SZgfBQG`2bp;nZ6q7fP+D(^cx zTTCxqtqj31dx=P#nt;n8xd7+w&ZEgWQxZ+B6H1qg@8BU2oEP7cd?_8 zC3Nj$aTEFj6D;SRXvvT(f85>`;8RCuPct^s-TU+cR7;ooSm$Mct|1e~u)gqMt zztu9$B0*YN&Mw>au3(_EhU!@F!r^tf#t?z;amFd4#&%u|Yo@*0mMpf?uORs!s&sBl zHajVev_vj)!?_F;vH#Fq=r3u&&5u7=#(t5zpdJ_m(DvCyq4%5pbxd*F-q z2HXiOLH!uVg%};Z1k`tIh^w?;mNBg~3LruNLR_$LJ@3RfgkkB^mD81^@fQQK%n^NJ zf8}CTX=$Q_FH_a%^EMtibe76xItY-Z@jYh!;zr}qHi^g6#+^Hfj6h14Ys@${Ab$~n zdVn(eng2zi+1nSGKNZZpzjgBqRZD_M3&eeW5`KP@p@O%W8kS=)@$j{T*=9 z%5JR6GbZ*h(5skXw7WiQcIE=Cm;qW z`^rJ~N9C9`H&k}Hp3Tt;#rFe%sS6B#c|sk4U^+o@xev*`BOx$}8Ep?pFnE6`MvT)j ziDNsy)jZY@fXDc1KS5Zb9H`&Gdk(o4eI7o2xxbP>kUrEx(cEzpfP*1RsVTQ%X$=^} zKcNcmy6HfNS2laXD8?#H@% zmy+@aZs)QE#E4;Ms8*c5xK2em-m{S)$}+bh{IzB~J+Ir}W~%uZH0nrz=C}A%=Je4p zR~?4Vf3TLxcmizhT!0u+PHsK2zBToZ23MZva;6|nG)ezQ9{j{T`UMrX2B*jgw z`>v+55`*c^0`eYiWc0{zBUEdm%4>(a3W5@^RybAQ;`wP8)?A4q>3KIGbX>j?{%m)1 zw3y0Z0O~4)McNC8^Qg?)FHtH+l*{3J$&6O5(hjTcdW2nXbMD_1A!)(q^HN6^KFt9d zs5%GgJl8Ns?aqj%69hK8=}U*xo@+&GoL*xTNzTMEnC>INkKD#Ef5&k%^LGm-2)ETm zSadxXTdf~%t0vcCB=u+O3hlq|cX1s1b8!{LJ!VMg2a)(^QVcB)r3gh{2iQCFUUnQq z50Lq5o-qC*ms%zT5V5vka8;2=WoA;2m0LRQ{v#Eh0xa{8yindVBxTx34wj5)dP;QDDf7NU#!6^W`VbyE&{nO2Wp23l9-u6e5^N0PMa3#W};QZk5T+P6hR5n|ZI+M||NBiF`gp$pKzW0im`(amLL_%)OEXOM|fuhJX zg*w9zi!ink$T_oJ#BenanR;)pp4SN2L9VYUh=3NSAdvsxzf5n=c8ROq6edg?|1a(} z%Nc#_7&M$Ckwb_o9;NbhymE6))lKyFjHyBq)@l0|U-(ZYt1yQZ#_9QC8P$OYC_{%X zZq0vIPZ0QZmnt8)8#0LfAMml6%M=Ev{c>VMSbp%5QhNZip6o zu#S+Ve&pqLR!MvD{EY4A_(`7V@m!F_ZWG7x#}+!hvhvGY-Kz=GT08$EJb~YNXM3&b zERz(=6RKsLs9pahD?k&+l2V2J(7yI~cMxSwXeRiU7l^#vf(=~RWzZ?DjKGMdZj2&t zHkh|~Yf~#CREZ{q%khZ)OgZ0u5C8u+K2;)jlsbdV@%=9nAVL-#MmjtzAg499x4=uLjO@^`EC^lOEt3KA(9(=_-C$7rnEVc1@~<2GXbu@$IdlE`Z}tRY1o3sM9U7W!(nhWfU< ze=c{;W_Yg|t3(?-(2#Q=}k3WP}c{`kkr4bdIL-%?2YBos1_@$ z#(FC?YtV|PvwOD`h3zRGv3v>!ro5U~X51$-n48Ov6dO8nxXOLVr3{vr6*-)5S)$Ll z{b>KJ+Dwf*2k$)MNy=X~AIyYQ#3EbfIB;@bO?$c6RIVzf+MsR9mga8Oe z|39x4Es3om8?6OtGE<}S-VhV3SZ;B-k`|sv27Y9Fq_ZN=Pj9bx^ysL-(p)$JD<0d=-T(>yCzS;lXj z-g7U*Qb0rxJ7H|yQ2_DX0Z^-mfQ2u3p~RST+&XDOt?X-4g=XD}Nwk`c4ZD?isN+l@-dQ zf$$QirX6-t6zm;7XGL?#&_|{JSZNwZ@iir}zCvR(QoCAOJXWUsYD-&Eq4Miid5OwZ zx7Lx2Xwzd^Ni09gOUuq0=J{fn5Z&I0q-Uue=)eT@y-~+xC&`$B z*(=k6+(tw2K-c%CR8y+aU=x@Lir4d2xo(hE7kJRlcDOs5+$ej%BB(5hH`xv)>)}do z)wc*-fqtW;((b&CkUzutyza1RfaLke{a-I^=+TE1>%MV%xxS>U=<#LPXf+JbcfW+^ z+GdS#wdlQg69rp-AAv%>k53vioZWZ)fke=sWVLAkMjmXLQi>W=p=4`@i2fH*7tU_X zq(0LPcClH`A0dC6*qKUaK`*5w3(Vmpuonmp9eB<((3tQxlg|zrH->0(j(!-&%TdwF zA)P;r(7(F1hGFq$8+fkJr~X;#+?_pAi?yYQ_W5gak6Uw|({~7fAVKF>++V;a3_7!J z%mG)qOJ%k+ePxgSWCXgFT#{#SJ%ac0++}L@viw>u82*I??PR)u>5cxtbeS@ru0<3Y8AG6rtwMWI25%>RQ+It8 z7ge2SIy6z3p}lT-^*ro>N|X{0_?{AnmWDbNIJX03L0J^JsbZwyv?@_ z4_x_IMxBtd`3mG)>lHcsE=c9)wJ1W{t@GM~R7Qikm3{lHVpt$+nD%4-6kYlqVJKqf z;%Kofic1z(V~Poto6ptD_FIvJg>#eJ$wwy$^P?6RsijnJdYxBQZ+B*2sI*=4bs8km zgYB@&={Oj)r(Yd9R(M6@RvqGW+HF6Q@dLm6N&HbEX|%88=94jc&4S4#@xPHS9Vf10 zy9v-hC3gquK+c6`H^&M@-KKsP+=(lEufzXC?5ZCWM3KMCQXy0ni9K88Y36nQ`Uy+g-mNi%bwE6g z$w;ExKipcyP8n195ixh1SVbYyFz`06aZ(60sxodb}lHvhVcSW>2@FOR=SdOk!Hsh zzZKZ)kf?N1<1?gf!(rjcb6i}Nj&1k&QtuP`K{|bmv)jKkfqiA*bKZlyneZdBIYhg)5E@^N6T*Jd<{X~pm%zA0D@gG-?oWNk~DSdyl2 z8ay-Cl(z$iB2#h? z`m_l$6&j3MFO=zFLWwiOq#qt)g!wx}_bocdCi(caKgHk>>>^Uui zlq{BZUM64)pUVKIoFN94$%Df-cD$2+@ZXZf#>h4uTaI8;ru~F&V~BH4mF}y0}(=D=3q={UQ6|O5wFkS*=zf^NO;Gb(Bp%nVQ~-1tV-h_UDC7v zls?^|>N&9wG4JmGPKr!8b!H5nZf{roac)_qPD&us-1S4@68{bY1EOev~t9AuXpvm`EyXs7kR z7&Uq2u8yLWVhpR~?1V42{*%%EY#8->8FrkK*FGF09LQQAM+4~tlGq@YofxtQ4a8v6QV z8U47~_S-i8a;DuBqRdzO*hTxA{L(4)VDN>Oe9NmOkufQN(V-CeMuw0RGzZsoR zHC52}H9hU!?TJ4AdN9g62CEyTG}`cQBdlUIiZP1nBWHq>4*l;)7P|HTphZrSwChU* z0H7WMWb?qst$XgNJF~9crY5=}&##RQ7lQm-5TOAE|WO z>*%|G!CsU>cX~xKX_0O2k={aTy&GSEI8Ov=l}2GY z5G!GF^%m~g&Q+-%RNFNXGDg=rA@5rLE~JB15j4UB^>lP%=wCLBztiCWyj`O(8z0CJ%r5Sley_`d9&Q~S%etR-+4ag7sLqr|JGu|{ zZcaq6R2=RC|9Hmn{I1vBsJ-}$CMVnKguApGo*Qq{Ri3ZT4`;_(Q^eM$?2TeLb z+$W?00B8yyS(O)aO>b}wj#6Qc>LjV9>Ru64&bBt~^KYL%pB5;tVl3AgR*n(2ne4mZ zaX3I1eEO_3P`f#!&tf-|3VrZ|#cGjBlDh`wbQYDJ)n))%JlPvKcP?90?%uz2$dSzm z(m*ZZ$|@St)fP{nUjBmGeb&G5z^VRu0EkJf@;)KlX3My*bUc z`IJd^##Y3|Ib)gh?KofX2ftzzT{=^jvaA(r)E`!_3&8{5{8>9p-OcjN@os zvx#Ubz(UA(@E?}T$_*z98X*@M? z)OfQmUTjoVc)iz{0X1NQxrxJr**xatD&115#Gl?*vSqxl)Ehp>HY}y9e%mPBBx(+y zcBRBRtcFmB5* zid+1VM@p#%c4*%nvFDO}MIzF2D}Ec4v%={zM89y24`V{}=ThA}6(_=FaSc!!*ad&) zlNRL$z4bg4jczAiMoOjP&a?R2j$1Dcp-%-(AbDA0|2x^IIX9YWsz$l-vTU>TN1)qT z)}2C&mxWV4Qw)OTQsHuM;?_fZ^TSI4xqmCKnmv4)Iy6kZRH#>X` z!AsP35~#*!lq!)%6CR)iiahD+T>Kloa$}yvJ(%mpOs>=@rOW&2y(5bT|21!913CQ0 z^ZJeyty~#ONjyfp)R4S}-hHg!UZ5vHyUs>U~W}**>Q7{RIs{ngjUg7E;t!oPo9=kuz-qoU9>8 zN09LkkJbNS>#f78e1gAWI2`5BAuULEiHIWI9n#&62uMnEDCurV>F#bsxHO4glm@j7(K@-UkO~RSov4@RbBUdrLW2Zp9N{>WU4KF>XhcP5p`aM-6Eo|1uHK&)s#wyr3LYfXaI%2EVYxw2Pl)Sb=1cN zD_nIp_Vd-U%i$_XOSDm9yY4Oz3~iQ7g>-@#kJsrOJ!Je>$dR~FZlRz3^|ZQ1FXc;B z0OyYKKb?IJFq^^c?&GX*%yL76Y`9#!EiGj z{bKO(^1_VH_m1Zjhb_jpf`#hCm-!{e(3tUc0W^Ip&=46w-195B_0a$=#D8|#9zYJh zly`kz?)eoE$G@RY=ct(29Jq|uI=Z0&a~%CW`9qJ{?cWbcqAmy}=<{U+XESUdqD5z= zn+(UFu&CyY)d2CzsyhwIcu?A{e^oUqW zjy73@cvAjjOgcOKE(l5{cBKFr0DyknR$S`HPyX!S89DGw9_N|~<}|w> zOxbSfeShlQvCWChp9drANlq?j5LjDC6+WU|ZI+&HQu`X$CKBFVdh}#R>gcsP;|=Lw zGl;dlCCz30Ffr4d$ky4W02(I1!JJgTJE0?vo*>~hB#h}I6jb>vYC({Vu)w=2;Uul( zh_VYz?PiR+M#``Gzs~Z}1FSTt>z+c9Ijjbtj#HboZt?`$9ieihwDbh~A*0h%CivU) zmS0!|I_T?3<;*8mFC&kGEMerA$7H3!9FK^LqBG{z>ONRdtw{Pi{Jd()4EmjI**%v# z=Ix$qSX*04E&t)D>|JQ;PjRO#kFaqG1s}Xs&wg@@LG#I9{op!6l^|*pO}+XY4U@c< z1dv4Z40bzhzb%M0tCMw5#7k}2Cwa`iSYgYobfBg@Q)BUbMZzDDercddm70fra8==4 z(a$HYU{PCzR!cru&PuedU3v>zaO#GKvcRkZko=^6(D;M5YR-u=c(Rug`q*k>`tDCWf(GyI{)*&Kixg*_k-NE9YXL>%~zqNi9hqGcOl_&HG-f zWg69NdMPz{yIo;gecZzGZt}_Bg2tsiLgo}P1_UH9dJGe$<;U1IM&B{$&av?*7~o9@ zLP%W__A6dgoOn1p3%7s;P6UUgN51IQz@uT}Hxn$AxAaQCkp;_8)0X*haq){|vdBT~ zCFF{}m!n{2hM##p{^bRA_d%XOrWMm`{FQL@BnQa@loeFV@GHqmqmKA(=@g0l7Gijf zNg^2oo36o*DQix1z;Z;_sHHx1^k6l`Fx=xQ$vV2F`;p1US?$J^X+&#tAjN!{8eMD= zml3WBq`BUmA~8qA+2)$o(LZ4DbCgjLEJq(UMd@Ia+2bu5G(W$lhtT*DaTHz zDKL4jCw#EZ_Eih+@5hrC=v89fR}s`2bZou=P!cMT4GwNjC_uHG{l={0%$>$)*0CoJ6k8LVC3EK+d#q?Wndtg%tb~{RG z=`V23{dj(QN%fw^HM+ni5Gi~4(61{h(8zEg{Lbn-F>fQ%u?0ui#`ni&q~F|eV+ptp zz8B2UO|mhxg|swMcFE-bjX~-X;1zFe_CFioqaN+1PiysS><14~m;ab~x6bJZN~g4B z?LjSmK=%nurq=pmA3a4jM@PMpr8*)^N1#hPh`=^ag2Csu7EuU&W>iCN9at7=8ikat zcS35(`j8g!VSbljk6fGzoGu#W@mIHUOYvrxvWG#R{1c;`v&VU8;RjE2Eb*aGWYKOi zxUla%wnO0vQ#A|{;2%R(&Goxpj%-YdewTs%PrZ6gtO)y5Vh!S>`!Mn!H86SU28lX2 zhDyF_&d;qBv`5IIB3{t)3V7qd)+Ez-Y#g7Y>i#1cDq3_j1*-653v@_lsDBz#`aFZg zByj`VJGo+*V<_o7UbKKot3O%Y72&0JQuqmLEPZZo-VnfJ*h2C!X<#tOffN-3@~BQZ z%Q(eisRS;~w!Pw@cYwbTOu+k;#EfXKZy}if-_g{Q5xTG^9pS#f#`=|^%Vccx_%J9_ z<^4Zj9wedw(JrunIT2NbIHNWh|Ln~bgZju$)h0t@{Mp~-Xd^fLBoc!(d{vb~Ovr00 z;|QemB0`$&$BzaH0{oxig}%okV9jY<1%MhNWl}}Jl;I+=DhYiXniJhUG8y2Hia6-P zTbapyw^?UTCn`*l=_d+bq2u8fV@1CRr=o&wNBRpQK0YoNyY>hfhq_ym862%(Ha-ANLG;u~{gnCe|@y6neUB1?jE2Zief8wFP3BciXY@=u#vkUIUpSGOLFAylg=Bn;=XU3|i7ga{C?LI&=QC2C zFAGyT6Pr74KA0>4(WqOyEGmC7Xy$y1z+VFxsC>M4;a_Ovzii94H~BZm+5XPNKJnG@ ztcFBZduim0+e1nAulx>F)t)M^<+c{pvFRf$r?twq*do4HnIDW68`7XU`JHmeZCp+A z$gbP4Lcb^(^`|-b^=+bT;Q?NU>!%K#SWkYwvn3?RY<2k4B42c%7q`pp5f7Hc#lY`H zz(2g|PtX@V{|>9WFC+dz(B!usNa9XBJ>mHbcoa17`}d5@kW>~O)1W9A!S5{w9&V3f z;&xcmgJ*H5F(AxHA7kVDjw$!)@iahUq5bX|mqH9quo>Chwux#LhBkVnWDC_CJ0xoH zejk76+bTOZt9GP=Z~aR~0g1DmEOd70EJo#|LGkynr~R^*e>s*kGflC^oYPbZE7^xT z9YL3!R`mnY9vQ?`d%1AbeSC~8Eo1!GI}P_uTa*>_>{us>r{PXug$`6$jjCJ3h9fV% zsmatv60Fzx;i;axWw(LdNy;-t&n!{I(Npx}tL~0EcdpB`!O;KNHYsa@As}LP+Qj^6 zh@u@g96AmPn<8r!NUoXCKs#b|ioU2t z5q#-+uKQOVMa6}(cM$Q)gPjyK0e_$l7ybt`bk7|JP1$}qL9<;;L&ja@T2WQfzA->% z<|XqcBH6d+nlTwJO156geNijQow*gQa4BsuCd1jrLcFM7E@e$1+W!w-b;E$gxfHSj zonxm%Yapmz?E}{mh04_>Cya%Jr!RLRhv@fgk4m;@6Ljmd^jI^=tRyGoe=8#15$7I1 zxXA=UU<>^*s(pQH*g|IpnC{iFBGO!&_d<#gqv4;TCdbBy+E&$ZRxc%1Um4)aYSGSa zG>c4?gvfpPz*OO~^M#~U@E{8DHv6BVkKMSzzFbD(jPv`ydjvFtv97Y!;X-5~*UaSi zH>QO%AHl{V<1=_RD^}DB+x(rwg_ct%o>cq{dcS4MU+sZ?nax`9qdS;Mm3cCWdR<4f zy8^KlahA{mp$B;KIbMx35mvIQn&S9Od^`bixxq?UHL)aO)}lxrytHv5$Q_E39NtNfom9{`GYabm!Chjq*q%Ddv={aso=oBkeePmbt)BiS-> zFRt(x`|UV&#H(Ecd-qbsFftdpqO@FpG*S`#B*y-p0oAl84PdDd>p;iA)5LWo0(skU znxaEzLpjL6c0_ojJuyUfPSe%`bU~ zJBG=mhu;E^_p}qJg^(rudD@A0nfD& zm2FrxsP&U2)I?u$ae?0tRSS`;MucONcRDhl(XWWo(bUsHtz&W0JNzfjdM>s>@AHF| zqN=gkEr8obpZ-EqOtSj}{=y5T;@d?|?;UJ=_5)+a*NJ~a8k+h+g<$V${x2RMHX9Et z*_>^4wPjxZR3biCH~TyxK<7}Lj@QzT1^~y}i-p^TsonJ8CykQ|P64K%)T@dC?uTaL zsPT|4kgb4NtM3x@95`Qsl?;e_jZuJzsbUi3RTBSQ6c`W}g(EqedMeD#R8WuBzW~wQ zo+V+OQbMPOFPbpZ((6M{so@nMKE0m&f^q45n1IV~pTNC3!E^q!#+;q2T=Au6jwLs924ty zleb<MGW;~O_$mA1j5v2qycyGUjYX5hZnw5Y+2>>=HO>Maa$3uYFl*9I7EGWoM#ijc40Y|VrA6U)DZB!m5kr;g62WngFuEPaC7({nB$g+>%?Q}Vy1uWe69)Jxc~y?j#qa)=dM zm35wm;jN2pq#|PNYw-8;!P-+KzfkQ(;9qK7z=isM&%Pys8_UcN8HgE~WX%XJb^Fzc zarhjN=!9+}PDfNu-%aeozUgUl>F$XP$DdD^doJ8S`TU2ZcMlTBa{sCBBI{rnUc+R` zlNqvWJRp~53~Y-YaYoWJOO8gELQ({y5QK$Awt$K*%pO9jhtX^NA3sN5<&;=ah<0d* z7>E(zDv+}D(144zcIkx^K5wtKHN#t*crA2I)_FPx$4}d{u%9v*nPesuy2HRhl7DGY z9u)2m5;wTMzp>qH<#q7wy$bk0w&6Z5s;~SfKE(P?222^*yMdN9FlEl%PcN8(mVJ+s z*%X9nCv?ZZdi1&=R401c$P%@ofL{?A0#>3TK++GWAj;A= zKK*}|)E57v7A%n3O${B39sWg4yqMtsr^X1)xB!~bWOIo93l#0`ym}XkMms>mRNWw{ z_i%s1N!DZo2TrTm{ppX7R~so5bL(Hb9;C8_~V@J8JO-sJS zvJIp4`f@bPTE)v2_zWk%_)8}LWhDw9*8eJ(ZEf7O)*&*}uQerQOXWg+BRp0);FSF| zVe7O?^%?)%d$Aq$64%e%oA*=B&kX&E_`YMoaIo0uCdIo)>V<;+gQ1NaqD_H+oKTHE z`7zeW|+PN5x4jR{#IQS0+UfKT)uoSI0QrX1$z(zw> z)p4D^>(Wh@y4s+(bvK!aekolWRI(SHvx*I;f%CQ)r;_014?%7_dM7i7$_;5{-FB1pBNapCjs_N>kh6heH z_%I4E;4cW%kp$kHN@s3HIUb)9128sMq2DXCuKW9^V$xCF$JH7VN5`ha3uuFxw2YO0 z4}#Yrn7x2};S&hz8*jAJFA&zC26|q6U7slWk@1N=NUO6ge7wU80mThEr_3Kz1%+Wp zCWWKvha&8-z&8w&D)=9F&)FL|oV{+>xx$l92KI(#2+?k@=8f!r4->7dJX}%$_`iBg z|7}`Dh2Y~;jfEuUjZd<91Jus_3dZ=a%zoKHad0F7?4kyN0%ua23x^iUrJ?^RQUpWm zq>K2+w$$m28YqqZ4OA^B8d@o3ge%utsyQG3TD?0N`-Wjl8A(na4$3!+?@m_N#E%Tu zyL^O9(9>U82X#>js@_;hIKlw*{|Rk>j3{=k8#WnH!1OnH)4l4r!L0o!OaHGL{$>HA zew^t%-2xW3T|;no3#O&G0E{PnI6fCv6mYxDN(S0wS2g$9;ZGaw3sVj)*N4(DVkm`0 zSL_AD+6AT3Yze3G%(O-gU*hohzB0L~bOgy%v@&8g$;H*lJ}T zlwPkiFF@M+S&!nJ!q$D-Qs?;b!nZwb6HC2RE3i{$U1UPZpyom3rRV=ZyjQdR9(trb z>dH8gHf~X77mN%p$$n}&yv_I9XysX`bz(RCQjH?)#N(jTfGvqm)VN2<0B`49Y_tx> zu2?i(%t#AAs?2C2F}OYhxV+l{u3Xyg-8}@Mfa*t-i-sm}>UwP*C;NijounE~Q5>FQ zB($*TXV1Tuz^a-3)lFcNRsZ@@WN8}wlXI^|3Fg16z_?`}-eB*6qHY$3 zSc`206x2hNPCj}kYUlS}?w{co9uN0E1RQ$k5ms>#vjZ~5Rja#_;o!rqmtmmG~$P3RAmy^ejC=DW%JmLXb$RZ|nnr?@k_Ga^!JK148O#%izA zg|yL|&1;4Zdi+M21d7eBKn86GlY8Zh#t}u}YIE8Qwv05`zY!twm4|!DD5*097l?%* z`3qZ;FEUDvOD~Ye^h#j>NCN+$#z>+!HOjP>4NFf8_Sb)5mLrua=BJI#w~ zMDe@5VvK9iv@JiZG!p-0xIEa~JXMR#e|``RfRQ=maoy>PWUC+hkU`}C3?Ld$^>;Za z?8Xx=&-%<|$wMp3=1cy~T7=123`z1SGUD?}RH!ASc2}J5CWie4=&m7(+dW8(6KV=) z-duXRe%*();dKrMv`CMkbwE#2EbVy@>fw`qx+xy5mie*83v_{xm#;OeR^Td6w$_e``D2;CdKu<&0^i)7oC@>YHqfZ~Bou0IQ1>js zN~s8g{58|7J=|9nm|w-iXMT^6qlWr7(3lR)(J&xe;%i6Ctjf~B$@vGNTq|k;Br=tz z_g8AQP$Jf?Pd>`B#`B#WvjTQ#S5N<0^5^bB+Glf(UiKS-=K z`eGrS@eSTw>K`sNwsoTbHn?+~7OK4QaB1a}$Ic2lw0s69v!3(x{rjt^IL~6~BP+6; z;{b=phqZJ*4LKT{l|1G7XXu9;?=)31mb14f`CuuP`h^ZoX#^@OHC~KT(UkHZ4<&Qc|3|I_C2UAKIt7R|1OUur$Fi$uLtPkcX&U`UNAV&zRZp@QuC-gcOo zcDredrxc!b?LsD>GntOiwM;PDWeVH-AA0TMD4%f3QoDX{+_B#b%yll*d7y?*UVC&| z4#!T}a)Mrtz~Sw%8rQo9Nf#o;unZ|F5n}wyH*JC30!?Y^6$i3kLt=!1XFQKK z>TW8ub7@#QW6((2=CFef^GMnXQeV7l4PTR!3<{|5TiR5-%V6^p9VWD+hM!_Sl*<@< z(7;c>SY8-K^`BLz{qE!~tVUY4rT`$(Gu!X|xp~s+vv zDE?83>|5V1(^nrX44jrW00i>i_CMNzPC*+81 zOz(45S55x|{0X!4Q9D?>U+l+p^8=OSsvS$d(3(+8VP8 z<|NF+il~wK9P^sr+HD_D7SFaLS&O;~aU#(GsG>X`F3WxxTtl$3rF>v{a&Hnq=4@2V ziK=`d+cjxiYkFTe=X1KwRll=jSiwFBPwh@5+n)W!y~PePf1VMA5=ykRN0CsXA_6W> zC)6s$jhk%C>6VWzkAREd$t46|ySt0J1EVa*r3P}U^PsJRg0VgnO($z8ofUuP_;LQl z?fn)z23llcHQU2ZMUDH60Qw&f46H%1g?e9&(}Sg6Icx?vS6JRv%x>de&+Lzp8lN!* z^slxOSH3Nf7` zo?7;2$`G!HmnUBr20XzhdFS;$4}(%(lU)n>yxoLlt^^d}0qC$Q-K3q*8U|$^L$um@ zxE`q07|ni#;gBzzSN`!9aC)TsMax361+Gw&cE9&UW&3t(Nh_5QyaXf}>KromW0jR8cSx8_j4n3zTeyjGpxWQhefFor2 zabzxr&n~m_(Jqno9~!vHXEzngknaT1JSf2svN#iKrf`D6UiC-|iVT ze`Q~@dws1k7qz%zRjGNzk+mR~^~L;h_a4PNwdn=+zP?-<^RIc0OhY9A^hA#q46G{% z(Zg?@TvPbtKu@0Cy$>4G_uQdg*yPdI+>WPlr6DP02ochL!qoT>WXC?DSIQJOme9Ih zBd^0Q5mq9pu$sxfxO*zud@LCc`d12ma`&Ei9_B2urNC!It0lZkYiZVdezba+`8lbdI&>o}z;;SjwbgL$*K#}i;bxxMBGCqP`N z)=lD-gD9A^4y(I)pSQml4}X+hJ+6Ka z;C~gh&`k~<)VBEvm4EOR!ww}W=(`K9wgl&`(U5TDZx!X?Y)?l7-Q|kIEoSRHUZX9Q z3z|$mv2%~An4W%FD!wAX@kQsZKlSoTy*AmE>S7hQEzpo6j>p0k5&9x%C^l8}YZcY! z^%IqzHU7(Qv-vV8@)TsFk+Vll?l(nbeme1q1|NdxQkUvwr;zS}8W; zhN99gW9VYLEOOT6v5OrXVxU2H+%T{3_^CYzw7r$EPjk3}Ow{<(vowg@=@L$sD5B7$ z75+;TsHLyA{mOBZIk^Tq__Lz)T+EA|QYrcG zgjJDf1iiRho2w*&PmD6uWrMj3Cvx7Q@ql~hHwrdB4UUJ`D<8kom+k*`wsO4d$8yC; zD;sgNE1^{c;jtIluTKGT4@(!HG%DJEN_I8em4A}|BZQ`DoY7&JpCF4Hf1v9UzbLP_ z{P#&J^u-6gHtT@am&aRU{E5HbQ4_*1!}SMtnfS$3S@8$Wj}v-%xZJF9URJ81O%XiS zY_yEsxw+mAQ&(6GZ!vpYL}qbJCI5RpZRF@IE=sdc4QCnj(?IzSeN{*lBnm=VucC?OQ>0{ac1ea|0slEp4^rAfR+xmkgQkxJrxVK z%T-Snm6en#ep}06K9=10aF_Xa=~v4^X3NF6*Wt~toBQ!CZptN(73ZuIAMBG8fvq=1 zZ(A??E^V^$?fd8QoLRMqwtQWca%%iCrS7jkAL=(C-RZv$qEM@%7W*MonairtuDp-N z=AnjnwHKi-dhLNK79>j*B{&A<~&_`S z6D!_<92h3!`)I-n=yX{3Gt&IPn_ZV9KS|Fl1=E|(I|sf6SB|O_TGQIzqrH}s(vK*T zG?tBB_t$!azB#-STK6=im&U!;I-QQ;y9+hWrMz_d?26DR*-F`Gj9I~g(kPBIg2uWjJ!63m;`@bn&DUO9NzMR0s z-=j(z7o+j#_=R_GJJ*s5MZIDnfKP3zj1Qng2;jtO1Mg{@Ln?3C>AxPt4-&yKo_xiQ zL@`vLGSW|{RFFlTDQeURSm;!%x^q4N>>i6{cyO)gkGTFMjWA#&GMg0so1Y zhHWU)6H9;i`P8XXlR*mdS1qAEzQKO<$YzeMdgUhp{QLxsJzN0t5Z1j@xw9HM-Q#?( zh`O@t9AD$J@`1wP_u>;7Jd#tfP;0!80Rhz31D~%2G! zxQMlcu{1(fivyIV|Jir>^NPM>m_0c&J*Oo@<7l<~+}>pClZ`&?88nW7cVW8DO8G~_ zyOiHkfO8{Fz@wIcRa3$3V2N4K^E5Uwk-%fOqG=s8e1BoLP@U79DePwm_(`ZJ_*~x7 zOw{=t4>3-+I9t8(zO25Uqi|oMcIdn+Ok~yKDE`;pak}ijBKx!P{RW_jh#TQ(8?E>K z5hsXdjYp!j%b;^)=UgRKXeY*ZDX8V@XaasLy&xBD_L#Xa%(uZr)>Zi0=+C6oo^{B8oI_ycX6O*mwEP5|KVyv_(A;;=b3;ui1gAP zcHUIJw3(Lpkq{e86^u?8?{TupY;v{siE_ADC2#gJf|xUzh+Vh%K0ZEvJ@?ZyRXi~X z%$xK5vi|pzIq>%5VOFP;vDcsfnw}FfK$xGp$t-mbIUS$AVRrK|B*ZIMKPJ1_Mvmx4 zi-bPjZC&tv_|-)o_jk300JDehSNVlf)*H@mzl~zOTbu{O8vX3lUXLy2Fc?c+Yx)h{ z<8tlO2AIS|z$wDggNhtHf#{wJ!UTzcYpawq^krz%bb)-^fOyc+LEE7wUhD1ENl_h2 z_V-EyJs%tu`N)Ss+L&T1%khlA_b1y^c@~THHany+ao9NE+!+L;gGpR{97tYr3C=;=4kL`B`@vmZx|pAwH9 zm;4RUSu)|3pn@7kk@3uScC~w)Sh7G?Jhmu6#>gn&VkB8k+vjG#$>}TB>p`IA?4X%_ zB4f6p0y<%=(FC15mq`};Wuhtlsqe>O_X zDpm2OAdk?s+gW(MHPQNFQaM1|S*>L%!HiQ!_8)g6%;DYT0cR(7p#*TxsmL$~;JP?b zhGlnR51Az-`!atm^r1mHa4txF+=StYdHvGbrLfC7Sy}P*=x^+=)DV?my-shB1{@p} zL9@W_w)4ezkEX;Z&}M0Hr)ogMbbSeHP^!-28ZH>Jpp3|&vBFDMr1RfC{L&^tG$&2M z?!TyN+3b2r@mS=v!uRgFlrrBwiU#-m_V#2#4r)3<6)qTAVKxx`!f9Q`X0g7c7WI3- zlvgZ+FL>8XN8lUr$lq`B3sv$1PG6kM(5Ma)T|o;w9$M%GgtZDjO)btbGaptg4#^mk z=s%64!Nn-N8EjG~IJ%3={OTVjen~TFI;$YMZoN}niNDf&^Y`$6GEey~mmte(^w{QO zIo1l(8ZLZ6`jaWHM0*G}#ZDHvYAY8PSAZ#2sJJp7Or=1rK9tH7XL)n%v&Kt2pB-CM zn4mIVs85JY7a4{)u0`A3`Ooi$!uh8EtU_P!QAqGz0q!MR9O~(*g+E1Q332z}FesKg z6B`}R64W~jJO?B`LqP45j!rC;iu>y#_kmFuR&Eiif?fC><_6bQl#0?)+ zz@p6=;7__TozZ&U928SsYku!};*CmdYH)#3R1nDjoPs=`8{q<|@{vRoXeXHL_+jC~ z70^)s-m!H){)gHV`~A-Ud7#kP7j6a5Wrgf?^Z56zXrEwx=E667-1I?jFDEMv_(jj` z08NSoutT-3yP7|`{2nA}aBb9K^r4Ib5$X+w-p2KAjHJi| z_Md4q(e?-ews7vZQJ8whPs#d-&v8wasi)hreXmRKL$=L&gV1arsK5AHCom|+gPma@ ziKDU?&>4B2!)dUOsS-B(0u+$uhwh*Tv+mASsL_xF(}jBWV&BT)S%2<&R!C~P#43Yl zO{SSmA(;>BvpdxhzjCrjnMJ#UcGU*QAcdo{oMkgzx~>N*($~1xvEe9XTaub2^TC3Z z>&#=v46##Sef1v%B5PRY=ik6X>#6V1*MeqQp_xK6$`M?9YbTNIe}!pnQFA|?9%c!8 zaj-!C2~^?UpsKXPXSt!q(d2Iu7sOpTRqJIaXq{kO;Y`nHye^-S^-DB74_Ed65$NO3 zbS;vIgY_q8@X;2n=>s)QRx7o|uTl-x&lULTW{;88apwOf^~vOrKIi^RYbr^#SrCCn zg=8hLC}q3UOB46Job>ASr{MHPu!kIyWdl{;jN$c5@@MTIBi~-nrjw=#+ww~0G~SP< zakKCd4@Oakl3R`>v*-L2jD6AXD{3@mjrzqiba0I%1)RWTT1R)RRqfO7D0@bcy=Wh< zwkS2|Ozr&c&Qi!Q1YXq6dmq*fIO4`g7MQmo|Q7x{a6|KEWuM$ zkk3mha>K-|OdH{bBiqKY5xplop&b=o*dxiypVkAb+?en}A0szEFNx_}A2OMiv9U3^ zo_(1i1o*U-#f3i~MH&agFegTN(a{zn{E6Vz=$~YF^UMS)B3+kR;u{&C^MNTyK0XuT z*`Lk)w9)r>#o|JA{(g1ohk>wrmAVxhQ5#40wV>)&lAPhwYFb)d=*|zCs8oS>1#PuV z#^~PERFDOf)X9=cW@cj}l$j#r7P=9fPhX34UQPeTW`eN0A$@WuKvu_y@$)K3=aw*@ z_Fp7kX2Xx7ahzJDG+!f|pWmTO+{VZkCFuXo!n~~CeoGjnLJi@eQ&0Wvhr6Ji-s&SP zX+l-T7-&U}%aY`F$C-B;wKHF?j*M!H??cAK^^nyxU39Nw-BrW{+24AiORx-$lpa`> z!dqg4WG+$sBpbaJgRqOb15cZnoeCj&RbXO0DdKPA_*L?o`II{vlLP24Z;8^VO4x>Wa6mk=A{M{9NjLCsP0HCC>q zllQNx3|hd+*Cz;vcdymai9qOL3Blb@CwIVImg*xU)I}7=A@?JL;a>k{Me4kmCCs5b zMjNmATei}b+dD(W_ciG1mselH%b6NA{-&czJWhDrY`?tynA(?euWMh-w_u% zTm<#aXSD`;NzWQqdGd&wfA13Tjz&TLwiPjcF`q`wQsvcW&EKuiAa*hfXdKP znjV=zLVfpI_>IfyY*(DfO}I$DH)^yI`;5>+p*PoRXR91iNSnvAp5#3_98O0K8tJ_^ z@U_Q-|G-N!GlB2m$~IUzVHiL59^!aYBgO@0y)ByJb5JF^6?w-YhnoQK>3eccKrsO zeL?|`>x>tlXeO}@bFshzH6kv%dh?UdKjDWy<<-%^G>dtPopA127fSf?acBLa>*)vs z&r24+1k|S2XKw7=n?Z?uB)=~y!bP}4YjN z3t}j{UgJx@pl`1heb)7cWtP}#ZN+|KIt;@E zp*>P&y#|+s0KNgBjf03~FATjzLR$zxVlk@GI_lDUf!>BLZCj#Vql1;yg<_m2DoqK&BOmqoj?}XavT1zz1#OISCf_^i?w@O5nKQ@T`B&)jQDDF%@eF+!Y zG8@>cV}nR5>XcR{!g0+p1d;9N6t~rtrGyq2)<9>Yl2;s}QPS&YhuK9!ttIzf~6+g?j@E&^#&yl1eUk2AH z_t`4TZ}`(+q~4T#bfzxR_{%W;3gm5PDJ@QLghy_&?UNclyO(7B>&kib$CI1In#Rh_ zf)m(+^JCNsYPbj*m14W2M(OUmI(|M98A@E=53VfCYXkKTRO`2XudMO3i?rhL{Sjwy zi}HZl<<*3Mys{W><5M9;aQmnVqQcHFr-fV70o{u-+{nm~LlS%LdLuMH@2jae~p&3!oFHvAk>pc=rsDWj83ZfxY)7{@bW2<=~36ot=(fSj45a9Jl1r`=RyrD4S z9;adDWkU;!2G49S)LP+FA>$)~XL5v?$-x6kJBr~%_}1I4fw*4KqUfFBv09>QxcH|K z@Nw(rS}nxKC!r7`_&?ghGB1?u!+HJdrV`nBBK*|n4i%VL&DtNeLCRrulA0C_^+o+& zDiqiW0`LXKb`u|JJ^zf?t2;_+BI~t8&)F%-qx~5sUrHO4f=o&H(>zaaA8LsOni(h3 zO>-1K>@zDcUP1D1;EH#cfqc-zU_{~o!zFP(lUoPq&1E__Js2*KD~D%E@hOjV$AE^> zgI&70ZuVX%bWa3mB(`A=!eUG*P<_N}&WID?XNx31V}^iy?xL{}FrX)CwbF?3JjaLW zLbD2B_21-%W$~;rgePGqXkdd)BnrkOf#XJ&=IBj)Ju*Dw>=P4fDt05B+d7~GY<$IU zL*rm@GOIKYolqzUa+wH%I86^mJv9ONtGH;A590A|KWG3kJR5|*OsF^Px@B@GZbhDs zG6E|mq;@U?0Rl<^EyL@4#sr~Vg1=m01d?%JBjkdy!`VW+t;FAvdR;__j6YT`-fCu? zw|8Z~Ci4!DG(Gql6c$J7tY6EXeLxZ z3my;Vk_XT{Pjvaw^uJGTS#WlUAeJQ(u`IFr7titk4}t@o3#vj5?}oWkja|qBGZ_(x zkXTHf3WOUyf22<8_W!!0iM`1(*?Dt-c8Wnv8BT?m%XPMNIS3tY975LV_Yb6scqD7s z`B#xpCoG^|vHp^X6`_2AZyh%=jrF;Wix%#7g!2A*HWDp-liMN&$W3RA*r{u~aGK}6 z6f!5IXzOHPL8y=;{u}c9xFPa687lWbYdbMZPX=A_-a|>yB45Qg34ur5XmQ(Nw+Qtc zA6*Ut|M=!$Z9W09%4}vYV1TKRou_*U;Emd{;Flvx6burpyq3fNo-nSb5f2PkF1J}MGcr4U+ejJFGIB^{Nn(|6WUUPzjh5NwRi0r?N@K$e zgE~z0ivUG@EEX|=P;`-1s2wxJYQj$$o8k={j_|^~U|!wUxa>Xy*7{J7c)m%;;}_=Z zjvk(uGJsLl&wP73?#25#%$7nCWDm1m^AfeXM$f|zNsRRxJn@aes;=P$6|?o81Htv$ z5e~I%_rn{1Ps`aSUke@reb!fdjPfUPK3UwC|A@aEX4UArJVE&=pg?~|s92P!Dh8YPv0geHLtUzJ>qpOl1HaXN-|fBh>-l`3?) zK-JQ)$Byr3L|pPK2QUJ*D-i2i7LUu1V}Sy$iORKb>6 zCvrTnp3+9vKRg>&#R8va&CMS5bq*nDzP9~4SCmq3H?8pa%tyO)u8Mw!v5TWgqnOU? zd_T#ylB?0XQS?_Tm!jpkhxBI0S@bQqK)YdG-f ztM`d^KPnURwG88R-M_~kWVV)0bS>X!vg*$3b{gKb;3ooR&bTRYX#iX-Vx_*i-L^`a z6o=OO+6lI-$IF{9_5E`?UYF%z=)4%l7;+kT-&D43GIL&`e)_!9#u?t>zM^Bm*KkNu zt0D27Aw;o@DwY|OhIeE9Bq ziuk8|18=J|CQptIhLfAV3hpSft`NEr$rXMZTefTtw(y)TLWih<6>ByQ5o1cx{_Icz{cSX zMi}VX_{p&DHxGq@lrQ$smf9S$6Uz)GlR2+NSQ1$|-CHD9*|Qk-zW-FID%IK?Q0DX|SK04J zYOCx%YTteL+lF=mc&^xpFFOO!ml_ma0iZ9lPr%v3ft?BSc9`;pTkrm;XuAcBCbbXU zzNC9BM@%luXO+c2y;D|iJrxV*gTYEsrFBp&m^k%;EmJl-9XuES}Qsj!C)e zxn}aX;VR4KAbka&d!qe?TRiBRA>FT>l_NBf!dZn$e%+ah3p%k;0K&+2NJ%+%qZtEWuZhGEtyqW*lwy zH%45yW+wmOL5J7ui83ZRTMQOSe&5f9bz+OXOXBZanTxK8#M!>%4V=$E3veI!9run5 z?VNZv><&KVR8B5C-qP|Day+tP_OhbCGX18@tXEopz1KJNWcp98(D6_y;m(8szgv7w znDU54r6~>wq8*BN|C%rRY^R_@eC&+L452uF{T)7&4|Byq0 zdrdQ4L!c)Bipt$PyDfd`k(`aexUW?c++?WIom9HpKT@{%i|Ov2{yg@uu}eq7vKaa4 zoxhXi1re7`^U)IpCl&e*c>=i1$Rdu#!=LiNhq1x^a;E$01BFhVc&Bz}KZPu2!Fvxq zkd%z)ylDikV~*?In-}0D{S!cK}%g0?3kA!HHybprdr6OCg z;Ao4cL7b-tg|J9R)M@W*grC9tzx|B=$so_YI6okUd$Z5nb_>FN*M5uRAzZ?M3`sTM zEc`D+yf2)`{GXSU9Vb$WI7{)XLxC`ot7BxzG?Q%cdjt01B(DD~ZH)u8vmOtjoeJ{e zwL0?uC2fK4HitugXA0RB&S2oq`kQ6(l1Ep7>T=lj=JZbMk&(`OgAk=8+o(Tvi&(%9 z1MeRJexU9_Ksl)hUMi2TH-9~J6gR*PA5P$(Yrwge37nvIXe||FX1vI(E?K0rx&DNV z6s;b7$?|LDJY2g)pZvtGHjlp5#p55QI($6)ha``T`yReJ&I~pH!*9r7^&Is zsGQ^DEhZ1%T>wUbIjZHI4o1<6@MN2X|7TT=@T$dNsz^@%fS1CXiLi>iw7^s1zXEd_ zOld7KhZdv;{%*N!bbns$xF%);GL3~X4!_!USk#MS|2n(*icB;(uJs;|yk`>?RDDhn*)5RhIdIO1%mN{6hYgUC zQLVEai(M$;$C~G*&J2>wMCF96nDH&pWEVVr<)>E|_}?W08}5i0v9tGv1LtAKMOOX0 zd5)QZ`HKImwYQFndix$gVHjX28IY7329OdF5NQ~?M7pFw1%vJ$N;(ArNl6hU1f)|5 zr9?nN8tHB%^qujl_j`Y9y}#bOYt~)(`FzgVz0W@T>~oG0`*5*-|GtQrRQ8hBM%Bp2 zqiKKpm#~Ru|K2T)#%Ay(NYAoCd_-gvB6a^vhgdWlSjx&=c^=r+iL!K%eo7!JmrDK zH^>gf2cATv16XzYT&SMq;sLVr?4ZW@27@62xeXRBlK?Vi@S;~{%}o?Mw{`r^b`)#B zFQz4#U>5iG*T)83=msomItapdZme7wriw9u4Bk)d4iX49!1WyW}gb*!;-uOPq2 zw)p{V@W-$A%{=g2kakaCmVK<$8i+f5TC89C6dX^k436{9mkz??cbt=x9wMJ7rMZUM zY&A;ibYVxCI+vB4^+ph(e9MiM)Y=nvm_d7yILE}sCW9kmUrGT9EH;Cs)70zt z6VgZ@HLnz;4OKLs?M8~pPgXtD{{XHJxNbW>WXm0V?t3&@*l|_wRSFm%v-q7CZ>I9! zjacP1diy9MBtAD&RlyC(zxt4V8&yY7qN$WI-XV6f2M)S600-92n;JEFfP-+&{Kg^= zYQcpFU}H|aBBNs|f&baV1p$fxz0X1xk3azm;ti1z`8AA%++MQGg}vV@)-As559BKv zgrF~}-xLinXghM>7|(BtRiX|iJ|tZ2N8~*dvcC$Cg5RCG9Zt>$4HN)txSw+sNj<@G zD-HxJ9;|lXU@KYd%isnlHy?eMJn;wDTMd)?+9S6Mv;4?M=U+45C2Wl|41!03_3c=- z3{hSAmP|iU9;~=$&sM4Ij|JX80&6)}SKok@xuV#WS#uFpwdSpmgREdBo7Tvd+9>GljhQFbeX8Zh)U0Nk^iGx= z!o|I_$E@a}*a8?2wqi%{Le~Efip&8D#dQ$02h>$Zlh>XkzW(R=mOs}smk|^9B905= z>thwVm&h$|5=n+V0js)1NJ+5s-s)t=Zl$GhpvFN!Z_<*A|JJ)OcmYD`~Se^S;2{JP* zcZwp(+922*}G)1q6>F&oW6;Wv(pS4q)=}4}8 ztuFn#36|Q83Eb2zLX>EbfmuGg;j4RZzuG;yVLPr=Z8u5b9(J!XhCz&Lx&`l={NRdh zZp+bKYZaA<)$XstOMMx8M$mijiJbR3O-HAm%i^aBSjR-jtyQge7rLE@oB!W6;i^Gn zdh71OuZK!|?`gH_Rg{%MVsn16pFk`KrHA3`!9!LJGFar3Cr@~}E?-kP+U{u$!pB{a zVDJ?6+|9e0a!vX%sXCFy@=Lv3*hG_Wy-GW>(Xhe8@gSXV)w)tQl78O0L&8JhdEgKi zG@%eC?t4;6!Koz|jl+js9^~>$Q+UPQ*Ym-2lkdt2YMjiQi@D{RVi;>4^MRjAZX>*k zw{bt=lJ?hZ`8RxmSt%(ToiPkgz(LP1D%YnPy(f``5YP3|@>O3s#qK2TrmY&E0 zgR+3(ccc7zl+>LolB>31)-8|Jb>>)5(ok)FKz;A;Wr+L>^g3>L8!jJ3{X=J-P;y zw!SlKYn*Gqe`tGV{B=Xk!1H45=m;z;kQ@1|Lunp(>DN6d7x*b}`I3N!ShVGMGVD54 zg2xHD4>_d$H^NO1O#Td%$etiXW?B_l={ZAx?T4! zLp0CKC*Iwo(8SaTkjY%PpSwy!w%omSGD-(S*(0y9h@F!KbTlRfgthdn3+{<`IsEJ; zF@RXM@z8J28o_yW+4lc1XVKygt(vL`i4S{ zSjfYD{W3LWb769oq?F}hPDs}!V~IWMQCT#26mY2B1ZbKltbAAHpMkj!15cWb%O?=BG& zHbt<`s+8vTS{Htrisjb5S-NzVcyv3IpB#vdO02VcTR}6>N@+WYlI|#)Bwk9VIcM~p z0S&|=w9(#cPbvo5n#l(v^+oZ?Ar2dv1us!kFI_eMq}kbn3zc7Pj*t7_AR*C|@3ut<p3^_>=b2T8r?7FUddX&t?VIU&{?wmhkuAgtjqGbj`&!hRs=Sv1%RA%DZhG zRco_?72fb=2pOz}Hufzjk111PrN8jw?;`aZ1S|b}k;e=K9v1;u-1c=&eBEdbVHUw$ z20Hx@979-C;gg?3a6Fhag~SVw_P?(>gX*ePdJ$ijP}+Euy_NKxY%R*u^M(zko@EZY zJSjeXm|Xuo@!K60912q2pg74jpDvi>1m!}K)N=Bes-Js0>U5%^SDr}ApOBkB0xBc7 z>U`-y7=9#-r$qhHgU-y1VYxJ;sYAMQ)Y+$h=M1QJPI}aO`%#qQ`xz;&_&4g;Y{*pLQei;0(bAyH)J)r6FdvhyvVj zDmM?(^XxD=>N^NR0yQNoZPj)#b;#@WYo4JT7H((*&Z;thiIe&UZt zuO0AQdr#{LZ?>5_G|%C{(^Q%#6G@@FFl_hr?S}ktw*vEhiqNfwy_g8E@8nU!0;Fw9 zLXFk%wqB25;wDn**hEQWM%{NS_RIsp3m4#>U$8c~^LF^IUWo0m9?t}&ZU|Y^ALGR= zeKFzC2a3#s>0kwZoTZD(>!0QKtJ*Ek6?@69AROi<2*w)xEAlo~DbIeqAG?@PC#7p> zdDeL2b&q3w-Th?77l+PC{7yN`u3AM7Y~dehS@=XO^FBu>GcG`}GP8(Y>psGxdV#yp&2T0P*=j_sNhRoyN8f#$ zP1aW}14~D>%2$isK8y!kXkTJbLL?qxi^16o9|=GT!cl3xk&BoWoj9x010Nvv`aX%WU@VcafE z*rp+ZkU2dEMSD;)o6(1%F4yP?YSG}?LX*pKoAAaU_ukcbGq15jS**j4r`C5~tHLj}n`_mx7KFcBfb!1I z*j%Jfj4~2*cn|A?5x4JLqq-F@`vheGChL!J1@M^zmRZo1_PY^xTr-(21y4)lpB8aV z**t^?!2{vJHlyq*8obi^;Tc0wp`6y&?bC~@!7O61zb$C{-LP>-P>e;W|HnQ zpwf561Ne5_t=R8`p`u_mbj!)sVDW*t!6ken_q8uP-Sd}D_t#&6ncb>F61XG|GwG`k z*DGT<7S#|N{n6tS`>V7)5=xK48g7~_ba!Xk39PhV;eq?C_t|B=!i?mfCc$8~Qi@1hcAQ?@)mUV4m?5M1HW%^@HIkA;)7cg=x(w4wf`e zXq07_hqbewLYESB)vuh<5r??sbw!RQ^tN<{70BYG+`<}Ye$N*E(u~4K+`u-1=cSKY zmd#~`oR=OSPw*!x+rxXw8OSI>6;fecnx5hZJW|H>CPI?t&MGtipXb#%q1=-_5d|C5 z&1Mcvuk32>JsNtU$yHZzfAI3kSViHf_tB(#R!<7wJ8QX591zEL`c1YDK__9n#iGJY zry~LTDe?Q@j>4K`J)KzU2V`MlPwHJ(kTp)5;8HMtuYH@ND#w~HBqOlf1EAa>yN?f~ zmTt136YYyXydGliw~1CcO1iNSDt~u%#LPxG#cS#*-|oPn{t&mYioZD3EEHxn-O;J)n}r#ddyr zr0+aLa>|^1#Sn?fU(gH3xw+4Q^v|nJNrkKvaasSY!KOB!!kei%>p@|iH8n@0U37kJ zChxY1FqsD)rAB090k}bP;DRzMm`Lbm~0iCpy$h3zpGIoZ20wlC5pW zOpr&)9Qq~cUe%y@`3;zBig;{iUm_*(1;Dk=O}_?A%U-j*`6?I0$R>mo9Eciknx8u@ zf-c+CG`UR1p(BOrObhxGvcz`V*qdHo^l?te1CHxwN$s<3QQDB|F3Z9Aq`((Yt4Kf~ucmm9WauYz*d zr&mo@DW?HnACV!@bU83YWq4#pRt2Ju`MM~V}G8>bSTi#(ecvL;|7c!_Ia(e+0^f3 zg`HC~Cs_Y$>nun^Xim#g4ARtIZ^BArzRo;x=6hj4AZ)x}@^n3?JpNuNLf(sB27krL zp2S<4d4HDOzBdilb0vf5#`br?5#uNKvq04Ta2J5n*=k*skEG&kx_wML@=EAAp2Y~b zc_p%AW4JgOu}k8(S=<^5?*`?kbFc0FJx}Rd^6WwC8JaK&ct+mh>Hp$~JZo9lnqKVe z!BY{@lcny?Fha@3ImVG_RwEr&`0zVnt;^#^_mFT+89Ad*+wU;*=R{DN|KZbf*-4uw za6KX=+4aK^dzr2)rt6|zUk`#PG-<+!&dfs)z?eG0#YE~LS2w&wyCEbH(ZXldp#(}l z7XTL@(91En0?(CtX(ZXC49A=GJcB7mDLg#7PriV8^MLl$(fi+kvcC@9`l6N&rx)wJeu<0|bxPN~Gcw9PIx7W%8;sUv`{EeE zmGRikG)3&Qyf>NTe;TmQ1a`fqda}$!w(51TTEtg1X|M$@f87-=Xl`f>yuKs*&n70! zNCQVtPOGR!&yG^B|Fr5(!8#;ZoxfAymT~Do<{Fr{__`fiT-bp;M-N$)Teef6@>=4w zWCu0HtjxmRNQWU9&OmK^&FKf5=B(z^-ZM^O>0ta2=or`&!Vd8rOBy?iv+R&m;JHI~ zAX`Zs1?Ozsc>6UG-BKg^kw6*``*E(l_!8c1;i;??JTB}D^Fd_SMXlAaacSc3d-OCc z!^Gvd&l^D+EGe^nX;grqKK_>c-Gex0S)Gs@mwX-%u^-+;4wH~=s%5V=3#NvnV4N_E z>sAz)`(7UqN#ASxJTiUjTA)-bn*k_cKKZQ5TN{hyKeVd+TH~)P@D-%(>Xxm*vFRIno1F6!Ra7C`{kw?{QBjgAm&ZfQfnE(az~RD9 zxZcJ4hJGO9mGCi%yI8{K_NWCZrB-)lQo9246V19EOp?ixtan-|TgY1K$MO8``-|#I zO+NP(8CFER#&NNiw$2cXaK~UopHkPQ+*C>~9SxZaByDqG^1gbcv?qhevB6zY>wnBK z|3qD~NDeQ;<;?Sfb3j+%cAz=GLXAdJG@fQm7yIYUDXone0lSHs$V1Xg8{Iddmtv#& zB-1p#q$*sTKtVGunb~@>+#VYQlOH@15Z$#oBMq{?{#joNJ~x^irj%t`8hU|2g&k6^ zK43NlDk6Wdr!s(;3MvD*!1UtAnCqJ263TR`;wq%ZZ*%ydkuuVTDiE-nfxu_^d8p3a z0;&K7?0lhhmT2HxEzOt@Kd&@Cs7t}gVrhHqd|sx^w4%!(AE?pR#ADxk9CVJ!ude9H zH6Us$Cwq)EO=73zAQI~e>_ zJOW+s^-IS+)SO%6y#^&&@6VEIRv8Scsy+|eX3n`cb^9LD;oW1BO)Kns-?-wJSmd zax~Z!0qd$otK0^-}0N$p75aFi94lv5!Cf~z}EYTRi5F?qCY zuOpB|u150vw~NC}!AaF`K{3C}z?FFcT6y<|gN5!A)MBWLjg_du)msxG zMfsO-5+s#wod;gLb{N6Btn7OdPJJ*v4JJscg^z>2YB(?{LN{2_JO{A?w+VAVIaFY5nc?8Ioi#1qsyGqLYquw_Q zk=5Mmy;NjaQE>9K90t;MVdrsSjJX*i&K-@UgZg}g;K-ysN+>P3OSjdR3HMHXqMp5f(K93kcajp7KSZ z$CwNyNVYEuY((ILx@-N~gD*ytWV|qD3d5Oh0m7$ao(}iITL3e{m~))Q4uS!@8^e+tMK6IgTHe=$|3#n#e28lF@O%_<(G=AA6`H zQS65-pZDP-wnRH0b#R_8B=4@}WuXT$bU|ImvaTCp(HG4WpS3tSe6#Ay(z#`9>KqH2oD<_6jG zEnHC9ak=M*G6Di)?NN){;qKg{Nr4}K^zi9H*Ws|%nvBnW9QYK~nTco*x5==6M`}Vr zyzIi<6w4GR{F5}Pyl!Q0J<7XZ{It!``^Bdr#n;PQvgzjZJU0e@g1rDkKLq>lHHeLl zV2^aT^H+3Fe}AqHlTP0Ym5p?jeMS>PdLl076GOorV>l4c>GK$Z@6Z6|=|jazWU_Is zl2-4WmDHzP2Gy`7LPPnIOHArt!mqjI&k!q7;Wa2dwjnoy6(UwZo z0ms^}i;Lehx<2w@YF9i-NsId7_gss?Te<2yOv`F&R6VSJe@bpXH7xUCyYN+Hm9UnQ zbC7zxY2PcFcBU!X-gi-8tLHQ6c;7e_^kNGS!Zl&_1#Q&*hFcMfrSR5@^1>DG7=M;` zk~hCLzkM*nuDX?@_=UqM3wwsl!D@96$fK;J|#N(ck=6&xLi<3O}1lZ2Pb+LY(k&<%KVbopM&Ug)6^7))>h6!wRDMiiut+fIPa}S(E~dTStR;nU-V&SuW?abF^ei5`t?TJBlBUOjmjYFjy8GzX`bvS29lE$bA}<@Mh#ooW((M>L-@^?a-E# zg`+O_P^qMNHANN63ORq%SpiH19Go1?S(#fu-coM)0nQlvSlS1@LvgL4>GMEKjy|RK z0P5FVxGVy!`s;oZxk_N5gfb)PDFB3li95<>$B;aX z9OC$7{?5Rne8Z(ar2i`S!fm}roJ8Kdm0g4vR6+5F3xImd3_HDf9)`e;(z!NXY)h)t z_vkx)XUi(VJk|>Sl&aYN(Q(cE6?pkLGd)<}236aip2sXzW~ibH1B)r_F5^6GTr-AK z^^4zEQv?|R0_`@c(|~tR&`&@*LUimjy`F{Oy?Si&%39%`gH2>(^ZIEx|K3_>zEPDO z|Ld>UBVW&M0|wjzb%)DxrOtgZmo+?Z-c_E=`uNg3Qa_-Cd=ZQYVu7H;AWVm&-_z>^ z2#h~3kqhpm9_3HYKX5%gKclVPf75NE?`v|uiqnFrdGBlOaLUh{C+zE1&L~U{AsdFN zW5g#@8jD8)D^Q9*TUbc#$TGU&Y%JRBHg?7HU~I~c?%AY}#_e{}cG&w zl+SB2ce@%X7sl?JDV2z~PL?=+9`2uFs#f_fwrY68%nWBO*HVwfn5{hD($<=Z1nf}= zv%};oHq82Bpr6S;AwR9|VOy)yGH3aU8jo0oZ?GAqL5nfxDy;kA=ZI5z` z;Js1qTi=CHTeA;pcZ<6g^zRUTOoOKt-a6w_6T1LgJ=bW;vnK_6dD-qBssXu0V#y;$ z@Cby%TH1Pv@`u0aX;sLvdzOt;sNVBiZn>)OQW_{O<^06hEHCftW0vOi_+izlgr_F> z-O0t&oMfZf!#MnV3(QXTS%qw%h@UG*$Wf<(e)PO?$ZmZ2;5*HS458*nra#Niwm0;h zPKNlt-}ymNG}ut@wN(8?aoE5{f+>qb*UG5-YbkM(Ze*d#)Y*vAH2ZX-Q}sxBFb>`@ zWgC$fZ(L1;ibOZPE{_U9Ad`lh7k^HOmn52?DlS?XVG zC2@GylSdqwK=|Jp3K@#;$+O`ZxzS$XR4w4d9=qE@^v3obSL(5jd+Hk(|4&7WuXfX# z7ie3lx5)aqltFCE3MU4pV*X->fjmqD;sy_ZdzigSXUFMm;7&I7Dw;+*6suM;N1qK9 zKQs@%v$c9w!WnK!bx#^az|-eTEkN6^0u?dFW1T@@U`lOGGOJ4sDRnef$me^w z%9eLcF};03v7`SG92r7hV`~-Ba6M;Fe(KT&c}Vm6Pt6PKV^?jxiS?&P;^o3n^IP$j znforhV|5n!UL~$a&p$Wpu{_nitPK@i=4C2Wf!qL=Wg}boiIp5ii7mEHAnx`JEk03D zNvvkdRXw5iRbqHjOsIRC(Y?59s?XNUlog^q;-B}qR-Khca|?AHS!Mh}>3-`GVjFSN z5Z+SJoDqljnn}l!Z}DZ|E|~Jy5#DM_Tw;32!@~YLE}>eFgmRbobRiR^TIQ?)>b3ka zNlDH)bP#MbU({pgmE!~TY4kvaaZ+=2cYg`TRLygSZ*S|LDUpseHMw>#8M8u|8MDGl zxni4Zl2Pb^HRuu)sV44s?EBF!FM-L^tt9cavA|@Lluv&RyTeh84((LMV~X0M^nIp-rw!W% zbRuVa>Mu$2g68Wat|ps$rLtXl?CX)dF7hLKJB&tk8_@0`j;#P;XokXC?nBpItT4NP z*_yM&)4S9B3;+L8U@WGmI_&1nYXatC>3hNln81?e-vm*Jqw zEMwWVZ)^ZMSJ>ITe=wN8XKS^P$$w7Y+xGDT@2Ou-&)JFNir(wAn`<|ERkVd~fRZ*@ zjC&p0Nq_51aP!pXnTvmMy$tstgxB(O|8%bk3+@ecv#Pvnyp)e?5!y?Ed10$ab7y#pfYYF)M7ChLn z9Pbd5#@(>joH4h7q4EOohZqnaHWGT*(j_qDqNo6i?_o2Vu?5&5HSXVJ!>r|qieCy< zsz{Z^3YD36uqg=Wo&8`6c-Vs}B4t!Pl!K6|nI8>ILYTuUa5$m8j`>vR@5aL|Menro zM~B;cR#F-PDsgB6K&u+M>#7psHY{&bJ!zb`<73fYNxiLSzVXwEm!*%p(5 zCBz(zCd3>h`Eku2{UH0K*s6hb(iy1^2s6O!785^4`1>6`4yxH5z9y3pD{}|-YkfF!WL=eZgRCW%>92iN=P?Qd zc4a)o>=%)Ra8QM(Q54!ywtf%5dDz5#m*@*?l|R9Z#07T6dh*9I>#V z49arSI`wyK*|4mf-W#l4iMfT@KjR0G-oHq}#DYx@SN&$S<&RVWm^gO<~39m5_? zG#jWqJP0HOIbf zp1XCPbIkJG4wCE7Y<8C(!=XgbOjbGB_X#TTVvA{Oum}Oa@43s-O~>?`#k=ZqAvD3q zMr8|zu1BSIlP_JLd^`LwaZ0`LFl~?pn;o7Fa|uiqQ6z`)VNZxfb!BT3Bh`$%DQRD6 z)fk2;3N@cbpC;D?PhW8#r)EK&Sxhr+{S?d+!fZJCy+uldi$IPI+ujoHjaxi1dh-F* zR$kww%7^c0{U7=}5j6X%PT(?8_`4lYZGhPAS`dh@X(`6=fhCASlrGL^uY9BYu<9c{ zS&5KKEL*Pp5nbi|frg*d>G_LkaRh zXWNECR-nvHq4Rg)3|G8u)i@KHeUy&KEd8ga=8Y1UWrs*R8))c)&5ZMf+0G0$y4x{P zITXm~);9l=666MRHm=3T7>Xk@fy@GF8lE%)g+Z+@kSkBK5T$L~TxTjA zs_-^xmU5mA#;m}pY9~ugW%uvTE@8Q(BQXu3nCfMOvCpslZ@&x$ngh6M?s6Po0WkRe3qS)u zgBKi03N|ueoCC)7xBy{CU66930?7UT!NDHl7PP~T#h-S-fGz;$49qI_fm&dU8Df4A z4BO#XB|$m+pQZz#zWbW!S(oAO-Z21BKoN1;+Czay{oNEH3eZppWfCF!7XS=YR-2=0 zj<5Ye3@`&9ps~EoVlDkI0Bqn|iDA@Cm;a?{8MEn&!SCCZzlbRzF#EEwXXoDiMT`~B zfH9+YvFW(~0{H*Jv}38oz>8nR*j-;^f&Y}{Z^@O&m^*Za<($9tMHHL*T*3 zZBuQP=l36cIc}899>0i3Kk=&cQL&RP<$-sYB+pq67DM5$jd^~cA!b+E|IpTjp^f%G zw6$P%iGqUl|D}x<(8ls#+K%Oc>jj(l{zoB@7=^g=ABDhf29h`l`Hw=}!6*dre-vVd z8pL$X|5XS~U=;sfg*XEWu}u9Rg^0%}1pj{&0&NDcJ^!yl@M9F>@qZLz8%(yc&Hk$p zct9b#{;LrGUzqlTbS9l)!2yYK{a+c9qmK_b>|F35h?%=kgkNLNbD9erx?m|2^$-}tqGt=u6hvD{cehC z@d8M{UJ@`Mh9Jxt!P~_h+$-SA-!uh;0+QRIzaESbpw8<0E(ihweuHkw1&t*l=rRHT zinIW0UT2QSIDbf*X~Zyaq?(2nhDQGYe;-&!G5$pwg(3hA*k}e|;B731v6`J$qkkFl z1yK1=BCFLBV6q2C9}C9vniKp>lQ>`q?`6;w3s!RrFw@oT1;HP)CV^ezLFbz(8K`cI$vg0q9<~6!`m`HW&Zj#u_qMbNU1d*C9YbFl_f7+M&7ehau<# zfb{Kt>oOVuSRB0VohLE?U;ZJB6p$QA@asVd&|B9Gh6jOv6cdeB1cLRV5E2FIv&|2% zHeJ*p#{Vm0Z_L|Ldp>@E%Q^UawVy`fFVbiR`fuZFx*1XOxS z2DJlB7J(W*WHf6b|Cc5Y3`1_hF%KLv05jLtH7@>viv<N`0I(;J=(A4h zGVtXedt(F)p}zR*fickAHBqr4=pV(z!v1AL|F5n~gkYl4HwbxpGFZK&USm5`w%k8q z7etrx`E|qB4RN!)>+(IfvU|pyYA2~K{jz-tjHs2VZT~tjG@1ch7czQfj=GI{5crQ4 z6~LO;-*`p||FYE+atJw2rH;@%Z6#U>zcR+dSK{sNm#aJI^*L6*k36`P%@~gbD91XW z%~JGVhND9X3^cK1kG(t+vc&*57C_HQEb>AB@-6NLHaCGeY`XG1oEz|?2MB!ROfoR! z?-!;jErbx7wh>i!rpLGtNhR8&76kl= zd`lFj2cF~{e!zbMK>xE(oYx5c@W15>2xT8{ zSH0H>hzEFG1sdpzed*=@kZB5yqG*9Pd3jQ90P{-;065S#VA1^*Fsda6O$KnF)`kQA zegznK)ray){tJP8I}Zcl8;HgLgcVk-owQr#HS~W_1U4hzauGv>_LQ6y_(A~~yWlv^ zGSk0bFv_6Rv599Ri|~OXQ3Z_l{qU8B`wtt?Yy`{9Xl5TC5lZvxfD3fsgGqGg%fEa^ z%y2@uFpMm0ckwn)v(vDeFuOhKRgw z3k(D#u#pH<4((qe;oB70`k+045cCTI#tpp63^4iI0|G!;Ap?v|QNcVzL3bhz|9Cp^ zfQoG<3IpJUvjuRFXeR*RV|U&aZMDRH7bAHkcZzF9=!0`Zvu zxSQm1zW>7g6yLH_+`00ZH#zJlIR5;jW1Zts2aeeuDgU|b&^lyb@aPfVWOr)xRo$c9 zb&<@=&D3Y#`p~rxzoPY86}aUH#k3;Kdo(X2HcYoB5q+ zt>p(~Cf@I|`krO&hWYbKX`B40L2V`^vgO)t*ab}Fb9B#(FwrbcAK87Ll(HWfuBTqu z+B|a&x@scD)-1UDakn}y(mfgLkvUqheyJH?oS#>=Pyo?g*nL|p2D5zT2 z)EiT8LKWY}u$nUc1NPo!0QTNi%ZFKqNYVnOV$<=*sLzBYS_IT zk@FgKl2i=Tr>8~6XxFjvE*!L2(M78jU-Bcxcz;IBaOC)H8Mv)~2CEh$m_udt-sise zKb?!r8icB@hKWas!`KBH?OzBTcC8Kch}>VYP2-3l?Y+O*)qIV?0WL{?O82o?yrG<09bVN zA=b%XHk1)#$L!uP`y}qDUCfw7ecUrXwJ#bz0%>-xNq*IlW?{QrC9M$jk3De!&~#yFkR@VSCSZE7Hj8n5lWbp~4bkhm~P1y0-YRl0(Zbwm5)r7;Oizc9o5M z{MU6g1fW!A#af9Bb3HLS)#k$2VWPAaHl}`bOZ)e(&{1sC-%*FIes)x08 z%(2XI-KMcOc8?gU(Ok?)__0yE6jVUg(mmMe&fgHRsE!o3q>+9f*~L)&nzj7gXJ z^Gh>7s!p_Z9)67(`z4GS0zgb=c9i7bc2^Y5=fk6&tgRo}<$rNKgrvBmFK{qqzs0Ep z@h%qR0)S)r;NP(lMF^qxuT}DU^6`^e`8$Ca0WB$sN~<`hh}_tiSaAj1EUp(#7b{_y zrkt3jD*tIJ$nx-Gg-`dw!z=D?3YzMOU6h!plWU|nj)&QM$peOLd5n61i4FZr>HRn2I5aE$qS6W#0NMu_VmFci`%lb+1^GEW zb*|{DJMBpCUmT9UrBV1c4@*ek5uOSUkN>r*p%&EO$Gd@d3l4E!6lkaTq~_c=lF6sF z)9zlpp;qQ_yGVN{FN1~Pwx*}nwmE}8gzA`kX>(~jx#imN+)?+!)M*1_OnSr7-uzDO z`HpB-|G7^SwMOTqklq!xcJ@ev%?X%&i1T-6^HanJ^(mGgR}-HYC_g{e#w3 z2n>P7g1}O4wZzZI4ILDbe=f>mB^k4+J4`EYy`T12d3Jyyfjku%!x2hbk4hs$wXlMg zPlzdc<*=|pM_AbXgf9%Iv-8Y-pA_e{(y`__`}gZ9t<<4rdW89Pd#5~ z1mDII!2Ki?R9pW6iZH(%u+OuSP$L>|XoiE=D{@-@=!`#njm{cH^nx54x{g2{SH0sH zRQv@83V)%E5Ed~QB2(-+`J%jVNVlsp6(91ob5)U%A>H}Y#)38|F+pTQVa*Nre*ky~ zoF(|IiWXlNrMf z1R6C7At=7cYNh&^ctcW`@q(Gg5zfS{TY%7R!H4=R-lxaXI|-7PCw~J)9WO8d@_ym@ zl}I>QypZH43i5T*(wme8D?;^1h3*WU*+?!WV&3;KM1MuAaffm(YX(8$nMhaJHKV0osGyj%eFKMmT zmyq%)I>p zI!3?p5;SzP_cyYa{p!ZRX3@u0TW-xH;=dV{C(g*M%xjz2z#yXKway*RDD}G4c5<&3 zZ-vpT@c6CW*BO5Co$S4?+<-~Ek6*0cdgTy)1R6z01oyKQKXzgGhnG;f^x2WFJzw2z zU$=Fh-A@Q!Ky4VeXCX z+EgmKS_cvkoz_3#US?Jrs@V^S-R#r|wQtD(vm3+!S_-w7p zaJMgwSEX<*@b2Mf)b8fPKdZZ%I*vsvI^qSeW*<&ZCM>Q(J!YVUv%6&@vA)QW&Yv0-8)&$2w zzT!eAe&*A4%Kq*{68n$NL{ka&A7i@L*|(lbHSK1)G!|8}s;?J@%v2-@A7#DyIZt}G zclus85%*D7crM%S()}ZF`B%P^Z42+h%4ywNf92MYJXN0uYO~=~I-EYuJS^m;%Y@YU zva6ZTL5_uOwj~r^R)94-@@!tE6yqa+5@lyX6hh6ah(%mi;hy_PysGBalQd>_i8FT~|VHe?{D2l=*F##W0Wu z9`4z)-1s^bXNq&@Q)BFqxrFC>8Kd#JnDObm9{Z~8;v21^`wN|dnJZ!*l}$cg3dT&S zRm;BTW2>`c#YyhEhOhk>dBucEGSy=WhJ?mO>|EC-Ceh)gxh{Z>Scy$1C6wN%GG zu%KUb`^g}#@Z2O+AtXLubl-SWyQ@5CAdEZn$ zrPc&FPjXOSb-jYF+fU^TOw%n1H9yCGo{*I|y?mg}41pOKp|>Ay?Bu)uc8VIIDDBaW z?}>+vn?v3~-!@M#uT6h79sI2NukjRVVXAXIY6rUC#PpSS@DrwTLtZI zhMQ#BiCfK993T02^E1kKTY@}Bs}*ez+-h9u{FS}-FQitV$<{Wl_1-@2O*9$5>F~xa zPpe|Fm+pMhqIyYzy-)`Fhz4q~u_l$9IwDzSN0E zrY7Ee_NFgF4KI%iZc_F8$w^Tun~=qq^KY);j;}jLaz8ekzTx*~opeKls zzoE{(b;2a%a(FYuPbVR{+P*Q(-!zTWZtP8xU-QYi|9H7_$&lezgmI1I|M*IWS!FwU zpk1p}h_f%Y?-~A#Iu-%zfsbfw@8ku$tg!D!fkwCE1||gN9p5R>`!)Ow`+X^CCm`O+bS_+KISkNB)Vt&1Z3Bik z19bqjkuP8I56~P`+bZoezT=J30E1g^schx^L5)i>2p5bY*0GOr# z=6B|Tpg&s3guV26>7R(<=ZScmgdL~}aeSX(Efk}xvdZ6NvhsKjX2tPYM7q}Bqh{7 zd^3^FV6PLG-v6o;|25|&Y^WRvQE-3r0gVz2SP)C@4jy4&7LzJ=_V;Z(+ulK=7HXZ8 zJ?cYWG*?`~;W&D;^Vk6( zCW;te@HDRucyo~Yn(;*d5>OTJ48#yqu-|5fn&HRj*~zYT)pyG7tjV8VkIo*&zdEz2 zYxfX2a{wC3!Js^0PAfcQs2y4ASx|Gpp9=~1nB*jH2=_Vie1cX|_({<4` zIKN>$x&p68-qKsY{k;F|C9V05mItHV+4sDLqe=-|%6%>Gdamz2rhKoBX^DdiYbFVv z=le}nStwfchmtK?S3?VhWj7P2Puc`L;R&Ap56K@SSE4(COAdGpbcAlP1JfKMJad+S zZk)1lXrw)Q?FjNB)ztNA=}Fp*k(9tDP^f+wh*#%TivE1e7qE(*qE@ylR5RSX!*=|o zKk8vpwEz|tuG6nt01#I@11|TEY4QISkikt9?o5il)xH3FxSdZ)pK)dbUvE{QX*J?P z^q1zHyG0f4KSHy`U@13&b-cmOt^EV30qsm}Gn{~J()pogYHtj-c50zHee_bmNB3Bl zx?Ys-XVYg06kfv$tVHdvm0UuU`7AkUGS{5B)Ve%kc+n3Db=jOoC%oEI0@1kd+am+{ z^5gHvD~h!32hkO`@K*?c1G)_$ug>P~{DGW@@>6blksCL3>(lBbx5112t0MxoLPW3b zd5`#s>)-HutK_Z$FuB`jfo-91fz%ZfI0<5cZusvW&@H-z!cO!Fb&|Tg^0to;9JX*j zH?PU+8@?1_?3dUsXxJIJu8D16!Wqvw7v_|byHg2b{r@{IY$u|h;odrSml?iiu*#7K ze6@-PDzWh8^~#Bc1bV|%ArrH?S0x~LR5>|c={dY4%B2&71(5=y%fk6zeoS!0nZ&&g zotb-*Ec5(?(ICXUxCdICI#qSLs24H?T%y-a#7^>0!Gt({IJ|Lp>>ur=u{ zixxf&%a#$gtSaJK3Ya`_(+@E{m``8PeXh@Ae@~WMAez-yzGVu?+&fmPQSo=6K}uxI z7^v$Cg5+;{wj!0c$zL~-*+nFuJl5y2oqB!#EvZ3!SWd=Xo1SMp7z=Vh1_lqsaPQx7 z5>`Ml#pp@9p6?Bh_7X}#6(_veG|?jg9|eQnRX?3Krjo-kS6(uD=muGxzF)0qAQMtB z&WFZggwO$$HQKRI?~gGQp~hDDKlJre9oTNy1-c4S3^^^+RYt$@vRT3{Zk822*n6P` zW_M2DlvGBy;pslM-aeIF+1vwrZ~&$yaE;Tsw$B|vXDx$(K6N5($-hnqH(*uTpqDr~ ztI5S!<3JU6E~~m$nyBsk;O8s1_``!b3OSr}Z&Syy%G+;^jo+#_m+l&;Qaqg1GYL_2 zUO27}^`me(*sa|1815-KVcy;yN21ZgK!fz?G*5zld(;9-4pB{3E@&~+!Rg!cuj1p> zuHu>+q1i86iv5-_5#1{=Kvb=Eedhf`ZZMj#wNK-fXkOpNtHoCaPYe7?ZQmN4r)9;O z4X4)sX!@bsTx@7U=|oWX)I(w!3W3#t>7^@nq|sk_|I*a-d~phQ3-)MYi87~l_j;IEc+@Yp$q?zO^iMg0BNK^nci z2BE6{9RdA8G({U&exGCR@c#jN73h&k%iJG5`UAk35boD2Vpj>qum1qW1@RS;!9>KL pZh!k#%v?pJGg|MTdDTD60-yZ<#q=Mf6w~=J&m3Qv|L@}b{{vp#PXGV_ literal 0 HcmV?d00001 diff --git a/site/graphics/fullarchitecture2.gliffy b/site/graphics/fullarchitecture2.gliffy new file mode 100755 index 000000000..602573102 --- /dev/null +++ b/site/graphics/fullarchitecture2.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":150,"y":426.1250001192093,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":58,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Example Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":477.5,"y":388,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[62,16.00000023841858],[62,-50.62499988079071]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[627.5,-431.8750001192093],[513.5,-386]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0,"py":0.5}}},"linkMap":[]},{"x":793,"y":211.12499988079128,"rotation":0,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":130,"height":50,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":156,"uid":null,"width":126,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":923,"y":198.62499988079128,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":333.5,"y":446,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[339.5,-169.34199153021825],[256,-146.1249998807907]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":1,"py":0.5}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[351.5,-228.34199153021825],[265.5,-221]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[345.5,-232.34199153021825],[263.5,-190]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[163,43.87500011920929]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":56,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":23,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Persistance Database (PDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":180,"endArrowRotation":180,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[-100,-3.5],[-143.5,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":1,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":91.05118074954362,"endArrowRotation":91.05118074954362,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2.5],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":110,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":254.5,"y":60,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":533,"y":260.6249998807907,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[210,-144],[210,-57]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":93,"px":0.5,"py":0}}},"linkMap":[]},{"x":693,"y":41.62499988079071,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

REPORT ENGINE

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":529.5,"y":189.6249998807907,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":624.5,"y":304.6250001192093,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":737,"y":283.6249998807907,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":29,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-64,-38.033008588991066],[-156,-158]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}}},"linkMap":[]},{"x":341.5,"y":387.6249998807907,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[331.5,-142.03300858899107],[239.5,-246]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":1,"py":0.5}}},"linkMap":[]},{"x":673,"y":223.6249998807907,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous GATEWAY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":489.5,"y":262.3750001192093,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":481,"y":104.12499988079071,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":473.5,"y":242.3750001192093,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466,"y":79.12499988079071,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":693,"y":203.6249998807907,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":458.5,"y":224.8750001192093,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":544,"y":478.0000002384186,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[45.5,-36.5],[131,-36.5]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0,"py":0.5}}},"linkMap":[]},{"x":675,"y":391.5000002384186,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":489.5,"y":404.0000002384186,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DATA LOADER

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":157,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,-9],[170.5,-94.37500011920929]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0,"py":0.5}}},"linkMap":[]},{"x":799,"y":408.6250001192093,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":1.9999999999999998,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DISCOVERY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":913,"y":318.6250001192093,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":110.00000000000001,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.2,"y":0,"rotation":0,"id":121,"uid":null,"width":105.60000000000001,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

HOUSEKEEPING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":796,"y":318.6250001192093,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":103,"height":75,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.06,"y":0,"rotation":0,"id":119,"uid":null,"width":98.88,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

MONITORING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":1023,"height":492,"maxWidth":5000,"maxHeight":5000,"nodeIndex":159,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#1B1000"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture2.png b/site/graphics/fullarchitecture2.png new file mode 100755 index 0000000000000000000000000000000000000000..7b6ac8067aa5624e9439ad89a3f8014d2e1b618e GIT binary patch literal 113571 zcmbrmbySpV+deEX#LzQ?FbL8NEh*A5Gz{G!HApBRCEWwkDWD(-A|PENp>!i6r3lg` zAxKE~ch9qb&+ps&efMAAw-(E_oVf1mI`g>B^Ef9)M@xl__!jYv8#l<*R2B7Z+yKFD z+`zdeA^={&_f5yUaf9iGnxedcujSS&{6K>~>fW{`C{trolX;xEyN{1g12t!%To?=A zwpsR)POL&0(mkkW7DM>rp2KsCH`Q6?Gn%b_ZRgN;$3xktxny>&()(YG84d90z{xlM z<a#EF=Uh`X2i zZ*S|M76Sh5WUB25Tq>AzXHS;ezrD?g*p>b_S+QBeaALuti%Vbr_25*n69(X9Zj!i? z)y$|3fdKo?so6+a1?LWn4CELR^Kni*5$V}P;0Olb@kG)eR#AWdK)hNg z8Y8&hS^U5KNVUBh5FT9gE@?bSl}P~j_Ci4TKYZ%G2JmI4Q_m-We3&R-J0K}v??L{i zTpVaMEAV{ph)B0lYlRZOZ*%!7~_h*a-IVc^nhjTz~sOs30If z0eegM&A+|)UzdbG2Oi(`HZm*)P_HuZ?LgOmD%T0?5_}B@dWGVG<7$TjR5-=Y*PFCQoY3$iw*~60MfZZ}P z$7SPTpCuLEvnF^B)@Nom%g{|pRB&BMc_0bux_Qr7|wxpkSItpcZ7ZT>eA>}8dYjpM5~h-K{~NrWD)l# zhg#V%l}DTXQ_@8OPlj?E{nwbK@|Ai^t)||XS%9KtdzDfQSiR^OSw^p8)$fLlJILvr-LwP3yRY{0ds43)P6>BWuWKn>J zyAc4IA9_6~_;+)lSAV^6?8z(xPH+7bU#O5J_Jr4)K_F~u{!7nPOVRs~&TPgEyjE>h zrUKaO49YR#!PAsbI+#iGM)FzIqD*t(<@X8R75yR=?c6eL**ELja)I@#kj|2jZYssu zcYZUztE8{~WB={cxO(Zy?>gl!`+wh6NR!2FxI5W7Y+X___?Wl_|6<#0Ct+dU#iGP8AywwzaKiI$hR9{WGWL zlIgyly9I>v2v0pKaP~Q&u?_f+oFHJoPfOf~J-h&LcyfZlZNQT;S_?ln@4*F~gq4Tp zwyGqUUt1Qc=OqbE|C*|1V^JbvJP12w`;T#lnnQ}GT!@W!#3CQIIORilzTSV?bXrWcpdg z!WnIhwAL(zDymwm*+r{Ka{R|-j9@3+4w6ATaTTl;!IAeQ66IE&1wC0~OhkFlFl_<3 zy!|H-jT)u!NrBY2paBXr<_J9TJvVM;ur=&_!THAv>ncPaun~)=feIF%PNA%Tn}~%1 zx(|Nv1MX)5Mwzyf0C}s=rHbR~Op{Vlf}pM@ROU z#y-^K^i76!d7!{8s2dfatVEX2!GN;1w5*3-2C3_qP(Y{$H9-;bF5Isl{=|4QCfx>{ z18~(w!Z2-gC($vHScD2~p@EgOfTgx(4Rh4 zY%Fir1@WRgsez}Uoi*BY)%AhAO9SLxAFLKFg!>xRn9`uTrmvEjl>%E@^6m^%Q55bF zXk}q-8HE+t=Bxkg*jj{bffIa!bIA!rDpC*n2jffP^rGaFe`RGi3S4Tz#o@(mh#OIoka}jYeG17^T#O`(`BGeSM`!>TmI$o&| z_*V+R5^f?``633d)Y`4Fhv8*r?8?iq9&8ri2J~^vggu(y|5ir(Ye3b=ows%)MH>wS z2|@=EcRhyeFQnGAe_yr_M2w{R45b00Z3UK`eBt00ke@+$9}}1Znh6IY*l|BBpADx8 zvdf1^t1)le;&cQlb2Epbkt36PTv#g*fK^9>vqD&?@F=6tTtaT+OT$Q$Nh9TO$*~C` z%z_uKa?d0>oIi5I_U*=?byn-T}gVW*ij&9xQOa+j;>a zRc~iOh;ZQnAJu+F4O{id3f~m&Ai|0z6WEijT@o5o^QXfRYY&_Vu~^=7cARi5f+_C? zLXeRRoDA@S04R22jbA#5XyeVEPt(UI69R}L5drLKG~$OW7#a6{unh|4kpiDRHN?( z^xe(DW!H;F_oapYIlO2pE}__To`lpQZPV?&-QD&^NWM;yGGE}~xbfLq*+hj>_;XFZ zV}mjSeAWsNM@n}}Uc5a6RFQH2~vZxE5DS5;xDHo!FryP~PdV_6250LTw z*xc~c(0%X;70h23#C^S%6aH^*OAY23d~Ab17-VE83j)%XclYLQ%{ z+af0JJZ?B3Ek9#dNwql)guDTG1~XGkHZFJ)iM5?OWIukjubKhLOW+YhgLtDTNiW^( z=8>ILV~`Tz(b5mrXilczACh*y=$;48jtfIlnBPV1XiNWe(3QCwT-&UHvZ-u=xbEK; z>Z4!=Wium09)HD^mh@4oA2j9rR%zK5`R1qkVt)?a?jQfq#Fmff<=DG8dg(4C`07-> z+nVMOJ~NTe(y#oz6{bWU>g226Ef`L}N$9gRj>LQj(kWHwGWznKa(CG$e6LV!FrCnK zu35fAPbuA3aNKxsNL9QCcDlZpLSq@i=-I^NauZMEuK5i#~3EGJCfD~3b zGvys|7A^#RXQ87D@2E)zkzvjDRnIx?j8xgfq_YepW}2ULKDLNGv8JY9apGkc=+?@> zRU3P7%z>J8(eb8QA`(+TInK8T$I{%1oe}rg7>Fnu&RKjh-@APB2`1LK?>f`yj`!2a zsKeE^S6+%j5tRI#O&9&(OSVz~Q*_4e#7na14O;!S;HxG4v@%`VuOY9>TObnLHjBx> zKD!>a|2lLMbU!m-Hz-#wvYeHni~3#n^kz2&Ri7a&JRtQ-Xnr2i#WS zY?K4QRZ769lM9HqjES+UZTXUQ*1Pj5x6jH97y>JM;$KkJEU`~CM8lIg4Mjg6$E3?G z)GFx#S?=Ux{!&BzJRMEaa$&B^&3kFP)^m^C^;;faU3JXz`1&4CIW#>Vz=y!cR(b8u zUgj6qX2?J!QB3(=#69~UOK$0ys| z6R9aL>Q!~$IN`MOQgz3^K*bP#dhckxqmHXGIGhvoOP!EiNUAZw(8|7JvGbEO4moQl zGR#9WrN!;0(Va zCXLosq=DGUtR?ds?Af0D#5G?>ERYK3xlcb|AFB_aT20pPYW4kL5F_9<R7nk+ zDyg8%GOn!49$XOS@y}BD#4_2k$8VJbUJZCW^D*Y&L+xUcl7?=n3HWpVYHZ|L-LKc4 z(?=(I^i(k9@eZzoHtrBMYh}I{rv}4AvH4*%1C7BM%PWKS0)~m?#@q~dwlKMJx@Tob zWctTg?m6zw!<$p3WElK?VG50#U7s#DQ4?W@&n1;mj^9E=$!_1qpCdcF8wb|DZIU^n z7z2J46b;7MEgf*3xPK#}{}FU!Zn)*}AvuY|;CT03TS!$iMJM-l#Ib6YL_(zzXK{DL z@6CIx)yuSN{Fc#2vrX1Hf5bU03plrD+mei4O>L-0Uru{(thG|9U{3Z9Pgd25j13Tq zwssi0i|+!8P$C&1E_OKdGpM##5SesGC<6&MS&R=c=wOF|ctF0v6;sV zN@f`RG(@cr<#oc$PP3h3#2USry(=;!UJU21^HErEIIq>D8~q`9*kIZnaj0-xw9fvw zdA{wY_wxY|?fPjP&D0a!#5m{a=9?Z=1B?qNlJ}hD-;&ZEZV*pTxDXqllA~UfEhFrB zJ)I01WC)Ia#VLZJzZiiGmK$=SW~>~Yq0@|{MbQh-Z4ktdat9XK7CKh7}YqN*dGx$i(&dltWVJYr^cjX5hG^8l4mW@q0iF*1?P=O=$` zUV#5JxHhR8+3`tSpwn%L5|%BlEl#$S4#n$?AS=`Mb8Ao*?3fkm^;KhX1QrG*(B-n= zG_Wt|qt^5Of-BfU&cYNu$l>5r_U{J2_TgWgLOG9s${HJ z{#tt5OJ6l81pd9Itr}@`SiM1~t=Z#a4 zXrenM`dmB(Sn%?DsVZ0+#Nl`E#m9lRuq6)Zhwu2IZg{x%f_Y7)*wC^GL!dkPfr3mB z3kEJ9)oHcCp>n+^7A?Ii7yw;2y&JjxcxjvBXzO_pZG8Kw(=pS;r~P|1{(XY+D_J>WQ7yu_nYFCQuLq`Byjs%dLvag1tpbZWg zJRv#mb@#3s%9kpw?==1u_@MlknqbEeDq-xE0dsb%uSOivG(}EVPCkv>-kCI;1|>PC@g}QYYB=Yg0K|Bm^x|k1Co~kxb@&kU@~YX765<^>NMf(VGA&9V2Lo` zsQ&Og)PVisoiz_ZT}fz%3(rSUc;aJWoZ1YXMm=+bhk~7}Yp0=?MCCa@XqqOp0LUy` z5V`)z;b!Oa%c7dKetgAPN-Ywi4gGGFFy|7Tx7NyR{P*Pg&L32Ga>MRewnorDz094V zyr)Hf(X{NU7)wRV&K(pdV-fI1{Zu=op=!Drvj2j&bLZEIsyO$bp_V4Ns6X2(?@QOk z*{T5kCp#nfko0OM4k1-pm`akukhA#6=K0lGYi<IQcfOhC-bjkPDjx>{r)->MYZpL3@MN-4x_-1{IJ z%7r1H4tyD2+Z{pj;?5hhE(wzsM_QS{-IfZ3-5;uC^>7vd<(yT}oj7bhW>ZTu>HF|# z_SRs=Jvt|vs`l_Gij+138v{No@a&Wi@?d?`eQn#~{jV_`Qz84#h!or1voCZjJi0`l z9NG=hV10+-_ELNeop+AzvqeO7g=K~SJomURpMT5ZU2gJxa;~&AszB`-i${T~mYQ%6 zsK|PiiEY6Hi-2-)3FL5xun6emU4wM+qcXfKCvZP?R1M%`E>Mi%N4u=9QkBV85BmBF z`Z(TGo~2C>zGM;2O6!9`l{UqNsnf2LfMry+R5dw!sgJ_mFN@LITMgoYFf7~?Cp!fmE;`}2<*qf*NooB(j*G&PEZ zrg2Ave!OBskk)vtEX*R(!8bR*wO7d|bu{_x7~qGNv~|ZonVsGa`Uha5!EM9YasGTS zU;Dh+E;cQE$uF3vzr)a^)FO)w++!6@R zyt%`Krzc&mVH+AIf3n=2aEfF^CL;c($^I9#5v6&n=Fs-OC)ZtB`pkG zU-kT~B~0dZxl{1T47A}vrBaHrI)Agf(&2J3!jgYQtL-UpMaL#)NQCochy_vZo|y4k z8Wwv(1LlZ_hrd0fdnCBH=^AG{9NFf!(k+-)W_WXroS`daxlh2om#WTnal6Q@Si#y632wVw4E zOzGf+srvSu1arLmud{k0T*~eh6NkaqCz~XjTUvBm4;nI>d~v>Cwc_$gHYi-p_>I2J zRFk6&TlzE3Gv%6RyYraZy}b&%%!hYt?E_wAg4XNSs9VC8$9B{(#qP-ukA>g(DSG~( z3j=PiBc9e!H*O#_YV~~SP;Ea1@@u0Ep$sdw3=lYZE5Q_1JmM%I%FmGaCxIZ(t;gHQ zYyZ!wzVB=+QI(|e0s3sQ#p#iI5MC1F3?^{kjyZxwDdw%x)8bKER`vHL(MyXl{kqZ+ zu18N4W9e^0@_mb?e=tN-a&faL#$$FNtgL|%s%OMBGAx~ual3oORYwn^^y6}>iSm!_ zv+ggn&B!dYa4!a5U%le~8C;fF8IXTRymR~RT&v&HdsS91D~*i6{*=aZz!UXTjr{nuAmvW37z9)ls1Gg0;Lz^kf$;NL25z2D5 z+WiM3&g0v=TnOLZ-H3^B!v3N`>Ydp(3eWWR_aB4>AFe*RXn9B{B_+kHACwum%f&chH-Gs5o!zmoP z{Nt%jYWp5BS5j|ywD?9&{PI5>Fy~v!-Ne7ln(%1(MiTUaH!g%7 z)O^oM9e(nfnwjz22JEc{Qlx1#r101#q)O^E_RJ^vr)sg!=w9VDAiPv%GN*jTH8B{ zkqZ$(-eRZ{1*<1M*2~msahK-JkkF?%yt*We&_~Wn9-gO*8s55W+SmL6ojmI!@a>Jx z+exuyw%fC+G@#{uDMJX{5Ohl);kU4(ryA!Ez7v$7;4Y+g$WkiksO zY5I5h4+(!}j!YS3GHI65dQkI4H`Xkld<q3$4#Pe!xWmB3t>%s(X}A z`KCU@dgg-T*j6s+|Lt(ONno8ywKB6@Q+)XclRT#1iTW}(vrUy zdrLogIH4N@EvXyPd800ly6`KfhQ0K86qm?1ZPpF?5OOs(zxS12)^^_B3lk1yT)EN* zuosET!N{WHc%!MCuKA%<52%dIw&=-!xc~xt2&h{C07qtIo@U=7Tf&Xfq0KQ~gve$CQRbht!+X1hwdaQ{CR)tN15b+|eMUYr_>sbCN6n`C9K4rW zpu%hTefTJ*9k1^9^3b7YW6+_V-;iUkpJCat%x_Qwq*n<$T8vW>Ke{$I z69HAt_(^;@%E~1BH@l`2HvWsd8i}HJ)W33&a zQ2I5+Qx56|26TF-V@O`D-3yy;FM(?5!bhnLmG9_ImdBoMK?n?Wm?o z9B`@w@(q=#SD~V{X5#XF!Mdm;4`6G}J~3sbl(;YRlu#$O)%!Qx3gp1u#g7K?8pL-s zk+{rRK#w5#mDNxp=mH`T2ex>hp@WIIkCMB9_UfbD+^I1#&A{bdz&T&^I@N`=r_4v` zCGXRUZG&d=?!dj#%gwVV;e8b8r*F(0<8bn`ahcyfof~M@AtkLNlsEV(`?^&*o?g>p zAXL{vs8SoR*KM&UR1nkpzE6H~mobPU?K;etsrd6s+-owZLAkwxa@}wFbhL(ez4KGb zWu>4Pa6Vk1RhU+wHORL00xnSco2aV0Pu@y<57~UXSyP4r%|vT>#}2_&BovL4PlOOe zbHkLq{GU2xvrR?lHq(^5tZ8re9;Gk8Kh4ju)}q$|z<%8>#uuo|`c=)-G43AC26)AY zuMr;RoDtiMvlpH(c17y$NFFkfEWzddwo)^!C7vaJsRN-6?%o~+Ze4YLKt+1N5wKl) z&5X;`&<>&#C@k%@wMIbU(PN`BLpq1ySNn%1b5efQj&t|xtRXK>7V7FYzwxe7YZayX)>sA7hHBrrEbDa}Hm;kie<66CulRf3FliC!?l=+d3S2 z=>WL1@x47)(<5wiiYNX3iqA8RYvI02U`DN*<^w(x(~z;pNr=c;ewjOiR;5or@=j_J z!~!*?Jp#&;<_NK*6N;tH&kzb0dGL)z#em&car|upOQdSLyxU6y zkL<|?0u^umiJ(>fSrEQ@)>Z4eq44vo0T=QP=B=DzJ)i(N_n)gd(21c}0&dj#{qL-x z0-QLxXp8~Ji~wzy|8{#VJ%#z5S3Hg~l7N8*FIgsgkZy$M;4KV}-# z(xSn)CA@m4WQ|Utu(MM9kk!G=kz)CUpFitCtDYA_7EO6}ajWDvVT!5%YSD;{_o}iI z?4W-I$Ip>ygg7K!6v}RBzbZ_g+PS`~S1=qW2G*B+0zJ$4bUtwaXOY2{cMn=h$pu1O z$>rKA>n-7VG5wULh88EzF?#lfZ~7z+>)aI>#r@V^LWK<3l|DKvrIe|H@_q zgas^I31tGb{w5x@9~TRj)(CYF`B{_x(^NplsFQl65-L}U_Tkqv*+1KhT~ToHM{3cBzw`(ZR03lQD5ngmI+wCRJkQ*hI(G~IV zt`b}7wr`3z8ohq9G0fdPC5?tNnS&o&%9Qlr1>805Kew16Y;et8Qg%Ckw#MG7$n|c$ zf{{hp*;GQ$N78>;!Hd4INIKG*@i7wH_yO8*(eZwOEh#dYVBwKx z%My{g9r7kS$e_dkeEMhAu+O|@^xUr2{u3@mop05AagAAZk;=4D#oqB%(8*$-&1CCO zZLjU404iPsxGdT2*f&bVwqt1}C-WiKU6>D^HK)U}f{L^ET*la>LiXqrUW#@l@3g6e zpB)CKGDas!}kw=KyUIGjbJ*HWXbw+ z>FyOPU9qO|?pJKrs^u$Z+zlY#o@x7Jjdk^;H8v`yw8hKXZ z8tyD~{QhiaO*s#OeC-YtROYp7=Uj~g(uqt;$l(Q7v&d3X2hkk0Vz!ZLG2srOmo=l3T%g&yqLGM)tDo+~5c1jbdC z3gHM%UNiv!iM`-rWT`U|XD~!vD@Wp~9|?7FEO_3M z{QGJ&kQ@r){c-_MruMbN@TJ6Uyvg2m`!%ARE!nJ;d$Q0FvlB{m!#+<=D=b+<5ih_P zItgv!*&a_PSAUR9OlDEIr|Z_}=Aj+B7+tON`o8`H{`)$UQRc-Zti_f<63qtpKA%Q1-!L2ILA1qL)c+R(TMP@V^U~ixX0B+ zHn%%sry?lgSUfq@p^ov%j)?UWrU%}dxCGcX$PG1XBDMt-R_X;pK>7LPE_-wE<;P0W z-RTE;{JE1pTVvz%PAqp&x#AijXRh0>6;ncP$J-VmXpFOGG9MYq>d;=x7x}}g25}MR zXqV}Re6OaX=k6*{{hDB;U);Vk)Km2_#xgQH_54_OJIe ztW=U1zD^@BV?g2e=}Y&VnxYK1#c!5CiO+{#@5L};nylMX9u)D-l*DN<^!H~_!I-=h z%bn~=vJ$u5O`88UC6I0}qrsWN4!xy@Wt1FR^nCU*L1$Fq1Y}5{ODPa?6=)^H-$Bb$ z?XXtLT@_F|Rq8ODbM?5yxQbx~+Ohn5y5Y?1-2-rMJZ*l%E2TK{ zqS+U6NO!Mym5lD-IiczMTZ3trcR>{bJ|%w@9JQ7*nM%& zUm?ve^u{UZCMrkMDK7~~zXg;0@$|HMI}ni*mN;J+;B!;O^L}ff_{fRR_DrF6?k-(b z-F>?_0Kl1OeD*#5p@5(B?JpE~2X4;7XzX8e;4JSqC1NcZL5Jivkc_ga1T&}sZu41dZE1XQ2OwFO^N z@>@!k-~Rxe58O}KUS+JaD9bDzlL$H!d3nz@F*o>3%{Vv#E{KdP_&h#ec5{6G6%2tI zIUddsR5)I%9WT*WIew*J=#n{o^YHj#YvAd(`B4XmuszCRoCy=|M_=+F`XM2-*SBOM!A_n?!45OMp$`CD_Z0J_`e(`4EiHrTx<4(I;TE?QuDGduJ^iaqzEm zmSz1Ll=AH}KxUj6FsS)Bg{g6$HS3O}qxot-*v%^-9LyYSOigFvmGTnQ3VFeq+*uW;9*{q7$Su&H!(u<=#*-2=6j zV%aC_lv*Vfh87>6jFRk`{@NJ=LbuI)YtXLVn}^p|mvwz{!-yqhiC*D>iC#JrZkThM zn8!-=wuY453N39>wov(PQD?YTj#NyAdBYp0iOR+&8&Cw#SBn^JbSk`-Q_vKYc6om6 zB-qJY+@GuTguEEwLYdR1wA>Wt%)$QaRN zSkaeWEoK3j+@Q=%Dfg(_dsgC7ulB9xUc(uo_fC# zQx6aoFYOs?J|LL|hCwAP$x3ZR87%PV*E;pirkBTg2Gsp5meix~l+aHla8$SnS9VxU zM?Sx~?1`iCm&6!|^$WAyQN0UPW!^Oo7jVDxKUmL;xx6~xN&aoJDtivp`aB&j&Ni!B z`@dIO(AoASjw8F@*?k^qs6xM1#4S1d=($EdR-~N-EA=l|Pv<8SXFbQifmOE8>92{HEkAz>u4qi=AA&b_he{F#WxoZ?E4*F8c^hb z!DFs zZTGIM2wK`_^|ub9XpKM!cbmg7L${%!?)B9<|DTml`8<#ZPIA`haNcq|b7bZH54^d% zpW9j3`q7ruXEOM>8!C$6J(}d-utUQ`BX%$U`1emqXpksUJSgnJIkHIW)$ZYh)$;cW zbF-1;lLDxG1o;nc-OowBJVD#DO~$S@0>+H}!v$5_kIpC7xAY420vQhF=ZMC4IKLMZ7L5ME1Rj zH&mp^x}A0F@2IBsH2QKr*_s@++8WCp4(NHJ+j}?e_MdXzUxjbvUK%je3j zSY0U8L7#QNzMsH{9nVUGqsu?QEIiDSR1|w%->7P8_neUsbbE><>oQU=dhXHs- zh!bI=F(7^nP^kVxZLh?(Fve*YPS_S6;I?*y4F8V+fLH6piH6px1#Lb_XEkl;b5sV~ zA224l1V5*k%#|B16?{?z^9iXg*$?dooq{Y$33_DZNa1v)U+oJ%9f3|WooSM_Pwi~( zj1%1CHfXoDQw~^Y$N9~}6j}eS@%co-l6>m`u0_34bWGj})5%R(z03651}0Unh~ZUZ zRPsbOsUG#8cXu_ZkAA$f>stMirQ7W5-ttq9oBKgiIQ-r~P1{mF(=-DySH5|z1E!m8 zTI|-{M+FV2=z9@FcuO=8oe=bcEEXl=mO=$7Siv9p)|WjI?Mn@!w7_}9f$aTxFy*+X z{F4j$zaSD`#FO$eZWz$%j`3gU0w_XsJV5&{>NSBiqu`>hPSl#GH`_>UY0+#qXruo= z4pW?iX~8|6-uHT8Oq$&{fcP+)@{W^6p{r2i#jlAK5kg>=0#PIrz0Rbmei zt$lAiPdiLD8}lU)Us{j-mJ;Rz3ai$JbMsAV(44R1os>YywtP;-wjqU|j_~%>k|&f# zc4-@$?*Nx~lW3oCI7&S=pa<3wC=oHp{Q9Z@S3UyfDLj0LHS{Hbkt*lJxEMsvMp?U> z^wGy3Ax0_GguubWw(LXM1VB(X1P~vF3NC-va3TUTQ&M)SqyBG~x&JHaUQNYcP3F=4 z_jN)Y)MDs2oc6JQ9=3^i8iw7h0Wffl(@63DFGnmOS@Og?kzo7WKR z*ozm(1p_k^Js{QxSOzZ)3=lmedYHz+&Xw#;hTt~7JO_+ZE#<-JZ)U`UA#?H_*=CjW zRas`O&TsM*k=j$Jg{uk@6X~)xp%AigeL_t`yhJM41p#N=Bf)}nTS!kp`?}^Jon1gg zhWM=tfcs%r4ipa_qrU_FX~-X7N}+ueOKo^5aL$1f4$va4%On0n!gNmPWkK+gV;qpP zNjcy$2AlIz_sM!R@4J<%=&H|ka$_PNoXMUZPs{ylf7WcIUVKu(IkX{GEuVg$(-5re zx-^l@B#)bsfJmTnjs1h?_VYU)ebzU~r=^!3pH^?-8t+IWkB-`y{W?t=n{6_jFbl;1 z4O0ski|F9W5GMk|qW}>tuOL}~{y(-s^o2ukv9coRjrOeXS>~uZD*5PO)WS<@5lKJy z0d+g?*a%E=Gg=b(0^;ZYWlgQXSCn{5hYji zyv=&8?b;@|>Sb{r9ltzF^;NE?qsSxi*j25#+rl3SODJR%|HHrrI#wzS45Q;J688)0&aX7TSdMsS4zI4 z;$ASY(uBJH6h3{Dr=(2Qn>kHy+2$9w>BG1<^HWl6Z=TFq_CS_i(&zT*8)al^cTEbH z7Yo(kbKIVNd$}#Ru0rqTV)4@TTnKFK}Y$%2}!=9Zb)x(*|}z}ZRnygonP z+1;KsZw@$Dwx~KhJo>`Z>~}f#q{TmMqAF+kP{Xy^|CF>UN4D!TjrQ)?IoQ%ywsYU% zm;c#~Iqha97R;bUJwo-aO1ud;-S-(>a2YXMJF~Qadqn>XbRWwQ<0B8{afj3EFq=I#G+f1>Oi~j|3}Ah_exr(_$vqM1?AW4A|(QG-CZ6p zAxvv$#3`p7Co?hz!lIf1BKEq-gZ_VOI$ku{{!7zQSO>V6v2Ka`w#6O*p&}e8;ja>H!$N!5xA5p;tr9T>R-^e}=qHv%t5k=B%i#t}5cJ=iQGI2X9-l zFeS;v{N;kWv+uvZHst|>OW&n>1F#hP3?NS4(_&EI2zyNl^j3a**&#^xS7eR=Ca5Tb3*b^9r0!c*0qc{ z`ytB(DiE0e1aG;PPqa-N&Sa`AHZSyselV}TTDU%N`ajb}sY79(er#WybzSSp5P7E&|jel+Q+hD7-l6qUOGBc4*=)oNsEyN{! zB71xJAWt(xy18|`zY1qLhjmT2?V9&~(HQxJGgnd3)?YH-qGg7 z(|sr?#bSHE%FNO1gY}5yS}G8X9%CCC=7n(`&*XNo0|5mRVL+z{+kg1$&;ik4y?0jm zU*JI~8*5E&9H9OkW^SytJXBXZ6{+u`z7Q_D=w zzQ6sLR^xz9o&~}R^FX1H@mas?&2xtL$jh6=CO2Z7hy;5zt%5l^}9 z_G0>p*!m`yWpqP$!>2WQQnvho!a=s51_XlER2^)}D7(&Lt*YJlRK+ZT*kerH?~6~f z0N*WJG=vH^7=t$ew3if_)=xhZyQDcj*3+zZwd8-Gkp(J8RzH8gxdY?JheR?+2UUir z$kNqiJ}q zy7R%$VCiB_{L2#ZtN;iAc?BK;ZM}_4^Hom$_777h0uGBW`^~D~T@}nSXp-Kv3cR1u zWRj@l6s++~%YBXV9i<1w%kw#=KWGxbd$0!pG&Q}u{Nd)I!(DVo{ z=AXU^yyTRLCdwm&kC#va;-?dc)F+6C3?kxz|7bnad84cd5tWIhPf1$ z@C^H=4!V&atAR`iU8l#OtO0gphxSu6(2u1YX%MM=y2yGpq zKcxRNo(K$z^JoEsh`k&D)!GrDv;72T0q_45C(^o+NDaH_MaU5OjH6F0Gx$rjXBlT& z%kc^JG<~a3w|f58Cu(O^rvEL>l!K=$g=TpdRdj?({*4D=Q6d}qcKc{+^Tpf%hrASw zVY#OkU{r189R*TeM>!l(&@|T$G-5m1;;5CFb05ymNtRxAX0z4?3}s6#H3*pQ{YP`JwI_mw zAnwk=Q`UfY8<`8OegO5A1XKMbFYjSi*YIcDDqvzUp7&jDG|sZhzLKeLfb8KIiMwfX zn=isX5~0xbf-!;Iu7;i&{Vgd6KPCO1JX-_}Ki4Zqo$ zHu*Xe1-F~!BPV9mgr`^USpwv$Vay31C!X?8{5(xK5V`z>njx-{_XZ+#Pwz%MbZr{X zm8Mp`=X${Q;r)6ZDXTQvk-7UpCnrI?J1-)BG#w{D8gb;PS?16^Wc<{9r$rlQN&hZJ z+mk3)IsOQq6_gx`9l&d)!Quq$$hyw}wJkf2Bo-&QI8ldX2)qLrUqoR2=U+od>r9Ex z)|H_!=T}eZ?{Sg%)}AiW)mg~ZldgZI4g?qyG&l?SoV)V5Bd_CW(sit5K6I=#uEH1w zF(f_M*f#MDcOr4?{$!0~=$f_D&CG%Zdw6$CTv@gOp^ zD{p-K#vkV1^2k&Yw8M&1hW$+jVwfunFri3=%JaLZ;@lczJIoiHT^y3I5~ri(s1lOhRRv$gr1TpNEjfWHTJ+i!*(OJ~q1`c8 zJpq1rU=!>w0@M}wG6EJ2!A>n9so{8FG3=;g9v=@ZTUBNu?`^fvUqfjyt2&>{-_ zP7eCMEtyav+tBgFCr0N(aKMb;F34uwh+LfI&tX=>FaIb)?FV!OZs)CPj>)pxTgDW8 zWkI%4M3ea74B#mXl3~E8<}2*&s>oT;2wIJYyywSb^VDeJb)2AD+#i_5ObInV)OdWq^_$98NP@&v=PRQ=+Yyi+Y zoV+EuWiwQd}X-wL?H(t)vBc{gQ%7D4ad>u&_yW*MafhMN}q+7(rkkJ3M0#1VUl zJoqj2Vb`LJc;?Ky+~A{^2*75O2qMh^A#Vc;$h-41+s%;!pevg3Fz1o=fL^rSR#eSU z9tOQwV=l%4w!kgEEX{$&yzjC3SZ2$ZOUTJ|5-%aYwLbN_#vygAKba+L578Yx^9&G2 z1Bxyj5vGHsg%)c{b1;~J1EDZtfOgWJ)y{_4S{zL#=vUG~0u^>o*U1atYedYUFe}Yh z;SPIWa^Kh57Jy^&ei@z&ICzr_2{hu8b8%J0NZ9>(?RmL$wn8Wht)>BXe8lo87?654 z_Vy>t35-ezPy$0A)~}P{u`B`rTmg_^3hzvOXi#@V(__)iWZK8MANLNrEz`2&ev};t zWf!?%lfy%whzcSFHcpe|IB_v4*N4&mi8qm13!2MXuY9d`Q-0JvK60q(FGuam;g zzY7~84CsPx6;5mI-h7rlNy(#3b>aDk*k9yM;niFTQ4%L4fl}1=??3+13G9<-5xjZ; z{P+WK5K2AaP0RgvfSjF=QSgy(E1A~Xf{RN(HTreM+GL}{&&d^E)ZeBQb)ICxv268c z-~N9Xd#k88qo!*xcq74G8*4nc26qVV32wnPkl^kPf#B{CG(eEx?(VL^HMq^w-}k=% znwg7PbCcE0Mf&M;>eSg)wfF9o)=2bqNDe@U;h@ZpcO}&AAk?6m4N)ynx!8Fbs$oINHEm;I)o2u$k9C-HNwCK*Uro z3l8`d$sNCg4CLwJKOQAl0&|$6=a+eh7180blZj#*46YK*`8~c}|HASg+kp0Ff2LU| zCR5NKP?u5JXYlddUhkcd(2S>%1I&F1u2@Sg5nn)FG-J00^5n7m(wM^Lbc@vUZb_nF ztJz4}<)=DYuyfI*FS(EdYRLEsFs!38e#k+jR|kKe{jw2FWAqjXyE&CDApk8(LtBgV zsYay0>;GCR9fM(Suy9TnSOl>CM^EDVL2IkLs;%}PlgI}^(uWPVvTHpn&By%*+Z9CnT;!SgUMZSy&!Sf!U*=4oZmw8M3`$WD-@am*(mhAu z4knn+hlpI9u6laCPOFR<)(*^HVc*@XzE1*88I0#{{oZwaJSBS)Hm!u~4Z8DS#=<$g zO%FFiHqG@u$t$Cx{1Lo;m0UIHxgxJ%*o1UnThMb%8BM7RUXblD0O03BB+Vn`|I?}D zSP9t1)%e{#1MGnV2(SF(CTX;>}vQ{->0Q zt|;dD?Y;9~>0OU{h4J5KQJJ3Ka_4hk_}U&R+=RUR{?MXWu~WMaX;?0`;i*BCH+9%^ zU+CD4$K$UClGs1`^$Q!cKEGiJ9qIq^Y%y7>h4r+MTYIS5Yj&|yL2b?@#M#mhC zSu{vQIBK(X0VL2H1$wm(3REnDHqBY2Dued9fXm3^{haU$oxdhMCIW>uO{0i<^*VuJ6ry^y5Q$^3(A_ zake>%FL5u`X>EB5&`v+Bw+(3Lb(oJl-!0e9)tpCv7zeazQ>ZW4NyA$^snczavp@AT z?W71J#pNv*8a&_xP2CRX3ppt5%DBQPc(X**U?$g0*H<8KM?e;$W6y_>Y|e!CD~|Sj4bOq(8Ub} zC0+T*q-m61+te23nk-(ry`JjlBq8^IC7WmiZS|f(Se4OErkbd|7w zDMJbJZ8#ObJIAVn3U_{=uFNI9rQ(n^5A690$edk=B)CZVTrksrzXqq`K#ur&0&_ox z&Y=_Fym);?`MaJrg5S%O8^vKXl1j-?TlgVQ3ZeZ48IG>9uZQ-1Jgp+t$ZJh1KE;A8 zm=8Eh@S)_{fXkXA50Hh&AY&K6xIC526ek}ajWF4lvGr%A(sX&mL(DEKy&o?FDI$Ds9<^8%aZoS;i zq)}@4!INY_?yVG4;@mRjgX>YSgbYT$$tp2l+g}ROyW1Q&1`uuSt6fvjrA>`KcWTlD978RimiBe-w{i*h` z&Uyu{BE6x*$yHu*uxxi$D@0@?w?P6|wZ`_@G?2&TSh%{X%*-uHYWgqVPmWx}KzP1u z2+r3w#w}I~=QN3Tw2Zi8Nz$k&dv=(&v-m%X*2jAvR_Ro$^vIv)ir+os9N*ZZXOaOy zlIi~Ur(B0Vl!r1u!fuZZ>IGIZXlsYW_E2cpV=MU9)Xb(D-kadGJKuuUTasReGXgp9 zAWVAtRy2Wcvc^Qzd*pdcgUHB%9Z+bU>QpIxIX_^jw!f0*vRqYQ-8b!zsECbNsWnX} zZ+FUkAY`|s?+QUJ?hT4M;53>Qm~MzhnEsqQ^?UdFYq;(=2OHpjsj|0Rs}2|T-b`G2 zM=6YS`$s{S-)u#Y|I3l*j|ziQ-?9UeHZ^!`l95#?E=r$0>rO6 zuN)t??9k5i@K#BF6!->o`Y5k5kVYV%CbINFU4H&!dI&h{v3H)R;hVr^y{fApuk#Tw zaN_nfEsV08UbR#FwZ_MOQua1#HQ6^fAwjdvnmIKIV9CiA@vS5{iKmvCiw)22;x+$Z z)W4(%Di*}-VsfI)X#Q!XoGm0}wi~)}=S7UqkC}5Yt{FEn?60M{%14DCN8KQap?4 zPlec1nSHFY8FAFgyl;KWdOsgqssd#d>hbSUNftxEF z*itC(!5m#Db-oue_E4w>mvrI+yY zWe5J?zxho>EF792fG(P{^-}!YQy?&Kf~ZXQS4v#lvzE)f`^Psm_mw;hiPYQx9u6++ zRb1B0DmN7&K~D+RT#m_=uQ^VcC~jcwmX=Wb(fR-IxD$o?jo?H3;WEJUEf+FNB6h2;RSKn1Lt9(-2!1J(IP4et$UtKVYzYahjOEJNrk{2k;2 z6^;8B*zXPQn`7nsKOVccgboXvL&^|1!R8MEvMF3RKF5ht?ZRF#01@C%J;3lQVX2Dy zx9sC~zSD#<-0mQraF?Yc)R4(x!ln7+&d%3Xq>Pc|2O|Z7!_(4l^fc}JCD61fn!UK_ z%OiwEDsRCao4p(Gj|7cEv&G)=ms6UJA}E}(+7ee;xE#C!wEApcX4f%Qb5+J>EH&8M z-?_&EigIj%n7qM`k7a6`(OIqm)xTBwF9m|Sb$xL|#(A?+&Y#b72}SG@s&u}X59h|Z zjARH?zcXkG%INiCO(@qai4tplpait%4^5lf(xyFk>}?Nsb~~(=I^~r-K3t!U<_9!V zp@=>4gbgPBRrrcs@_P=ZkTuO8w|f-1t^Te*#-qT!4{MYE*RC^;;pmz@eptF*yp0(G z`Hzzu4Q2wgn3h}I(US!yLW^m6Y`YFCM2%<_4nxGcDs@~UwG_0ck&5lG-jqf&IzcL# zo}ISYceC6&_AdNL`K?l1}ne8tWzsK%X_6w;$I{53b z+7?|z_Q`Z=|AJosXV7Nt@;Xonn#@7|J-XJ@_UTOK=g1YpHu~IB0=9OQJ^qPz^~#x| ziuk=EVwWPG*TSw*X3`3Wh8R`}ecUSQr+oC5eV5862{ZTS0bbBR(uVk0u55PH<@wV>YqQ@&fDwB zgfs2}tWJ9`Uf zZXlb^$Su%dZPUnq>yRkhPm_fF7;9K}2MGhIIKIhJRH^8~1Jh40nAq2=prduOc ze06rbfIGn1F_({%AXFEGALbCi{PM{4h<`o2TOTGCI<7aH1){>PQ;`w(S#S2rDdsum zcP1Z29PJ+UjAgI2;jXJR0AY27KAJEC237!&fwqsJES_%z*rvd_JD1v+IAD@j&VtA#GufSZ7(VNQZz z{{)RC$p}yk$WB=8U=NqReNIn)TX*Y%OpN65LJY6apNfXZfjje|#EbscZ)aHye|mE#pkuy&B0!a-)X!ofUL$z0VvmltumB&R9&L0o62%Ou+n++O zNUsxp(Q}8EtTUFMDENPU?ho3`ccm3KGU=L{Wn%Z7^!lk=N2>pDJ0&h&E$hSTMhk)O@({UNaM{i3DS38pjyAwykCI zFeLOTBSoOPP2j%U%cVrUs83878xyeH*c;KQx5nG*3D5t%C;0#3`zP_lyy5+Js<+be z4MWKD=HI+`tH(7s8APszMKhm3`+@EA2w{eZFZpDi)E7xvp6mOjJG;X$s6BEJ2)F^n zC5icwu|fLKD6jN-@7WOZQ~I2rfI1R+RG?mpZr27($0yt3w#(s+_e%U-CR(DExV|0` z0#NcW8(8tDZjLVV-Zgy2)2PxRBGYY{t$M`6fx^!h!e9L|mcbu*bFvIjiOJ~oo4Fv09GRyHJa$W> z+rPgwFOUHhItg$cY#_>+gaNs-4Y-&$-gjZaXQ)PRaM}aS+uIQ8BAlPX>8@HP0od>( zCIK!y?l&%IB=3nsUzRHVVE)mp7l#|k=F-3&Y9nOlv3$!9qUwK`(=+2m=B7W2Xa zU>;TuYk+OE<<+)0V4Oo@>Mw1e#NFzA%)i=tB_;!;rhsOx+vOUKbAs- zTp|>`7f>fw`#gK-i>VaIVjVBle{kR($bA3XAnNu0Z#JLXIr!6W`{*x!$2ymnby;hH zjfnxG^HAzJS0dE$aE1X`L@CxDi_x^;|1#O0>`y3z#{!u> z_5$eF#W0p!Xli_bZ+9rEyV|(h@p4DbcC{G~;PUqZd`>p^OEa?U9tivA!2~H(dVpv& zZxZxTC0?Z6ldsHIZHwHkyQ2`ucE|-RsWLcBxKoTy6`Q+2?&hm_E=NY$O88 zKKmbRA%KDQ8(@1{I@aI;?n^ND`&iS%F2dk%oLA-9+;EU{7H;q7 zY}f9NRtEGE2qjfg8r_O3dG0b;yYix6bEd;+n-hI*Frrm!s@ZQkmyd+({`tUODa0|t ze*E{rK#~npEZ26iw)s$+5!DQfHPUjCs>Y-jMV}vxhgO@DEYJe*76M)&fzx=xj zA6c@e<-bIDI;EWdA4GUSaMFA!rl4VNGw^qd*W-lG^7f@@dOm!Kjpwkk3w?bP9`Y6Q$~OUeDL_ zjjl&O@VRJ&OC>RLB^u;s$~1>5URynH4_WZ{4&j=_9uC)9A1wg$z5k`VLrvFA+dOY8 z*Zxa*Z#f|e^oRPK1EbC$aQ=26kPa%T&V6qxVZmjE(d4>V7v(=z|H}oyBOz&l!|_$E zd9PB_A$lz7%>!DvS727@IX&&6`wIRV84(c?jG*)C_3Pcc>W+81-< zK5xnX@0rek!Q`<&s_W}_tpw?mGCBZR#of`R3(8@r;M)P)cr}8O$HX5UZKN4+c4|}&xhNvi$Ebs0 zO6lo+F69>hmF(0D2#E^I@_1rG<#??%{gE}!0Zt!B`$_I!1J*P)2n4?+CK`vlb%P1K zj6#PIgAlGJ$T1p8lwslehf(2Z$pb1(HPoVFqdr&V42u90H}+_Jx_>s|RQI+0X)u}* z`&=IUtSoX#U_B2WtQTYt9Sd_aSRsG9K(R{D*c;yY30dn;2V>p z=v-YT`#YAo-3E(6A-t1r;}MIC@h^$zDG^@`60#GB`CWnU>oK9S7}zz)BvKAC;c12_ zN8*0@IVak?$$8iDd_!!eR6VqqG%hb-ifo{9vZp8LkzQpfu)f|k(E_$t(ux#NA#DOn z@>Z%NA_OSaMw&+@8ZZ9xfc@_#^0|86Voi92VXLX8WR&l z6XgfS!S0jI$R&l5;_m9+m{*7}fLCgGoi61S*R#0@RRG}+)55^_xh5Bql-P6-a=LJQ zBIWc&QqFd&t?-w7)@9TrSFsxO`96Ook2$>Bl4DA}_}y{RCDf0D!(aM4(;Lexg>)BB zPtQux9BH#RcKf9+Gg~=Dd>M_{ z^8_TTO`AEMQCTrA`-8Xl{Urhq4^MS%?H0|Oq={r& zHTVpXBc(w4ZvtJw9|8DLv5&q5qTnsbwVf}~tUjw18T%i>U`!xc1}MZG4uv(s!@~OW zVF3%$$Uh?mE+VE(|LDP0%^3c2Vv}z&_;mQSIOz%@H3yHdelEOW03JoQ#u<(QBjf$N z<|mYdC=xo)vrzXrg$2Q11Rr9nCziY!6eXk|)11DWO)clshCV$H^yzON!uEluhoJ?5IK)=)55YMK(Gz7#{Qv6e=ROu9 zYHs0}1u)VdoRQikAmegt+B@q0K^iyo-6%!tCOzzxHwSO`k)M`VUu@7S*}J#!gWKKl zpA|nv6>z}TmGW?N@0w!`dWs%KkB~431&okN;Q%KF9=2H=I6lqdTK|}U*x5$|4$wZ@ z63uK4?kp(cjZ8eUFx99S3hx@9%t--1{aCN(BSVx)QPgJqx;vvpdNZC07Rt^qBVH4t zF+<;|P5qj+H(Gthi+m_s{;2fU&2@9>}I-Ka5Rr9WG( zaQLF}PE!=yDIAOz>o+qC8X5?a6IOnUkrDRhUCccnN*Xa+Ur>S?(Ey3@SX%xHiSfw{ z`N-WbN9G=j3W2E7VGPHq&f!t=w-xf?n)j$!^a~@w;}4T-a=x3#y@?3G&Y4O8pWWAB zLS^9ZC;Em2T`#DAN+?6p@n|_J$zYgL1q;+cI0KR&48jApyX)j=N`lu6c2w~+y83wm z?{lpVraIE^7%BP*e(I0%LGwJmJ~6Q}+J)w{g?>q4V&6bCzmEIgzv5NvdG38URg&M1Wi)bt^#&A!V>7H5mu^$io6K}sV9Yj~;i7c1M4s%#OX zyC}|q48TsehPjF=bkZraq!d$e7pyANog2 z`5@-kqql0cq$^)^;%o)MC>w}5dy+iXK3j~eh0>DOt#T{?T-)I@f^ui*{)TRunDAtQ z{>Ovgki0;1#g--*f^O;WPi7nB8!)CN=|P6dA?9I2MfE?q9~wAYr~midZzW`8s!2@` zdvQJO+1T)F<1k3?{zLwis6(#G#6u>wZ)kz6&hKhE1HqRNWyKOgM`l8iK{I$fO9f^)Wa+(ZQl01XI7B*SgZZ8nP zB7VZ^U%?KOD9t1qxfW$>Y(|HOmBNlEtGKPpIx-(Dz_0KG4j*l=z61n}bO3fiTjxf(3BG zkXQR3P0j|7_Gbz>@M8|?pK$72SY?|?#2~Wnu9CJu{D~?+KkyV82zSw1(8S)wb8*$( z%d<=!;crspjz9G>#+sFweb=^K*(-$#@p`panEqBVqH1c?J;8nHabVJQE&_kLZ;}jn z`zv)2qIf1ltGx=N;DFxpUuPdK<|QLZ{Lfj9-7fw?$XEHh|6q>Qo;mm#eCJi8N~~HW zc3pZ;UEUPjnWLd#p~Kb;w=`3MIZCm4SwXkIwbjj-6m*V)31mj(SNOn+A3liqW&u8q z`1#NsTY`q@Qm1NF>%i;8zUu^yKni^;%}H>p&ny4eJA|#y>G?_6*4KY{l`F`fxtBSe zwg3I$AITdC!e#jWE5SzU?kKR&p5lg#>4qm=j?+qIThjwC2-tMj2S$jXTT*E zxbIzJYvyEtOmG9n1OBO=ky4ft$!TbevHj#e5*=h__b2Y(Naq>4w;b>vikj$ z6Wc2L)s=beiGm!leUC;J7>!I!&k;kc)Iab#vdBnVVM;Qtm?F6|ue3Oe7h=hdg0usktQg9uec6_xNyID95i>YI?nRi(k0 z;W=kqh?*t^UvQtXPo!AFE>_%!q`mjeS|LXJ7mLrn5H zmtW*#D{AkeDu||BKq(GcppD|LZ_meQhW>I?X~g*8n)P_4ajAbGkq2jI zD_TJL!I5j=718{ckK`qv68C-UMc87zmjsoskVE`sf_Fmcb|I(bt+M!9K*p(Dw5ZiP z-*RFxlE|DpPJ*kyQ5xt&X=Pn%@6&*#4cRuM)!OnT*_2ybJ|A%N<>fi|}v`>=2srdx2?m`QN3Zzh| zKx%S=0erzxb|CCN6HbLt9}e!L-k2o{krm!(ZF-JMhxuIRpW!!Rek95j`PI8FoyVzCxw+g3}Yq4+jyJ8IW&h zS|mfCv>zHl=*U7(62DRdH(ORxw1x&4b8^n6i#Vw56^+C8c=FH}wvQ$RI1UL50TBlv z_yj&6H?nmh04IMh5;6ck%a-`pVt9APsT4Kw`Uk`tafexh@sQ<8yf7Z(ZHwd~Kv!Y) zH1^M-i>l_~9Oszto-}?PuNB9q=EWR4$T^s!v$PbUEOCJJY^O^kcym|c<4e6s}ZEWA9 zy!hBBS3>d+H<$BsN+(#uhGIrmD**88Y@An?WW~H&hFM)YsDj7dq0qQ;5?yGrM9~ zMEq}n<-SC~-9&|d;Q%fMqaf6GKyVNMImef+05`at?%UsClHS&s)^1w8x7{9Wz1ZsJbzil`-`2Wk6v!q%%7MO z$;G%&hG%WfCz@{%VPpq$*k?gIN)EdH*n#io@5>pvWzB^oNv9+_0JN%Lrb$X)Xx#jZ zg$`G(Se}8JJ+(dHIR#IUEH7K1MS*yNBh5q1;};fIX#@~B8dCBZbU<{=!T`}NYm7G& zB^HNl4O_J1A_nopL3-43+cSs$Fx zCFxg$z7WpG*zaz}kBcYQ2-6$>s>kh~l~Zsk#qww8&L@}Q)+B}Pdf>MbD9p`xauGG5ft^>LlFzMjna&BU=gkUp^X&zDG> z?k;QZ5I$1yGvTocS;Jd-N?L0Cs9bM1yr}MB$ktjDwcyH{dIO!iIB+7PHpg(;+Wx?XLx`v_~(E37<)`6@;zmS81pl|}F$kib0f zQ%xB?)-ct`!g*A^CSEUiUJ3|smqrEW3!uEhd$Y#j_XC$DekZOz6m<*80FNaQs`Cg} zA^{;aoWkKrLa`PJYtNBM7hY3Xy`YziN8X7QJ$QRRtReNc^eE~po?NEm#H;Y3HfvPK zoK%!_5+=^MtEs>*Ys|my&2abhG=-2Eken5FuU>)Qn|MSaA+7E6#pMjHl!+>H4ZP6d z-&r}4kr?*EXr0HKcI?%Giiy7ia7_ro3ty`KO;@pgW`hDOu82l2?B+KtB9KUy82`x`~=9*ngp$s0Q6cwU5Z$TR@g2HnMWGo}$57Axhowzl?sL z=k(h6R*>6IQLhXU774$J>bwI{8q&zl(WxKJROnu&LM{76Us6L36^07;LE+P|CaAJC zy{qZVYDry)@h{%)FWbntL+NBk#RC5Fl@Sm{cn@X0z}ReR6NKNJ8&WTy`lXXhTazih ziJ8B+#_a`3Y5+jG!!R6JwJ68MS!$dN$utS7d7aNDsdZDNHzarP#`*WlQZ7}YWYP-k^ZXF} zMYr|5{pMMvcMh3By?7F%+V_HfotoOw_|Z9It&VVZ=|;TPY%s;5OFW+zCy02HwJlXM zMZoUxL-M<5U<`2>q;Pk0LNb)dke{efqEU(sQOXF5z+>71Mi+d(FM`J>Cl`QC!_IIr z>)5`-dRsI)nE)6J?l3ZgIzl%TsWZO{@t}(P|Q#kBNLGTq#9wVf|j}(#8keF)FMvLgx>MMQT zyhKU^rniKr87rZ>uP0KAh$lvibvVwrj0lVv?w`A1G?Iul#G}FWc=4YF zk>im`cx>O;Wt1vr3M4t?s23|m1H;_T(b2c4_{uIe`~91D>9+%h8l=u< zKIS_zg|L?jasPO>$mafjSjbzFJiwj}Jlj20_+hfSUctxbbcG*{LYNd-+N~O;be^{# zYt1@m%eC*lfFDm9tV-wq0`Yy`?vHhJa_W4#zq&v2ygBX!-03u_jM{=^On@RS<<}nl z$gj^`OQk|a`nhbefd<)4mu$D{(4HX^gB9f{$u4Wm;dC-6vD&r&m-gAVl)nb@@82y~ z8u*jYn!w*L5en`SwIq6VUgD5XoeYep9d^&SLdl&xAb0v6K?2WOC46OkEW+^C+Keb7 zXT}Lga;K>(f22+8Ncnjg*J2&S9nX%j1pjP=%D}wPtF#GRCRGLq(lSwfyFigmg;ebP zg(SUcmkHXw&t!7@dc={n*67#oZ=o_VMI2nVkW-@RZ8l&{j(1o|B;oXT#wTA50^$zP zIORI%$D&BB25iM#PL}WhV;sqw)J*xb<} zMc}hU0B(_B?Ml5T*R*vY!8<)axRMHaB*s4PPf{yok@7jd0cN;648&zcA(*)n-QIXt za*bV}z~rpJ7O8^(Hc3oN z*xeH{KWcJ-`(!QPUM}d&Dc(n;eoU&}{CV{JYuMAnBK-h-u5{d3s|9m>j|^l2(guvP z_g7nZv(fE-T3sm`QV6z8e!$JHZ~>{^5CLFRx6P82l95F+r?Jn*AwDT0EMA2FUJk=$Qlk$3=+h_ zJ%gjVm*#j4ibi7XT&e|m2{z}+wjJlppGY%z-yg-Y|FQ9oI+^4vy9}&Zk&zQpQlryw zO$pJB6;D*EHxv7kVaWNZ1Uum&8oWn`$)@(dr9`nENAB0&fOFlYVNg7q*MLtld7hG? z10hMOO0^n`V2eBQ^<#_-L;8;kxIy8S5Mgh>-<=ruefO)8{dbtyBcpKL1|l*c%=|`a z+`yDi8|Rm;tiunygN41tAfoq0qedZhMMOkIVls#Y?CesPxV0F!YStpYUNSw&%2A-Z zff%+RUz7g++q~;?4-K$65yGvo*?6tP8VqVsZc<<2^Azt2^5wk3U)Gv4&@E?Bs z365i-_zsACg6@_S+x7Ws&0sGR%YtN*U%m^bVqz1ANLV6FkU?~if5(fdh9f!S{?fVkG#HRir9!<=B7xHp2U95WW=JH?yk}-oKDLgUl#UT?l z?ia6tru*Ao3OHeI1cq&1oAQ8hB(c%)Ld`;}C-0|*r>mA&H9TOGsYt>W;)-eM0shI` znfCT}5p5FS^$=|HkAXM64d%o63yX`rpUC8ca}tr$3<3Vc{o|naS=M)p@w`I%g1q!LRGuWSrWU$kMhhW zSTUmD11ija5K!#8u$EN-LM^VJloo2zm|__nGGG?0eS?v@fp77zmMgTMuWf<$2p* zqdY4V`)-j{w$w`L7w5_pm>1!86YXA-G|N9_d1KXQC^{N~!An*5AG14?>bXZ_LtbTqH5B7DXAgF+D= zhD;>oeo2|9pJJWr;#n8IjdSqocEC|Z0Jis)y-0R!cM5&9EYJ8_?NG@u<29KQOoxNZd+iJgQ>d;t5Ai2^f0?{vCT?T| zro#(CCmWi^9T^#ML+JsW=8UYZhX(zC-)nJp?VPVNY{Gzb$D+Sd2;+ZuE!R!~#7U1j z1^_vF)ahjzL|-8YFbs(FqyB0Hvi>>D=u|kk<+Ah%$OQ`ER|NTDaNulQ9Om8K9WV-+ zpHD6}KR48kDxihU74?TL`S=TRbGAPISG>agYHy`njLbZMRQuKMk&x3@1~-?@G>k=? zY6R$ds3%iwNJksk-&k7G`uG(7+a@Hxf6F8E+S_C!HrZ9CH5X8I3kb!uZ0l7gtvpH3ex&UX!Q-V>yo@I0wKe4=zfz#aJH=c{-Kv>BuuyMW2cSRN5m zs?p*KxvOW)w&)ta>l@zK6Up<65A<5CFesdGeF1njm(i{7h&8$Hl+xWAQvarV+&C=l z19#Z-@tqv}8#*|jjd^8hv?mD4g2-K{Ba#1k3s#M&{2MBgh0gHM9bm+Y9RNa>R+!k! zq_9jsNdSTq021%NofTtafnP!iEaMcNBs!QaI=zy*rD zScqmJve9brmibC+ur#;DZ+-KnqZ^0()UfC){41%k1I8#>Va*YvBDSYe2v`kvUJz!K z0mDj_dTUK3@(D<`20Y*>zDl7K& zUo=Qeyg;ns-+g>0Sy|nDb~ZSX?1Gz$U`OWu&#v*0F@>bc=si-Pf*e(2IL>5#yzqSz zpi4v!F%UMT#kowXKx_#Yp4{-fWe#)j%7)MCn?CxRYTFKWPA=*A^7;k;UG&cpR&&(}Kby*S;62Qio`1)x6FAA!=dcU9QqK7*t?W9X~pxes> z+<%5*n3oW=|5WDt7TT!a5$kYYke8Yl>nD^IT*cwau@|_j+Er*RVRR>Z*F)bhpnpX? z-RbF!=^(3lGmzcHOpS(;Bf95&Opp3q<1>BguOeyDRS$P;!?xD`?Qio7PIy%!B7HbF z-Xn9(UN%ba>KNA<9~(hAU_zimT(VvWhD;_G^YamX=8zUHi&D_BcgaFF z>(E(tf*<0E%IyB|K|BJ+z6}uP8VEH9PxOBiBiW7OzvO_EPQ5pQTzRclZahbz2q|6{u1%4`Xm1Ij% zIKrH?fPYGfG@r{JzBaXsrOrn;YMN`3Wxp$GRyb?3l9GijkIb=Lj#v$De?eR>E3*jM zT?oK%Yx$(;<oJz0 z!=}|60LGbVqNZ^^1$ug38CZ+|uAaA3RVKv`+{~-tmx9#)=X{`F85t_finzf~*-oG_7d4X$x zOPERl2}D9L*=S%3gwKVJB2ToxZopCFmZTO8g~{K4 za=grOUc+aTt021nS#gim*@rL9nY z{ay>`4O>h`B`H*!?D=Xg-}D6A4LiBtTI*>1^yj!p8<66<>%0OHzXZx`Y52mbu~YPI~YCt zom90<N#L4PvNQard4}=uzxFIY;pt&vS}8?o0{RVNEy+Pi zmpn*h^(g%NEa-}e4`-XidMIn%81B>@ofWC+lW`~k3KKi%Y!mfMbT}!x=h*RkaVfir z@yJY3??(Lxf)2^dLoDj<+r6DBPBR6{q*)D6kMqhh3uuqCwX&ek(YLpA;x&b+V9rB9QE7_R-+N8OO>lii;ytef!1WwN1 z9Y$Sks`FI}yOFyhm*N7Y5psQi065~ythAqOP;PptbRkC^O0HA5f62#ztVb}RDYb9# zcZ~V1j+0GnaPzgO;l7D z6jz$J&Dc**3#+LQMiAfLf}{D~mvf-U@OG<%OgYX(%z!pP79qP*IDy*+*DRo@+}`g9 zA=T*3#5N&EX*@D}vD{AAQO{HL1(ID4+UmwVHK@dUC|=RK*uK~?`qI3Yr(Y<~!aCP#GTn=lbKs%%t=$^FG zz&xGgVE((*fqP}b*f7(D+a~fCHKzgCHWAh1n>s>G?{78O_N3+Ehhx6;$8SuOaQsQV zD6o8x$oX3rt@GuaiVhc+Cn`|t^ydSKUR0tP7T8oOR){>s)An6!2CitAqWoJOuUQm;0O(XQf012L-1c|io7je5Y5`|;?r3} z21W=LLmoIe=>gnn*T&$w_4pff%HQ#fG-a`201sRv5$H|#R77l3>b)9PDakNboU()H z97blsNDK?#`^=d2#r9G~4^R?^z*mYnbs-`rzYSrp64TidV5r}lAx2R&jl*f$=QPsO`VU}H$xU$v%2BBS7ysVR zh~SZ+cm*1qY1t%4CFLQYK_WYX5^hrv@&j7HyAVS#U_QO>(V z#sDAu6E!X@ENmQ|GP%JIj#4fv3`E6skUSjWTD@@Jjb&6Y$urxcr^u~_j>zm_3GHEG zvzRb4i*;gOQTS@YP%Y7{;8M$j$!#ggiiq(pd<~*>y&E>#k1~#hcQpv5*d?lr63G#q z2~pUTlml|5)eo1lS+HW!Wg>SjSDS`~Qvg>cDM^JoM#L=OLx%R^Ki%i|qy9|+ed&7} zkMBowLy57%)OSGx1Mpe~ztmLk+%dijvH`OZ)9hFzfV-=aNmCWm!MjJXD4mH$xELbz z^hE;!fy1@{J5f@}%Oc&YtU;9IC0p_ho75XDSP@@rBGIA<4hbpwmW}%Ylq}>#B`~jf zqB{f=Myw5)fgek3FLIEGosybS?N_u2SyYD+Vw714J*SaEKchl5BM#(PRt7OD>d6R+ zh~u#KAQ0Nd*RRak*Iftw)NjEDe&3)20H^U0Sh1J**w_JjP0pJ@zm#6Lff;DohjQD@ zb&QOlZEkK(z5va8`#Rgj1VaIfF;X;Qt}vqdqKzH+Qt}4d#ehovmdo0hwJk9xSZ!-4nIVReWSD}fs9-G2&6D4>iz0d0Wc z{g3=WVHAyBGoM2Ja3Q`a?~(jl%$JuD^T~c|1{AY*7XKRQKErAlI3FwuyIr0Vx39D| zz2~(`6bGhmxLRVPgaAL&Jb{Bb_7NEir_&N_Tfk zcb9;4cQ*pkNOyNhN_WTmc+UC1-{u3%bv^U!z1Lp%`rT`()9ho8byQjsq*P0oW&&Bn z+5D=qjCVKi>{9m^JMOaLBXa;(zOb;64G1+)>2;>#lz{su9UA-kcraV`l>Sd61qNK0 zt+xvT+MK`7%YDeLjL{n`1bAeePC&fAKm76I#}na!A;9(Xe7mAUz#xqTrWtGieYx%I z?0mBTowUO{3iv8Vu>d4QdTs^`-nhglRDhG5&ahq-56a!=)#n5#%@JIb6R*@dhwou3 zS_Bqrj`O5F6Q2P_R{XtN6!u@V;4g@TKk-yL%6Z*DjxRLjpcBgnhw z)Tv8I&|`hj-hKc3k9|sCU`wzD%;E?OK2TpLAgJNRC1)-4lQz&5dv1FbVbCrgvQzz-0*+IlNkNp8gCYUY~?HD}d?W*>5N4qjJ z*3!YM2w~|`=n!Ed8br$NOLPWh?DM~cQzvT*UHiagUoafa>*eg9lrD|b?h2nt`>N_T zHK-?3KmC?7o&uowzEk4hOcMg=sMa&APX!@G<#Mzta(oQOt{NFr?H4_d^{$gTsYs!+LFWc^z^_2I{u$|CDa5y(foj!<)kxdsNMlwRmDrX(i!nG)=#pa zPQyVRqrn7H%c2`!=b&!oEGbn_qgH7h%)KAzqRo`eQ8Xv{`1`YuSIr<|( zC8YI#-`KuOF+87fp3OT0I7Yk_Ajnee#5@V6U<#zyd~yb@Mq*?+(AZ9EYAWy#i=%&g1zQt}<*$QzH-`F!h{LRt zk>_anCkCrds|X+i-7VxZkOxS~3jV7w2BQ*mKVwSMv)Qf*C?FiI{z|gFQcUOR0wGc2 zg*uTtbgr%G(5HwbQVnqX3E~H1e*Sze6dIb$ZisLzL*6S^s zOJU2K^N&$hWmdu5N+-NLKvxy3{VzZBoe?*G4G3%%xKlu4DovfQZ!(BAvI1N(!gO7E zQ^@4Wjp=X7XW6$U+^5(>b(c`#OCm;e6-hpdw7eGT#yb%!BE+vBG{K_db zoY?}%>_jPz(Hx6Mp<;$9VpQ+bjQQAq0VseqXALI1bpxQ7e-p+CX-#`9*<9r)r-*-R zxk_oGo{Nq01QjY|3}IO06Pr!tgZ@>J)ymZEVf>^6fRpm_c2FSh2|W~=?fAFle5?QR zmd?u$6_=TbNdzIfCm1b4nI=|P9B?GwcgQ%4Q1=1k{+%-l9?P}_T(1}@8V46=ctELi zEM<2xAr|ugbQgi~HmXZvyX%!+MxofOe?qu)217x95%sIp)lR4qfDz?D4=goOFyp27 z1sn)e#+-IlaLv)fzS{Gq02&(lp~=9xBl*Y^y?Rse#$o{R; zx0bHHQpq`LN|>X=CuHuq-m@QEC3(;|%^wnfAJXfSr@4}07}l%5N`t(vLN3W{?Iz$Jkucw4=q3Tj$T*yUY(7=3Tvh&b*kC#DCK=S? zY7Ave$bZ#f zL=9@5#W|6<)5yuno+@vZZO16d$N@LPf~yB!R*#rD&bAYU{T#9};_dHw$M5yH{ilqTfj_v2)Z^7f)+Xcr0H(l*R}k8@-K#9SVgFgL13mCwPl) z!*V{nq`)kmZ7j*WJbbwEzDug+DH5TEEy2Hdms8acH@hNMIxT-;U$N{%Y7=pLh7%&1 zVdWMS7*J%Js}et?$y1tV^b7{T>7IXv2YHJr5l0Ax5G6p6q*ggVA);A<{+A}EBm7*7 zs@4;p1bNrlnmhW^s}#wW+#17Fzfb;Avj3PSi8zpH-|xj{`PYVyY2p^@*xl;X#9*dQ zS#g(n?`$8@7zm_meqR6#oI_D*DkKomN-53uXAU7R5S|4bEGq>Tl7`~R?{j%a(e-|- zpkd8`GEnl7t^y9-cSHpAb-f;NGdV5sTASxc7^1N(A|?2s-c_nOwF0h2&v*7>%{$zK zCeRDLUwHMv@G@t(sdq?fjCAcCEdPS^lrZot2u+{<5GboaC@B8>WIrJgQL?~pKxD1f zHUNZG0`|(6w>SgkUd|c2`}npPG3(mB+f-5KJ74h|KZy6u?R-6Sf&ed{zP07A7U0I| z;$&|l{E#9N=x-J*>8lC?(F0UTSG6UMqmwcz@wx!UKW4s7(jtHoYAj;(77NjzL&;|} z)Tqg4HH(q>r0x_~4Ryz|Q3`NZe0o7SxMiu7Muh?YIPPt2=x;I=lS^}0$$Bq&v8{Qq zL|}dJg{Dw0Lx*YrE~C55WiK@rREh}#ECn7i2HKc-DcN#jep5uq(ToFL*x$Y~i&luC zrz%QZVWRlGl2&%r)_J)P4t$I!JFjZ70GcS5!cG|{0714|ku&y9JqBtg zO+KnW3P2k+d=cFAu1r*5P02`E$;~}MrnM3TL7#w}I<8ACSBw6(V8TdfvDLgB;1OwJ z4}&%}Ei(Qv6@zk$m5A*YYc#+;xE4oYzuUzQeL6)JJ?~*I!L(>N8pkla;AES_%}WS< zbz%O4Sb}?{-8iCYKdrtZL3d@R8+6=X*;y;$oiCFJ^QzrGKKv1AA5O5l2(hrFi+YUn z;d)>ifQzb`kwW|n7Nsc`rv{FSOEuY0=mb}eh)INMo8MBpI(MvK+l7T=>NxaD1gZ7q z318gx$F5#10aXg*AQuD?#VbB&8V7RKkrk=Wb$>ffewzC04+LgBMjQ5~S}(MlkbeL0 z*+|*CG!`U58H=qCc#kIa*jykK5K3&XFZKNqMdJp{wkfhd@VB`L<3pnRzGo1{3Ittv zY;5~cxjkRtE;+@|hR@Xt`dr`$5;la*$;T;MflnYX1x&+Twx^=4XkPLA=VoI?F~lE_ zY0zS!D7Ov3&PpN7k-N0eiqiYe)li5Tb_n+CTsXOUxJ`{fiSVU|>z zX{qd1*<}>*^Nb5unkW7FhKuEfeesTJ&!(p@AW5mj$Q!du{7gPG7MqrwGC zTnV39o&ZI82ygM~DJjcC?}zke1WG;h?{uz~{V`^&SjJVgBxi(LG*+qy^l8n}dNmgzLqunQ$L+$>B*?+hYDwX|X%^iWxyZY*iT# zBw#6$A>_F65-^sQlPr6^IbGOougGibt5HH6ClwBotLjSr)Apug!Dps2z1jEvWV-s| z41EQ)sdUm!LLEvhfE>|SB?-W49MSjPG*xuQV%LpSxoQ@`%_?ehRu)k;Mc)EL&S)$S zqh~J@Tf$#mNnVRqf^Nj6($BRj(_ke0O{FrXyf6}Gj-Idy{40stdMRAx3i@t-_rLl` z-t24ryTH?vI%u2gd)cm{hG@x;lbB}b9m-~(@;Hu&RA&Gs0k{`ZVAI(FH=IV#((fRS z@WTIuavUf60eQT=#uoVanHo6~OD-b&1_)enOTgvW_m#-=$^4Ji0~R^X*}$RUEbY9W zGdBn)SGqf)R_53LktXn?gkIlMqFq)a5&?9&$Mu}L-sVeEjL+*N_=@z;+YS{x_C;ql zop#h-U!4r4dL{3QzM_h;Cl+C;jF-u2;%(~gm4=V!FL{4da2I#q#afG@$?furHxycE|LkSb0>Wfqhi;j@SF7g@ zOc@@NWY-_bO+iP}A&s)gcBZuz_zOdcq%~kNE)8L$IcN`L$f-`N6b?)B{!3&Jf89a0 zESiHYpq5R{t(JTicF2lLWq!y>jHlx*B1lcuZF9UgOJ8Zz+;J#PjiLJ%OSM5}M`pNt zx)CVW`~BXIcK>~?38Z&7rA?_JGDu1!4!O%^0Xz1);@S}ISQNC-oby0Ki|fmkmI23inm{qv^^<>9nbe>oKy@iG z@rx*%71IL*7oK~&im{o0ambQ4-~Ix)2dk#P9h@T0{BuY72qyrZ%WcdY45Y{_(m&md zUubp_^3Up!0RQq{=x}E*uVDIA;cZ%Px%g(4uc7xJxw>FxcIV;nD zh1Mtpu#JXbNt+O`ch0@dGnMZKKsd~EPGU6z3O(Il1d1QcCYwnrwVOt^>z?oKKRX)r zBckY2cT6e|heiQ|7I1G7;AvyX{^`6+W!tM8JY#=9%l*~{^TYtKof(nPl@b8R|`;-2uaA%4ASB}#e^a|o7 z!?aUA@2F*e0v@j`xK>l<&fo7HV}EAvHhW7@TP@pR<}@#D9Q7aptRIC>YGMpCEx0`G zR_ZYGLjm4~?z>5J+ro`S@K5u%O>t@EIGiJ6^+NE|=>W;n2=~0OR$>bb9>Yt6hFYps5rHq-9;V?>3?O z+L5}0Y>vwZu>JC(aFP%|95r1hP4jPd%>IzegR62lX;LP*Pra)E6;4{Gys6Dv>>i*tgX6ivtPH{$k6l3xnPj zIkGY>|D+Fxx{Yz&#Ao#DZO*ABvrnPDPcaph^Wa|_&M4!K4X8}!0E;IIv3 z2{3A|bkwGyvTmv0XZIxcet8(=ev~VGinveH_(S%%W|zr<{(dMa3>T|+vd;dOW|gb! zNq=Yn%h|Fk{wY5D#6l%5=}Jq)cif>3ye&5!0kpn-n`ieY37}#V^pGxK#F5pHQrNk% zZu_+&ks~A`t&QFAT3kRuotR5aR;(DS-bK!$f{HgqDc_3uDx*ox@;N*jJERkP{ztjf zwvSj!EYDrNL*ng?O7e*#=D1GVNA(XXaCK;Z0Z$iu<3~fIL28x4k|pUdy+wNnEjBTs zS}?a<8m7Dt(p7pRmL1iy`Q;VVe65q$q_k!I#MdpM+4HYhhnOO|H%29?AHE>Bk`S)L3Xg|t4rs$qF**CI^g^GO? zXj(nS6Ht3>#bpg=Oe|DI`~TvAw){h94&OpQsFlApvJ`IDhD9kHdL}C#)HhK zj73oT!>TQcSB1Mgrk8bRZEec}*JJcBr>yi^pW#+H5lzWD8huAKi3g6=8NxZByw=WlK=g-zi$19z?7b+1R}X8Z+&Per5LBYMLgl z7o}E8S3J?0Qg8Bc7QTO_C!a?jP&Pl0NApLC}fekOg^TM?+sU<8Lk=`K4OI}$+!^@LfCeDMXm<^(5OK&o2)WvY!Rj~*OKr&&FV_d%*T&vP~$iZzki<8U~{ zc_J_JyDQ+UtLBpE*DJFH1aQ)*WG~@ta>|z5Zkkeb5uwr}&P`mAJPzF#{IO$T?CH1D zVtX9>!l+lRdHUp&U(zKGzVV=uv&m8$<|_+>5E-4zWP@C$4zOxIqt{hEH$ToD$=ga=<5}->4lpzF3@XXPIHPuU#_1C7NFubN+1LtNy_Hm#k zN^DfWMEnnYFs0bYgAaqso|54Knnt3VKeC#u=>oKW*9Hv z4!KFVqgAvvGZqdcVo-1(2%O+Pov60fg%b0>X&gQ5E)~UdI$nUuSmx~NHYQ>-j=r@W zhnp2j-*={1&|@EjBg{g@->Veti_T-0hX0Gtb`StX^1i~K4sN!C_)VeAF`fNMvxD#x zkI%qHEj37_I{m%dZI{0t<7xH6P=EOq3dY7$NcX>uyiaboV6WX90*!+{*q=TyKmF3@ z4PJ1LNrJ}OJ|)s40$k$k66eNB4k9f^tq(bj3hsBiFcBzhl;mB-)q z4$Xhc!Lye&z-%INBgTua>^dI)s8lEEGh@9KY4~+-W1`O-Fw3E4e`yc?|2)Ir=>n63 zKqSqYRu8h6O1kf?9{zcg>w`ebR(BOFdq((viU=DH8bW)Os_+**iLFiX!>)OL#sP6* zRR4J>E*d_3Ty~EnhtfO<3t7Xzs?(viK-!*d;(-pGQPCODpnQ?t8#K^lfP_y|%UPTa z0ir+uR=B>=HJYn|c(Hb4u9;*c?iDfBl{ggTE%)7{4b@}!PSzS!IWwII!gb1nq+z?# z+nGtSIoygZU*ziT*7tWQ>In(U;TeTYdahuQyeyH5UUe1?O zk0`4cmMBI!Gj$(bx-twciBp2KiPmp2R`{pcxNo3o613ne8S06ivd{sfLI?S%1SaiC zrKpkIjyfkf@&25{`~Ht~1JBs`%DtP*KarktIb|$!Ej6jTbGbB@jk$_jafGR_yIs-|`K3I|n9G()M%2%sc z!OM7!z``<5@fXEA9xfV}PGP`Rer-ooBME55A5avXmNM!#2GS|yJcX*Hco6SpVrQs( zO;nx^{Ce;6;p^sR)HG6ySLSM!aNN((_ZK)!AuI0+^fNoCYj?h^Ws(pukTjq#@j}V?U}KdYXHs$~B*83$NWAtsJdnJq_eG zgzKKe38kyUMWT~D?O36NMvys{l7$g*_x~Gb@o@sBqnr*vdTg2Js zZEOsFg*j&cax+4~3*Un{O=PH}QrcT0Zx0&jBxoqX6Obk>f)9n7-1jKH@zfjq_Qwdu z*!TZ?GR7oN+5GZG-H;l%7`wYlFiap;W_WAd%LTs&FOZQjGk|A&q3NZ*z5r86!6k*= z&bVy^V{H{izRzZcrJN7NHT^BYB7o5{#x=x!{=MX#j_|LLi9L*1b~zTK!Ow3}>h=OY zH?|HWaB@Rx<{@nF#S!X=*+vrt*Sxm^_V4p7kzTR;6y2rPeO@q+ul7Xe&p7)monYFe z<}H3 z;aJS+dbPc%kAeVZpV(;LvD$Qb$FeBJ{!R_Tiv}sV{6RvxswQU%f9kwydnQNfQ{BjX z-ZUqXmR1EW+|=x&w$0NJHt|voqPxSMXvhir{=yvk*fU~@U~oG0&cT6U7rioI!$U*U zB9ERgMk_e|-T)kAfq}W@Uv;!8{>ai6$7)L&Ny>!@7-9M{JTN9&0;p)3q9t4#<4%R0 zP#>=L{ih1TseIkJ)#x+`OBP^*ese4hV314@?F>sP_B{V4RjzM14HGN(yh`2-h>a?7 z2+$1Q&i2t#s&&H}$zcCv8Q6`s%WIrT#h+&RXQ-COWbIr#FH*^@wwzO8h2PKq`XX_y`f&`$|~9=aU69PHI43A3aibD7?+Aifl++u~G9ILw8}l*A{DY zKs&oh)~jD2>_z?BJTs=?Zq3lVtycN3viVP)%-`F2@=CwVtnbh+r@v?d_c+3YheNuO z@1Q_E2?^>k?Urcnkxv~;eyw!6Qjb1%_07saVtrx%%(Av43xC@_s;~07<1*ehlA-bN ztupPu>VR}2AY%4Zii+h8`^;lL*o z%i8Q&-b3;r@{c*yJ>R+vQOe{yKmN)Cg?^~RAWwN%2%$YSN)0jz!!=OP~>u^s%)*|EmN2b~vqCaUUXklb~-A zaIKP|6fStIKKHMbD5**fZpCAf@=9wF5c&3y$z$w~GDRKX`!(oI1{j31w+8!>&G`lf zn9~OWD4#Hx`PVCV0S~P1SrBY+)Q%AhJy@V{tZxBJTyMxTJ(~CxL+}A@YrZLpAov8G z#Qoqn*O*b?B9+vV+oq?2|CWb$B28Oy@0O6R48d8ipD%&oe6MchX7!PMd>ZBBjg{C? zf)7JltI3N}VmXoi?XH^VlaRQSfe_U@2p|y%KQg?e^%3%T5}&O4grZx2HCT~0O*S4H z*rJ&2Squ0$*{JqG9hVu_f_?fRR}y)X`EffI7 zqbtnW{T9D!*>tdbo0sX%u;Ay^6P}yf1svE_uTNd2SQ-$fv?V;_vYDP*^XI0auD@CL z#j17iTr4CptCp{l(JS!mlZVtF2s#EB60QvryLCQPv8flfCh@B*msVX(_SvEU(FL}b zdMe}_;7Em=BA$CyaGX$x*24DF+%f-0D`DmRqm_nVFlCx0X~Ey5d1pE(xhR2ZH~DeF z+VPG*Y#B|SXh@vdf<7wgnn2X_V_ORShQ4a;-%w=ErEI;D{r8IC4^+ya*vXCQ$0SUr zLnfaGQmmKH1(o~eLRgqHcejNmla<4HXYGH8Bs90_^S#`U>OwROOQ_7WQmN=^afk-9 zb`Fr76R@w026O9iFH5UM*K%={>S3q|4Mx7cKl?57MN$v&%i?o+pk!7<28A`<*BY;x zYV4doCYweu-zNI}xOb4C1J}18g&mFLw?k8^YZc!+oz6%2WC;>|pwnp}O=Qq4UA3Gu zp_*V=wK0+-Eme{97pPXV>Ur`d5cY_CRJq_anQ$KR*FS|#>vJuq7UuBK}>8-Dkf_L z2T5`=ik`xt(XXdJ_uK4{*?f!p%w2+ssFA-w=D>h$x>K^yB)qf5GX~0!@(pB^@Gh?l zCerb8`mMO6-s<2uVuu3wQ9tRZm$sIznZ--HG!8H=#_8`i#27ZCKoqWuFMXslZCkQv zlpF>O3^O_#ZY)aFIBO~SosBTU)!98ClJkE&XH1z=L5vS3cFR*2-l#K|mrUh^5yvuu zE7N&>F-~=I%tN{sHu=$Bk98w_On`xpK6EtbR!H+fAxgy(l1*3jCi!A;!3v9=sNLi2 zRHtFd%{0FE4)BI^1C9HKe|iO)kPYpY|2(BK@m}bSC8HNlR#T-qho8_Fu?n6N^Mn6I>> z52tji5zLGMGndmvPzxIEUVpKkE zb)orGYAMZaONegPa`Nhn{C>mv;HqqkQJJx=LJi{|itym-87Qvqh=OCh4MU5E zOo8fM^~Il|SFVp#;4xC8gRUeqz2!78!tu9g(}K~%y4G?dE&H<|tPPS!h3(U8f?o+( zD2bY~>)eqC>On;^u?N2GSxraO-D@4Ye{r9+T0i}G&|`K^bwW^~nYcqggt`+iF=5aT zz?na@XwVY^*n-GoVn8W=KB_+FsjjRgmLn{0sRjmEn?ma9LdI&pt#XiObz1nm0vjAW2aHOhJY%Z zk4^qP8!7&F&t!dg76CiBUoWT4czf8f(3dDW!R6=uR)S7-nwr(cO*$^K`UM-3_X|vK#JlJp zyW|=$Py9ago^w`_!7^OCqIRCI?;lsdS$?0{z5*FVW9=n>Avnv^P5eZa>;6#W1mU_t~p#p z9mpTw5j=5m(m(fGL|R@V2!R(;r2!1rN1|(QTBNySA(btmQB#bes!euI)*Oa1$_({H z93NwmTiysp3zg*d1R8s=`>fgre)JU2Oi!tCR<~7UHpFt41VDUEU>$0u@`OOl$*I6J z4QwI960R?T1-wTl$`4cTWlKp6y52oc@U616VIf~h_^`!a#)pVTA1&to(Qflb`BAAk znuyTT*YweyW&i*hQA<_JF$<{475yJE{F@&1&X6>`+tb;Us4@2+-?otu{KZ~sD*{nJ*8@&N=C{* zkGRS9ODBby4G%dE&%U!@El0-tO^xk>1Gjr~m*1V(!fTv1j1~oj!d$ zGtCSOscuLV3gX4Iw4Vr^Sj7)mO?2azKo;CnTI{#VEKfg&w?bBbrWU<#A=o3HpevFlp90;~gY&RDa@_YRQFt+lYw&`2XitB#)E z+c9{)EqSJ9yF&o9Vk|tOrrDxS7hB(kgbJs8oovR_Z#k3tC2l}i8aORYDqAh^A5YVu~}E5-hx z${kBuj7F9C<_7iSvtp_LJ=3bMGDd2nv#-j0wApkmL95riL2oHqI;tDi1v1)Km*1&7 zDCZp(i8YSnqNpUt!M@WW?k)bcZpd{*SW(ved0+Q#Mg(dFff;uJ>Le|fysJL=fxT<( zE3|$%;MGS|(TpWdCn*{_Y*2pXFP#b`^!64bC19ZNuIofc0X$*j@$fUUa-nS0)-QFo ztN@wh_5;cfaz+xPrxxfM-i+YXda}TvlUgU<{>@7_Ny-bIVx4vLQ9ksrcxbl6R{j_A zYq4*Iu|#`U!cc8@^n2t)6QgcO;lm;fp1MCI!CUObR3hAyw0b<_?391WRZT2hVHN$nCE;Im6kya7oktKhp_|XT zZ@*{`zFe=AbAZ*A7@d-20D+@Gjm`8;F_NhQ={O_rgo=TCsy`(_SuzMD zJ?Py$y?;u5y1&rt8R{KKqjjyXNBE}5KI&Hr5QqN5bbFdamx?1vosKCOr%8lyXj}~z zdgCuW$^2e0+-?GW(x?oqG8NxuWmo9p2H+q@D?WGl52%C$&c_$Mj(5D_ThnPA?c)6| zTD+pT@#XTuN}*5HJ@EPizP;WCEIXv8}baccI|}eGp6o+<%$=UDI%v zTujZ;#ZvV4`NIYR8NX^EkHd+xN(gMdQh=puzsF8qY6g(Oogt&%Rz7T=uSU>m*77lh zYlybzCTgx8Tu3MO!A(DWy}+0xL1g_C4mXJ!@P;0TYs6Fn-9wqf{*vm`y=crZ08Ooi z8uR!(vnS~)5>8;}kq|vofPoQfh8zaPO_*%vJi#5;_Tv&2z6m+akg1&08N3`3 zLn(+cyx_B<>30R=ysoOvO|1t7#ZxtF4uyl6k}ZLZHQEB0jQH=?BDU*oF#zwl>7%Z8 z#|faKJ>1H^bOiBhc~^)G@-h;krBMQu$~8q>32WI4X5KT!Ges<^5K6x%i1kkik) zSB+o%zXYM`^0GjlP!vgI;?=J&B2_k9Tz0 zeHzA-9;Y{0rxo<)6X@68bx2SK6RiNWGtfvgZvEE?WeCV|211(W^1+=S4m?nghBE^J zO@=CyhGI}p^fC&ncaL?UGY_MFJhg~Ov`|dXC%|~}Fr-uv`VxaX$Edd~;k82#51knK zW?nz5%cgJD`kWlYLp}|~WE0J^%o%6%^YyRZzJB8e_ZIx!6%G498y#Hk69bjrUlRXH zyVZTpEYOxC$-Sr|tUtKtr}Fsj%qiqu8%>Wvs2gGBaUze`&f5s31^?J_EV|!LV4a#! zc!+a19D}K5^W3TIU&q36|Kre442j&TSL1Js0^D9V1*OnPqQ?Y(8TcRb%v4gS+-b~4 zXYqx7Yd9olL^0Kv%M|hn-fYZEZrZ>~EM=fu7Ro3xPZse)%FZ4F@1lSDKNcW-zrWcB z2E+kd)vsgLn#(@4Qxao7s<7Xmue?uJL{b%z)b(@Id=GRvwQG@9;0v;FEVv=WW)t;j zS16`^3&y^Py?at51%8Cv)0q5DIBZKNN6kn=`ES{WW{cCj|DN@^EMzmapEOQA!Bftc z(?gKWy#b~B^Pu!pi76z~A_!FfxA9;Rtv^HCeSmMVZ2kqG&5DgCCav>g7>pOxygupI z6FAxP5n}wjOcyIGT;>$})mTw^zeOhHkK2JGnUvH}lC0G1HWHf$^og4~3-lmO&XC{FezSk-oog8hpbKTL=IDhP zk75!u)UV8vY+ZXB=rzqUF9o5la0kAiMTd8tR~@Idt@9jw0@DeC^}r+vzYYX-39}8N zb1%8wg3Q(-0=ZYg(cxJvB_#fmb~-G75LN%;X47;IzWXllDc5OG8DG!}F86cvL(3=; zyYmh7M~n@i1H6b1n~Z)24Oij!Wxi-IX^?){8{MqdJ8jH>-c`Q4A)`({^V99H8J6O( zp20VkOX@o0wq^6!6gXPzz?&T@)tf$Wrqd{7A{BIxWC!5AWciN@e^F z(+jN0dU&=WyHq6Jg}g|~*@J46Uy~FWykij{u+hQNQ0lT@ zuK*-RIwiGylvv36B@d2H5u2*bb# z=LSiBP3LpMnJrb7Y%|$~Hk~q}lktQSt^LGLt_~XSwd8SpDJQ16B3L0a436L>t@YG5@-)+P=<6WvPn-mM$e-9pYLX}Fz5hxS z?U~6e2;5{Mc6`u*mb4*OX2N`ySaJwvOXhWFNaZ%~%fkbPXogKF=9DL73YLCAsy01D zS2fA@ouX#?^)=7uv>mD@e8HWpm(YvJ%(T2YwsR<8>_CW#)oA2By5-5}OO!g8Wx}5A9 zQdhGZ&pD;*{UtKzP|XsG5P;}6e)+*~`S`h&M8=oBQYs!9=N)xeLyHQ3lsN+6pcvaw z(PV`rcQP2LGQwANY$@_jCYs9;QK`I35h+3M{yq;lls+sa^RI2s5;<^)a8 zMvn^Om+eNq@FE>?1I^o_i#6+*BOTMIIZ)4=zmp5TjAp6(eK7IE#FwHjbkyO!({CA_>@Us?m36#RMj2154t z?!#z~984+*(c6LsDLFPdaauQd;$vsvZ>FZys<^Je3+AuB#LJ>;Pgv)L7;;&yZ##$i64BN5a>_oeY2a#CfqXV7qoBQkwUg{wEl z#_b)SCz(!Hod=#f^XZfcl(+Q@O5-O>FqN(M@)K#3>v7Xv``-bQ9Qx!5N4*aGw3Blt z=Z&)(swVdn$YW)Jr2OT#h30!QRnA1~ZLen?N+u@M_nLg7*TK#kt^IEcWD_>BKFNwd zavd*tT|eIrz!e6G#DQE{*Ed>_@_VbTMrAq5=iiL-)dwGX)4t14ir0uO*7`+glin71 zMF6o&wmS(#Tx<8~uc95$Gcx-<{>$-{CB~u2;g~_8>6iZU!>A{5eitxl+!qG~{tkmf zom_pA{tbS|X`3n$<{FY6b^@nD|6BFTVNaV%wl3 z$F@eqikt!w@zqd&P~4QvpflS$z3pE3vQMs&;>O1XC1L%w@0JA-*j%c%g@SZ${dQ$lOhC{z8hZB zDF?@a!akd$gQX61Qv*-|@7G8|FQ>)T8_D-TRF(>{$foCoR;R``4Z!ukFV>oeiLq(U zlcDA3_?vFWhx6RSym1YNYxN56{0TG}U&HHqTO~sAMB!In|3lve0r%p3!mG!sc`**< zbEHFeCmlb8h>*(hht+_QNC+0hgiE3i8axm?NdCD@Mu{`1c)-px>dC(fOIO4(5*0&I z0-wJ83kKF!87r3*8SVhrO%$N80eY_|asC#tY6U;LX2}dJ${}TCE_eyIDx{c@dcgW zg6nP&uWB}D@c?ktYhD5A?k+CN=V?QKrdT~A%dvAXu7lfRz|Jj`KcFL-23E}v|AReo zDwV_Ogi4kz$^6(SNfu*h01W0n5x;n80TVmo~A1ax0}pCgKwO)xDu zPlw-#LYnr72@2Jraa*_a2*KAG_ui*HuYYL@(8tXYqqcXHGAc~WZ0egKRPRP*2Xuzy9Tk0JG_d?uaXn-#i z;WO_OIg){1GVJHtsknG?Y%0Fmy&XffSztA7hA*Q7wPSdI_JaSbzS8c5Wb=pz9Ac#( zIGx&Q^!ypb(NHkx7R zLkWC3d}NRyRFBZwyRm{xIxqk1fWlEFL_L_%Pq^8@E0{V757hJL6ZPj%mf_DaPTAbo zwzi+5A+LPNLwspt$D$>x2%*WtHhTj@vwt78|2#mp3!6lBB?pHHVzeg8u|0Hvp)oVp zzQ&`u3I=X+Eix|?QK&Rej9lD<9XRLFA|!0UV4~TH#8!;;kR?dWq2#B)vNg4@gGwco3k~$~7GMTL$SS=ID~L z^PL0mw1&_hTz_I(1<$r`2n0G@{X(ws=v82YWYzTv-xO-0bn<9Sl?f;<<5ZmW-J(C< zgKTwHHn+&p{1R-wOTmYLKiB@5xy`69p&?H;HNc>M=nXue3pA>pcfrX6nP~mZ$0PQ~eXCe}s<-g6 z9+-tf7(n9#zd+yWq~uwbcSp-5d;BEpNI<5vzVzNhjwMq_OKx*#nfzYUEfrSIFLb!o z=DrToi+(i6vNlGS43Rtl^mtv#VN?)}lQQv@Ogl5T5Bdq@3N$tIXJIYn)ANtB*U`zW zc2By~hx<#}>V49~_2_y&cPg~j@oj(;+W}YaPsDu$)yFl;fw*66^XTMgZ?O$VhLqn> zQ|XCp_-1$2{i@Bn%7oA?TMfUk_v_Xrz)CU}pEdt^6kzZTBP(5&4un9WYoe@!7*)(jryJOSc62hiKI;4>0TB zR$|kg(jlSJB}k)`w3LFhG<-MD^S$G|f6h2(++*;ALEL+-HRHPGHRt+vJ*jJ-7?RW0 zxy!N?zmFsi6)Ts7FbLPDT2p~oN7N)(zc(3=szF&vS*Kb-NdH+bHBVriD>{*je|N)xshvO6rRH}R>}+g zBLmc06|HaOaRgAmT)qcE1WpF0dPJd!V;&haL0I2W(182VZO@3tytiZUTMnZ5L#M`fNjPCh+PD zurfj$1~iV%UE{iD$02~PikeqgvqIK+K)e4yuU_}rQQBQvfSlZUL9zJyN{WEw0d2Sf zS7l-N647))8Y;mFy_71%Lri@hV{Wk;PM?+Zd|0rzeMLfAE&3P6iCfdoUc{+Ph_RdG z*7xOuip_J{loSRf5CJp0aia`Y!@O<_jPtM}!@Fwk7Zq@AR3VJMzxfmYtPHzXZwrit z(lnWHO#^p@m!qfdmn4d!;^956x1Ti7!n|hnYdsCLnOHi4>L9Gd z>H`e`2=_mOWJOPovMVD&Ek^`>`;v^ulxub8#a7Q@&nCGE2C=VpiIY~E)v+9SAHDjU zFiWobJ_#yGUB^*UDzAJhmSKq@W@X`yQbs?##5>(BtD1Jsb&`A%M?Lo49?-8A!j&9sIEP%Z*;mTaj(;xnVbu1fUgSa z^=oDO$4k*S^M}?OQ{$0!`UgtVVdlqv`wCpT&SzNFb?fzKB=UV9WtOMvHM<8y%Qw>j zK41?LEN&hSvM=)zEVN?bqo@)K$+8b;;=;`muns?3)~b=(;hLIE;j`Sh|AkV}b-9HP z;mV8d7ICoS|N2dBcZWrwY$kiOu2}|PDCye5ks{}{g2hzXXJ?4Y78#0()66dh3RDO- zPF|2ny~6myYcxabcaZFNKz%WANnfYmhB1c%X7ws0Sng5|+VEH(i~yvQdz5$iKjl^x z?B4o@2Pus*(FNuWmkQ-KvF&2~Nc@$lhl-2@kD^hgSIO`DonPm8RDr?nwQ;cFOU15@$q>1SpODw?Xyo_! zj3V<7BAY#(b(hL_7v-}fIV4=x|!9_5fbi&Em#$toPVNn6Rj zl{o!1k%%^ySs481W2I4@6kWmQk>|LidImS=noK7i*ioSohU^;h6>uPLJFd})pd+T0 zK22e$PILcdv6CJ-!@_^RuEHcTG^!7C1)F}SdeKLM%*x#Rwljz$J)sl}pLs}?%62#M zFmzT^H5SMmdW*cZ8t?a{#ig|E^0=uoP-#dHw9&cun4t8b1lkMY^>l6pvdnL^PSD47 z8cb*q`n4r-V*?#({ymR7ET6kPL6egmUnlF#){ukCUCHR>L60oE9NBPC$Iyt1ZKa|O*pAL=8Tb8pue={q3K8Dn5~gRk{$DaQ zj98M#Ml#v>CM-K+bil)#cc3?jw%1=pE>joUE-cNygy4E-a`%ikXL|hkh%e#O+^2)# zV8Phr=I!lb+D)-PQ>J*-d*A5y6-&R~1Q$gGFH)mkhWw}dvmwnqIFIDVSN*5o*==8i zGqELYz&}ypxhxOrGOZTdO!9iH20y#_Gp7_`sIhe*$}WaT7p(odELy)t;7vL?tU>2) zb|#gKR8v2#s8X11Ow#o%I2!L)_pI4g_9env;Hon2J{%-y(80axohUi60rb)XeAEyL zEd0D93>0fB0Aii`zLcaIBmIi72pCNPornQ~BCw-whv%Es3oJ}8lbqoE=C+|RBf3P; z17$)EzWMqy&=*o>$m4;N*fV#IPt)m~Mcv`14t7>neF+>R z2oCT=wg~oQuw_q6h=z;t7us=3;f<29Z!&@qh}<$S&2`jTlWQOjohL?*39=YBPjPZ45n3+pGp(*QWxr~_`XYZ+jui=YY{;IP zx$+gNrJ2;1#SJhDHvts*d6u}H$s1E|fS??GZTLh`4p-0QY35N~O^~%scJ}mJvxKjH zxpQ?{j3lc?Y>T)q4?c!yf=!= zBOiCtcRq~5Z-qRop*^U|w{hM(&=3D(5%@MhanQuoTF@?;(>&f=cpc`79kBj4{i$rH z(RGgow#}J<9~6YX>G4zhc0^ys_EXB6aL7eZqY5O#6m@LB7aUFV>3SzeA>^QlSM2 z{>*I`yRdY2_$q?`i?3fz|Kyy@sm!^I) zy{P6$pcx!um_o;AT&sC2Ivjx!H8Sk?Z|S8tiMb|x`y(!Q{l7=0|KMt^P9+GW0r+>8 zH>|EHx8pxyQ+$Nf%nN?C;m&qvh4=9O01)_d0cww1I+>%OmLYQ}-U7aBbO_BHxLC`| zdfV-dpT9>z>cwkQB(5REuxcnUn@RrUwVV}_k0dX&)d z)%O-uWV{pSvP2=N%jT&NxOS#|eSuY92FA|B7rq7uQtw&4%*={g=?>;}`CAZTqg(GaKwr1VV5VW5b4%5=|TI zXVGanbUp;&K4clJxNrEFlLVO^0ZfU~e1EImUShVD8qedTI z#g9s?Ew54SjE%ot909md4;nON?7ki(WEd(kmXa4SYz#t%$YOREh9H4;r}Or2SqVO> zQ~%OhIolTM`PAb<0X6y{n+o##@Wo#Zg+hsu;CaI#2li|IHbVWvktBmaDgRm2SD5VQ zuk~P$e+N-%^%QIs6hhvwD~QdS6wce~6EZd`mvL~6GVqSQ%aIw&Stt+vl++IkyY&31 zG8HDHRind#E}&)%vD%m{4dI?4Bl@GU@>$ar0xOfKbaumwmsd$-m7elFM>pUj+x@VJ za{Cg$UpQIX(MAy4^>+C~$Hm-yE-F~2gOxhVV|JIc=Jo=9*}(-7NRvKfTRxt&cUkPf zUCt_(4=z`d+h*iSfY;d43u`O(@-3R((!HA``+akrK@E(`u)Vm8_ z<=k{5JT|BAC!kXN*b@JKM|G_PGGeP|`O_UEm7tF?Vqg-a5HMX#hcW|{ad9DMJTd*= zRMi{NG;Tv`K{gE~pb948)7JMbRu6$`V>&Q@q%JEf{VBUD&ahux)hp+_#LkZLDR|KGkBv-<3HCq&zw$E%Sd& zRq8Y05hVyxvE90|SSd8|!Tw>$Ng%bzm(Qfy3Lva%?_re-Ol1N-xn78U#*u*$dt9e6 zdIi1m=oI6@41HN?kr)OiX_f-%Zv- z??)B@s37bWUd>SF0>x8iBv#uo z<7cyvU1K6j)vkCx^B-(v-|Jv+8FAbK<9Xlr^PV^z>{9ZdD@(bVV zf3yI;I8u{&z31Hr*TZQ$9{xx2c%&ojorS}NUF{nz>am3t4=1j_ahu6sO^@0c4V)8> z1em<(7cgwyKrDmuqY5#>{~AY$0v}glu#%{g7L;(1E#2bKTD3bqYoUMqqs*WiGHVjW zSPMn*)?sFaGqs;`Xrw-FMd)RJ%PSUIU=*jGq=k7nr^L@-kAi;GX0>vo=C_KU&kXIV zm=OdutcVnIb%=brc%1jeB#Qoi??cQNDYYU1D?4gS`R-%n1$I$szS&`-KVZ>%-Qey} ze-Vcp+Ubo7o$5YHUs9HO+bT%vDp^Jbft}MxXv%z3m(o>>7>l#^l2>XKe;yn4k*;f? zM3VgiHtP1SuxwmvM^Snns{QJ>vvi~`NBHW^&|*1bT1@?{^viCm$#lqhWjdO)Gv$M) zOB@0HzgY28G7=6(QBrI0Ehd?GD@^`rk~iPgy{XQF&= zuFwCjSl7UJ4FGcJukLC%Cq#acw_91M@kmXG%tF7#9OK{S@5Dc!?@F3Td*Q@i1spW* zP~s;oWtf6*aDaBTlBN~LE^%#?x%^kQQFD6*bvhqyfNJ1HnwZuy?J@3oR9H%gh1wh;0?v!F14a|%yqfRv8h>fm^o*wDp!}+uHT`6yW8nC%k zxZz60hW7|Y?o&Y-Rd|J=+p5n+xb-Sfu;toqsR)-==4}GkUk78~NCC<}>T6UJOBSRT zga?)RLeU3?OE0{q-gL*Ga2+8LIkfmTZ0lgzeuplV7-Vg5;BgX2iJdq~yIp-cefv%X zS&8ZV!>ra@2d5J#61Zj0#r%(2IOrUH|HE$uo1&NWav`>|2^K1G zsniJJ0FGGZShk8w#>~GQ-5dJ%J-eP+pJdC`7 zgNZFQ5m00W3$O7hdFByn(pf{pjDVQ)aOJN2=37lF7Y5G>7){5l`iHd;8+O*CmdUDW zGn75&97uXzn1;U0`mw>)`2%kB(`YxHdX|L%OJJ3hADvMgV6tSXv&xc!eH@Y{J1^k5}iP9*YfiMvFcX<-Y zab0Tm@uIBnaNrUlF<$vd%35o|ii-+#G5BK7GFp{!AQ*o=LmPMrz1e&u3R{N;;}t|9n8Klz#U zz~L*^a}-NqAT`|QxdYPlR^jc0=U-7g<osojy85jTm3YE`)vV6>6kxWi(=009a zrUMw6eY_bVC~(iYWS2nEU<3Ob!^uJogP$If8%p` z+9@=kq+18fjq*}?uj%JF^VTIC8%*(#<%%evUq94C?FxqVTy|mN`J-WN;Ddk@j<9#o zW}w4g5&f2tL(`Em$j*k7&~(PhqCd_29*IVI1hGg!AxOcf$Qof=%PRk!xR|m31mFk& zDhO$uUqFhOutpchAPMwHozO4|yCS+tr9qNn`K31{X=u&*ziWOLtex5aUp2pX1?mun z^OP^|Ub4TTj3sniJ;DFram*Fm2f#({Tw${7vz_>9%yf&N6KW6(u?@WHO}QP95fF;X z*r@D~i0Cep|LtFz8yu>uWry0F)}Di}v(}5BxYU&-*xcQvxhy+^R-Dc3?YO+R)1=84 zJ6~hWdm7n3k|l=}y?cLQBGQ{%B{}rWsW4}6N5{69)L$qga{8c(QCyaecH?^# z*&BSzwM)!0F>23X8f_)qgW4TNfWWgHLu(FB{>o?-3Bq?=La|8xBByOVyiLR3$@%V! zKm_(7;-i9M+89_gZT@_LHb`s|PCO~#?}5q};Xb@q=YH5lO^?VFnLmdJ&2)ui&oYWvO2*Q)A-%f)6?Vi_&5v}bZ&6#b;;!za_w zimnm)k19x5v^>)zyG&f@NCK4p$LLAldC6DomLp&J{WBlRGjV-aqUp7+P4DBtAbTpe zC7XVGUzBQ( z6cO`)QoAbBG`Cb%4U-UUAv8X_uOe!3RlxLJBtHV`!iqcDkf2N&?l0?-G}CMT+i{K( z3q~a+j3M();nl>CvOaQ&_lY#KoEUi z4!jBK+7EjMZA`Umg3RkoJ#S|i+7B(6t-`A(5_W?$df<+RUtuCQm$WkLEL0j;#BxUd zVj`}O7yvae9ERS)QNPwn5p-|yYE4#B9umgQEJREvgMRE7)%%fYy1^~@{O?j;=6miG zK03`@KcEv-hJ42T*(a@%?Pm1?8R_~K?NToaJUrEd6RJ-IrasP-YR?1uee0Rr2zE*U~&;}(y{k70)QG;V2@bJLj_I^*Mf$y`KR(?XL z1&lTsY;5gv64+^2I*2d4ugpMz9+IW}!&)6E8EbGXMe^9DCybFm6@x)UY9yP3N+R3X z%irp2$ZtJj1v5=R{K?a%IqLMh@tk3N^y6!iZ@(?oZA`FAW32=yaRF)VyXFI%QRBfh zSug;H9w`5e;%q~TY#3*$a{-zHvVv+bo(Mw?2chECMAiMuyp{Q!K;?i3fyuEEa~o1@ ze`tH9^)1J#tP{ocuanKB==DL0$O9@;NYLX@Qh`-iFA^U1uk|n_c)?I_pH`1tgM2u? z(~JOSsv$ZHvs^C>O;W5!6_r5y`RG~r zf#d38U*sAZXplp;JA4`jlu_odo29Cs&;+@|ZL4^p#{CtA9>3dwBe4j_fXe31Htb$A zX>aLkoD%=S*5(T>zsIsf{?Y08!zH@cSp1AAc%(JbpTaMKBWXnIPlI?A8@JZZJ}d2|3RbsoPHu=MEkqBv4wbzprl<{)<&zn(q(Hn+nA&#>m6t75X+Tw6B}V*Oi0)J4kApaR}JNCvqG2rCS~k)tANQ zu;~lecYa5&SjQci?zJ!sk?r^a)9>T2!=_4i9@u~xGYA@Gn{a;r*p&+$_pX{W(%}~j zxBpiWvihOXT3K9Qdmf^S4`U=OO+$}UZa7?g?f~c)U*{LojQh*=ppIV|wA_5cAhuS} zBM}Cx22GpeLW)%PDakw5Z4-KRT6&n=@ufO~(I=10*RAiBM(5;;-Wed!!#L)VArmas zQUhKTDR;LMYL)LZg2s64S!;Iac$nrJ10FeFhpMCu_&b< zl`K%WbtG)k+9Bj%@pB%GlavCSe6kmo|ATxr6!Ptl=<~9G@5aA+de_ucl5!m}X5-Rr zdQdY<>O92%#>tom(sTZ%I%3F1YIQC*@TVN)jSg-PIFm5sGr~f~4|%Acs(mlK1WX{A zp_|xRjkqNjvu~F|?%n-Mb50>cAS%UcB`djh_LIWJxI>e68ca?+5cW#Z$7LR=LTZKI z>6_U39=Cd=c7=Jv!q&C2ULO2Yn}7+^JgjRGv1R5wG>`t*Mzmt?eT3PmnRS373)${K0E_kezOD` z7)j-menxiqJ#)fLA+RybKu*y;1gme;Zz#>g(95EtT`}z4tF!i8QPZtSZG`}32kuic z-elxKRrqw;AC3VBHw@CVrrZL>Rcu6IdCm?QG$ox`Ke~3I0lk-j0U>CI?*6yq2wR`O ze$4VcYhP7Fw04opTUvhYHUqt%$5P2bZ%c+(eC<#6lam%y=u--N~Iuw6b&k6^SW4sUx# zm4DO-$f%*r>TRZ5q16NOsmz3B*ND|~2cR|jt6cxm8YBDM#wV8yfyCI-KDZK|L*vLs zuBxZ@aB+-C%WtG`99vY1J?$Y(@+tX@nIie12Ou(LNwTCDD3Z_}h|;DiqIpH5l2)EZ z=-(IVq=$QH5sDqZJxzVoMqeHE# z@T$pSsJ=aL^uwqV4TuwY%YjIwtn|wv)gVZWd{p6OhyarE$3{HdpnlQCf^b>LI2>Q9 zwI{_1ha7T`#@mC4L?v(b;t7XBGs95H_d(LK2sil~oU9Ieg@6pdl#D;D4RfgFIdTCY zGf~(dmK3+}aC_vC^q02IAg^&a9aM0myC56Xqz{^b(tmmSK@Jk&`WE8)6azmYV%6gv(~ z(Zym{3u{4R9nX*Tjn6#8ef+T^X)Wrio1n8Zkrj^=cE&%$v>6V{9a$U=<;_-CG)uVYe8$VB9R!n%>XD+9sf|j`IAEz zrbhp+E_~7^YY0|tZ|#OPHsphdRYf((W1Gkf1e~I$pyL=y=QD8jn=Cl#LAzG~+XUV6 zH<9b8%GGv^YN3YBVtB0Zj4(Ztau=b)I!t7{MSK@Ifw^l$ck3( z=|v;oPl4fvQ=>|%!c(y!0+TaVxrWPUyBy0vEcT?lVq8||FjIQ zKVD#C4z|#^i3J?;cl!W~7olVsf@ktf>ZzPmBoGDz-oPfPi8RDIh-ij7qv;%-0-AC#LGtov$FI1+`Q(0h zaw`bKcS+$7^ z#%uC|1YNByD0sP|_G@1gKjzPV9>JvamwhL#svVTq^5P+yz~Q!3xX43TJ{Qzn{)!H4 z__HMlx7tudaj!!Az}s(NH1YMuS6#xr+`9X~t@3##i(vVt#O06c?xf%4(#dBU*{Pb^ zt&p7r%)WTipcwsD%n%6;{H~WxK?|vh8yq5Z+#lu7FcOPM1w{Ir1y#q>XG-ItM@`I)ROeY z3C97~-USV*s{(7aC(E9MXZW#P+*w!{h{Ns0ARLaN+x28Q*RN~11of$)R-K?~%6*nx z8C8fiBL-GuA|r+)%H3u!3orfNas8;zk zV&Cu`ZM7cJ)bZ)G>kIQ*8P}N6;MudEGJMq0M|NTxNP-q7UL0tsGHcX zkOrD1`99Mk&4;AaTUDjE#hS;=iiPaOOIX5Ep;saiLE$AHjcjmn4>q zFF4Ckk;b1!2Gp#U{?=5e&JPN24BV~TTdrlBcP)Gfny`>hRp3wGIwTwK|I_9!M!>Kq z2kHGBjO|h=gn_HXstPclt(g-nF>*Q;jK0GBtKfM|{Jl0{xu=dUz$Ij~s_6i1`@e@6 z56nGW>?D;9nqCV%PSn*GN>{#1ek`ph_^Tqaxl`5Z=qel)52Jic!B-H;b&51{9s}nTTfyF=mjJ0coQ_6Pi1)vVI9uPvS442QS>F{@!BQ4JZw z{)UEj;GdEiq<3(Z%1@nUyXbyK80a4&zL%r&Yg(v6)6Ir43TgYAJKeq0@hRGT-8nDl z08M@udD_4>OW1yUjvEgR8ciDZzuKhvblKZ?R`rcd-P$^UBDH1{$%&=Zp<9b)fzsSW zUy;{Fkz6#TH-lg|s~S(M>a4q2x6E>pHJ1^%8)c$qPPpotc`M2L>YQX=MkZAC65g1K zl&oOzSw*)QfAA*|21=d|bK(cy9d4<@-6v2yNv53~#n%g0rWxw{+)w_IKW?X_VmuWU zZxuCUD5r4Jf8hDHOl0V`tZcN(#tt}CXv`l=vC~hD650S%!R3ub-=RM<5CTF$*41WU z*Tw^&fsQ`ax$8B-31lNf;z z1OMpA@g#JMLI0z%Z2-tvRS+gmsEDotgz}w2IHzF>CKCvvixyq#2=zd$)5k+Ahkw9z zDOFYWGG8naJZ@#n^*Us7eR?kCDmOzD!=Mti#pIQckivb-pmA^~oLb^QJD4hah6IWz5-cLuewV{!Ic5h80p1XFs1 z!0(8%Ql29U&m|f)LQrG*nlvO_e>lzZf~{~e;wDpIyw0lCl zJPPT1MoP&Rd39NP*bRc#H{;FVsRr;Ey|C10QOtcn+k};EN`w^#nU!riTcw6Z4l3A7 zC>!4DQ1Yt^`Q+jQVu!#|0=9Wuolu~Q{cV(ZGc$!XRiA{TYreWgLvEiczK+3zl#n7a zY@M(Dx(DCEO{RByneUelxjqNQzpL%*_c(NlT?1j5N~gQe|J9%$ ze6j390L)<%XSVE10G!<#ozqLD5CM#-f|{8DKidY3_%9Lwz^{=1Or2x0w!7rv*Fz(Y zg;HFT(p!AEO9P=_&STm;urwqIq2%?y(z`X8zM#HgE6*zAK@^^1>dm8lYUAypt{C>e z{}R?W08B}drdPz`tEfZ=5f5CNtmIeBMb@L@cZF=}5G7|7u5L^6wKoXF^6FM2_eMY| zW=iB}ZS=Wb#vs9Gs2R0wM>_8vJl5xMKi`vQ(?3rc;j_sHq*Zi59RIl_V(qYcCo0)3$KOi-5nbNvTU;@IaaZu}ao7x* zMJVP52R17Hp8s&69BZ7Em5O0T1~9-M2@l`-C1=zr3t|TytW)}$IYurOGi?S^{F*6$ zg5V{y!ok~7>%Lx!uN%nI4&3BNNUV9T|in@+Wg$=HIP)o?FkOl{aM$ zzd8mrE8zR8>}fsn&wsVaVzCj)75cIkwkby(s-AO~ zF+ot!4;0G)!guB}jaBO#u*$3}TuY?1s*O+KVUV{LfjE{My?6@QZ(My{?c*Rt94J`9 zSzeE+T*=3Z<;>)4(85Z%w>m~|o)Sw8FaybSdLTJ^fGqEydrwXuipNTUQq>)ID|z#v z<>hm)epI_iFb6UW4(3WP-iy$cLN0>8aI^iE!aFo4(^#1snrzk^Xa3g=43G-UG1~e2 zEZS7Ss8oZcUSwAGL(bYSVf{f-Zgd+(&9wu{a@&+7;%|J@!xOs@_wPz63S|v{Rz^fcn&(i*<-g zieBm&5_mwPkO!Z=53aTo;ko|PoY)%Khv`R0lQW*>BIH%Mq`vLwKjL(`e}FVfvH3YL z{Ke6p#VY*ck6W#K!11zk;Vypc{&J^Jrsa-DqWW5Hx&>%kA<`^uiTXw%=y8bhLM(M% zzT|h)UWBZ%OANss2adrQ$x!%ohAI>|lwBdc@cqt)&s8Bfi?t7%G6dP6ss}>?JOWzn zufQR!{Kf0p^mIOXpNJfDqsTda^l*^M$8jY=Y*UvI?PnG>LaUvGhbQM6^oC-V&xyH; z*s@;fhX+{qp%P{lqO|4UuySAHvZ^Yc*GjZgbB#JZXy5)0XU;{WaBW3kmd46$re1s7>2c&SbOD7%RY#VVTR_&fbkVk_;ZI)% zyb(OD>D?>ZK9s5v;9X0L2Q`PPbSJL6aGTdZ2ZB5O4q_YbY8%hadA|Lbr$+O#S1Mph z67wE@Dbp9Hbh>^pS&16({+vh(uU2k0=|v3GqkQD43I9YS9qtzeC>K*vq&>#QgzX=<)|5KnUD4)L6j?lP?nCKA z;h26}_5lNmw~vSaqXi)GCZbi{c(TbzJ`Vw{WRcgX7$J9;C>pm*TZ`D1IP8~5dJgxu z%OifxDgR1CrR5l97JAgRA;x1MkO01UDs z0(244aV*%(V#n^>=23umvn56j?_OVR7B!22;i(nS>lujg_i8SJ;s{`H5^o35U)h*x z6NP_O0l@}8U3>22(Hh9m(X=^1pr2&daRf!BUPi&4)JZ8k*CI6eyEb33F_1FA()OOh z-)423I0(Pg1F+SUJ~AtFtUg90V5IIa1amvJBW#MwN_pWL8)3^E9U3m(ch1zo+T<`o+wy4GFF zN+pzmomz|uhg1d+uIq7qvBa?BtL;GAw{khJk5nFTxS1`)bSU@+(Foaziqzws&A{?` z`#2|w(dR7o?hWFfMC)*bkNagS%aTvC z%0DyK(f5=HkRX7D?^7z+H9DRI<#yi5t-Al< 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 h_^48KcLYDxK>|G_09Nm#wX8QF5=@& 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 CS7BQK literal 0 HcmV?d00001 diff --git a/site/graphics/html5frontend.jpg b/site/graphics/html5frontend.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a5370ac501dbaa6f0ab9f9b19223a975ab46a654 GIT binary patch literal 157632 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 z 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 DqQYb^ literal 0 HcmV?d00001 diff --git a/site/graphics/logo.pdf b/site/graphics/logo.pdf new file mode 100755 index 0000000000000000000000000000000000000000..f531e5b946b9206105546c5dd353e5b034876d9f GIT binary patch literal 212032 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 qBk+jIU1ZY6$W@ByZ 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 H{eb@kmq4+J literal 0 HcmV?d00001 diff --git a/site/graphics/reporter.png b/site/graphics/reporter.png new file mode 100755 index 0000000000000000000000000000000000000000..4120464c5cda7db2615a87868a73b67a45d00777 GIT binary patch literal 19542 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 literal 0 HcmV?d00001 diff --git a/site/graphics/simpletickdiagram.png b/site/graphics/simpletickdiagram.png new file mode 100755 index 0000000000000000000000000000000000000000..552d5572818c0add3aeff796c2275a3be2ae6632 GIT binary patch literal 16225 zcmeIZbySq!_dhyFNec=LARsDI3XC*Jmx6Sw-Kdl_(%sz+(w)*ncT0EIeFpWd z@89?PS@*8{`~C4(xskSrF*fZ4e0I z`|Vr6FT6Ny7{GrB7P6uOpuC>@tH2i|J$?y(5U4N!<3bY|_>N}wQpExU!ft~9A+(uh zXoEmJN3VqV5-^duhgVnE19$XGqP6=katPiL-UYNTXJrTFoi zIAT-}FNe$DDO6c+W*)h?=n0Y;kY;_2rKB0Q>#{l!=s_hBu=!c^p6WY{B zUCyJqE>J*xcL7DI6<_Rm+JJ`SZo<=Ed_Ip z1~HQ|qRbA$3JsKT9o+P8ftYE4@9QV0p0~sJ&MvDOY>Ci7IPeuE#iltL@L!^NO6_!k zKBl3xf*vQV@8}pRC2%9vfj~PTMwAB#$a-``t!9hLXup3!C71Nl&g-+X1xwum*#Zh1 z=sM78^emoCvX!q2H4X{1gUN`JAXpVQIM!yNK8)x>^dyBjT)*O^9zg>QICxaexqXRK ze@NgzKa`D5U7TTSQ-cu;$bhMcY##YnsL${DA}Hg45&IBYHPjeUG`QhYfsqxLyn%@t znDzF6xUh{2tDMi@woCth4tBL`0Dn9LRFbp;GI>Vu&my0mS&x`FVGyCWf^txO5q^N6 zj10fYz1_&0zCihB=)dWye%rG88n7*b1`L@KHVV%cl_hL-E};@qbvx z$?lTw51S^KBekFZT4!p>NS)u~GX%5_91CYX_&dfgHtPwh#Fb11|HGp!y7E8N-?f@y z{6ierZm5#UpC!$p8MVm&Ve|BgGymenoxxP#za{85w}m}X5U|8H#eM6$^NYy^w0{Egzu*=_9w}Q0`sZs>!>AHgT5~~*NIN|rPC}Yu_s_c@-V6hU0!BFVVKs6;|bCqbvFQLa*Xudrs$_=qq0A0ihQ+dMMV~S5W}?lEnwQl zImRY+9Y0U(753JTr(#ygoOR1;<+RL7Q*V~kOk;l^yBV~?7VFPOo>@~8=Km*!YgG7K z;bN=I@c*8uN0-O<-)ZWOj|@iHs=wzxV!c)0U$Q|FgiTmQB$j-aoDeaDo=$5B~8j z|6bnf??)AonB2b&ShZn{_K(#506JAV;0BWe=Z;7aKIA($&{TpjMD$NT468TRTia`ozQ;aR{p!|A~tE-x~N4VQXu|Pz{**i8hojEC**ZMI1?INVwwSUa(YsXuGqa2L!Lc{sA zv8$9rekTD@Yc2Gx3Hk!1x5B|Q&ei)Cbvh80=!>}XM>=vd!tT__vU52ES^l&V-cjOM z?GoNetB=n(;x%SIg2j@%RJ5I=loT`& zhDjRv*o;ZmgZXMsx3*`(Vqf##BdOGE^|V0YVX52~Y&6W)mtR4psyVkcyPoMLKf2iK zm{OA1E;ZO~>z{*aDFsZFzo($Fvr$$Q!5qwN6cnZ;GE}`f6VU%|0`L%3{DDj7j!B|G z$gNB>Me)gTG;9rx71 z@p;vC1bJLblC3y%w6YTf9twd!)+#tsAgfvANWI zTH^epOWneD`E@q#bhT;~`bFc98DC-YhKwxH#C6uz>T9>HM1MT6vg_Z$c3}ISLrXK; zq^UG|GIM?9;nZAZOa%nVkK5NDj$b+|w^Q|I6L!|~)V(1ZwOCo6ot)g%37108em_XN z^^(@-b?NXX#{+GnH!|rNMlk+yZKT6Xzsl{BS4jwonsbQSOrs|l;_0O=H;X1HI$z99 zCyw@cag#wY=0{Be^5Xir3`UBI@xLjkhdRi`^2GIi4$gF{ixfbS%0Afh5L z2_p(OwE*KQeCML7Dj>#E1huFdngH1FOK9=8+*PE}re;-ybK=YY3_!lP#)T7P_?B~u zH1eK7M{W(^dzrrcjthfXK&T>VAgJoCD))cKT(Qx)icv21fPZPkCpio&euv;X2$h_j zq~33iTxn{FR|ns>f%qp7r>hMtw!B!En?84$NWRsT7gK4reqSglar7=*fQOC@U;1Eb zCL@Y4BT5%MZ~(z|ewjmdtB^DiT7^`7l~0#mqh-FzA*ln7>c+zCt%E3 z-E<;>cYW6`9$2}EpXd{#Q#PF%xm&Y%&~2F$H6hHgD9TP=J$gSAq0h~|H&4B0zAm{i zZXKPJ{lTYv_fs%Bpf3PS5O1whlXWV(SXL?RQSG4;AH8#iJBAq93@CUH>6vl!WbFr% zCvx_RCXSlIWoAD2l5|(@Pw=abmeH6^T_7wX#oL%lkfuxv)87|bZ3(q&e5NykZtz6| z(|e5(MNFG*Tmtald;d`DO1F+bYRE4(U+6R?7)iU^f{L?+6QIiGe3&zhfygOy^>M^y z?Zgy3Z6GL48_E~QA74@aKB|(-M6z@4Ff)@Rldsa}@x3LA!paQUtSDl>?gYTc4tH!{KNG+1PHXk_UE?E7+>%aTGtulRbX&a~e-;hHYE5YG1Kazls>#?*KSB4J zM1z9DK0mWwF}=4vQR+4sn+@Cfr4m zu{___e#oNyL*RW9KYPgiLfeh(lK6xP8uy{b8?88b0~iL_LN;Iv(DdW*DQa2E18uE? zsNQ9#v&M`b9Le+9k-3H%eW%yG-t^TG**&^g`0AWtk$1!Ia6^Z_PxD`n7pk*5;_}c^ zxukPWbQCdzT_1v7-vFMTWmHQv-oJRiEOd(co@E&)FO%N-aJ!eLT;*WWD;~&IZhSZC zxN}QMoJ<#QYRiGf-dfBBsXL*C8;O%NtUa0P_&!gG^~&%V%y#V-$4s-$xb%%{UemQ7 zCRi&nd*pS-UfRo`iRo?V+psAy?1uOq9EP6n@J9J3?Q(~S>cT0qsfvT(!6l-`DC#e{ zx!P!*<6?BW_3ON;IO8Sl1L)#qg_Z*(mIjxNpF%u&><0y2i%k~pw135VE&tNF|C5L} zx(s?sqsp^>qg($d8PfT69I;6EBN@5KY#Axwk3s+y`D?87Cua7LnY`AW)T)bgwUv=kv(u^M@Ks{`A)Pre(cdUSS zFKkas;!;xY&O|Vka1X+!>$K~rO?)%%r1H_m3<(U$q`p-|l}5B~=}rEHC=wey#3Uw4 z442Qf(d3_o@&RQK!2Og0F4T~^wcax6;C60S$+Gj6?s@@@>A-lDjbXm|(B4DD2TG5q zz}LgQPwI|+y6HrN)M=FfS$-#SJ$aI?5E>YR^3x(HN2D-1xeJXZmg|L~T)~2UtPizc zw^>nKacSwL>b1qx22yH=$-66jixge3rh1y-gkoi8T(0@zWzl6fbz`!jK82bg!4}^<=57+~`hUuR6xXtd~qad+j3;)RG8~UdQ-> z4n}M;?+3l?iV;HDxn>Sb-o%0uNki9Wo%V*0H$fQg3E{?s?4^tIHxItB(~{SL=Z$0|Pzcu`fD*$x zU0Pl8)Ac99?*btchTbB;zx!Z{HD>PKucdZYcTN<+F)u#Zd zb0fN4^XkFX*?!*iH3^Z1b%$$XRT;1)DfOV{Z>IBPO}5q-akG8sNY~d z50UVj+Y+`pl~S2|jRCFZ~v?9}{rXy+s z(tyNhoaxIg2j@Ig--Z;pq8GGmS^j+NdR^jI62{%n&1kMSTtn`>nE8ep@l^rRlW@pm z^!&o0cdd75t6L4>h+*jDV9CXtxT)XXaDusx;QbqeB{p4`qX@}d`y6~Grv7JAl3fIN z-5oMHX?c!rRzCC{B@`D8`+KJ}O-vU$tMJip6 zKUcjl!fde^=Y7F0^YY+^mVO4LLO#H%>}zX69;KxQot_M%hex9|rs3(SXUbyiLU?R} zWdmNsZ^dmjTkD!cp*3R8Eyg`dFL5l!IRUsy8npF<>>!S-`A(;IEL8f4?W{xk3Q03_ zm4lMqKJ|}Vwn6AR?YvS?{Nh+&#{N)Lb<%zh)mY&pF2c30;q3~iuLl0Of$94zNuPeuk;*5 zselM!8ulAlzv#-pza4$49nGJZhxd++b|AB56~eOG!|m2&CGXXfWUE?@Wg6bWnRJ*nckqFXhI zwDOVlKQx6<5@#Is@;vg5QyAJ?o!j6mKuTL?L>VWd_Okr`f-g3r^fs5r86uPs83Sbw zTI$|njoFBBShPrA7A6pV`jVoHb=iKCdC;V+Z z;hloN5nZR7u@0s;lDLK;3bgNW<%^Gas&7%jf=wSG5uZ_A-)q!C**|bped@eFl&Nsc zvXw4SDfrf)?M_5wEcG}!Ad&wzz zO-<-MibV_OHeGQ1$)W1)JM*ZzRZQ%qSem#b^iJKphN5tBEZKt;Q7$&rPKe#dz=&05 z6zdIzUG?mG@Ka12l!;jysM+Yp0$B^F^!?BDxgRe48w~LJrzTGP#9$!_vhTCM1?Bb3 zvRj8SJgHpDN#D@GbiSex^$#t0@l^OmXddD{>QvgC{-kx#2-W$x_Nm5+&k$vDGR(41 zM1l=VIViLi+HHzcO6&2QJS|)<1%oDrPhwjo522`Q#sXyJw<0a?zREh_E}qzpe{^bf zY-1aAlotgxM9~?f>wY=R>M>JC5@V*k{~jfbUint=ir=Rir^SJ`{vPoXUJV+<2{TIP z7bILBC_tSH8Q2b=k7}}SgJe+-wa}kA5Keh+_(0Y?=11nID3qd3D_QNM<@6hD(0J;w9ZR)S*3wMt9xAusj?aHu* z(rnw4RAJ#p1qQTM4JTX1QIxXLCG}1>OdU!nnA1pH`eX}UF<7zRQ8u$c4r15>M@ju! zy~39Q@p(w7Z(p_z_yp&Aa*3D2mtMGa z8?SbTPwXWpU$_Ql(XZVCZr<{bA074tlxntBIusl3quWQpBF_laprr*TQoS0O1RijW z^O-8lVs4iPAit~)kmFo<3kt~MseXpE-|}s^_X2E;=-W{JJ8IT{Fv2-v^YEbwOx!TUTmd9uN2F>_?0SNa3U+;04}RSM zoEZ>182`kMU!>_*<~47aUIr4m;GwK}(;tn$^!>SqAh4VPCccj7_6!GIJFtbD5PE*x zPYHH?3Saf}r}$A&*{F{C3nZdWlhz&iZIyc%xtzY!HtcAv(w-Wa!=7Y}UceX=OhRk{ zkD_RZqr(cQ@)>YYgtN{2AgQ8 zD={N2F1v2!LLT3qF?~R}F|)2rNeYj|hQDo-TLX``5W%>xt1=Lis57pWPdomp>Hdh< zJ;DI1tEbORCTdL4HQ@**2j`!mIqV>!&azfMdG+hc!N8WMoN@LHJNe|jsfb|2yS@!) z1)054K+@Y#y$Td}wxbr8|2<#vxK{DI@6sE~pHq9y^rIxsK*%^vk#p<>n8n+O=x z3U|El`R@HV1Do^(t{@`Im1*v2{a7f_i|Gw`ZGW)TdlQurS|1QHqR5SQgNIQM6Aw*Z znFaX5=RAuaiAJGyyoh$3-RMRQ9=<^!IRR6?iCHNc+HGMai@EQ1W>!4FhuzrRn=7m#7QloxcGF;i;dM@53=8+3|reZDlu9lB+7W@*QE zV;m-rm2(s&r6oFb6Af?Q3CZvaDo?cR^!&^<0cZKfyl>fcU?v-h{Esc9XT8SfttXPM zx-RURs};ybf{&mJcz5e+R31;JX1AY^`qN8Iw2O+;YG9@nBtq^i=@q%2mnAO+FwafJ zdorv=M|^uy;~4+Gl+9r(i}KQddNcy*$k2hF*BytT!i6_~M_|H4j#`#%{RJ!KLc%y0 z?}$>ivUdx-x5p$fEK+y6`dL)%e#_??Y@o_G%CivWX6nU2--F*NgTVz@&=Vxy!n?dz zW(-^q*+SF-Jr@VdhLfK4VaypTZQ(boWSXlbaT(EHjYK_O+i&j2@yel4Wc1!OK%1Mn zUZ5v`GCP07W>bl6bCHh;bR)@#iE_cN0BwC2zKL4|vnc@ODWl1#Ogd|K;q+!oa;aX1 z+zQ7>l-utPYODLYQQMwP4=)8%ZbUn!c*c?PD~1QzDN_fd!5Ldd;4P#qarmOfZmAW} z7Si&SIjgJg_2%(<;49VP955a!VFlN-7fX}=C3`hN-o#R>U&eT1D+Obd@?=nlE>pK$ zATGD9(LBDt3vO5J#i4ro&FQfDlB)&n{HQO}q74ACiQn#3IYv`Zr+_!$fqCy?-Vui?sg3+Xl!&}Hk=(8VG z?k4nlvqjCoits&+{;ODyjnzOeRmG=2igix|{YZFy##p&|K1@&Nl%AVE3YKb4iJe*3 z`32nh{Su$ZG%3=riTlN{%#YP0Y_=ZiKeKf6s{Cdz+nbW{4fcTtsUE4MooBz{zIPOF zEtl0*RCnTfd0(MLTY?IAv~Vh=Xh)K=bonMLC4exewrf{5^KeE?UASzft`r%Nr8%_S z1k>|#@@Sx+R-nX?oWvDs`LMH8peh=B3rh#BW%^s`GF7&+{{Rb6WaQ2o)grqjX9^@Tu6RsNnBKMb~aKi5jSVKxi2Cv)rb3VTcX2`>liP zCrAX4itz=TZF`ch3NmA4#3c)e_3F&j$xXU-@hD4T{J72 zegu}PPoAeqE3ZpG?X1)HOSPJ-!6%x0KZa8<5D1%YyI`SN?x$3NASlrE3kW{aNz zZe0=FYE2LX^27#2%g`Vj|KC3a015SHtlMiucY1*PI3G(3av&F%6BB^RRw&2V(DPDm zYgk%qY43#va<6~3&WWlpDC0G7l8*2D8XNKXybNPwNU?vhoP7JV(dETOxbtTsYWp1q z*J;N&!Vn23Lj0tAFWrmZWN>CN(-_jTJYb`_De-v7?Ar<=6j1v4_RW#L0i)xNYoxGw zbgf7cE^l;=;umsh(Q@mudfrlV5Q=z+)fXS{B(sAkTxWV+6!;AxNd)E4?q}^cozhKC zG=mEWwgJajpwr!VZuW1i{iQp6=c?*l-daDuls5k1K}6m|bOQU)gM-#9+Yc{!+8^)E zUe!hOZk#R!SLH`d8x76}BsaA+=aH40P6){EZ58DBg45*OJ-x-A!zwQh-R~~BXzMHKTXdY&|C=6Jp*R~x9v|^@qujt; z%_I?7xy%NbvEjw|m=n+*Bu#XMEeSVqZA>v1XQh0^K?U)MSO{l`>a5&8G=QF5k=q0` zd%8RBRi8nSj!uU<>*Iiga%I_sp~_L#HcTQrNxbEHT+??PUmr(C+F7K1xFktZW+cP) z0QX78wkgahJwSu`0rOMGk05=;C~kphVe2o_l>QxAoc9R`nvVnp zg%DdjF+mLTa=2?;MY3*ZF_1p`rxm7L#KV6#!;*f)eg}VksO2u+om3Jc5j_2&I!_eQ zeMIe3_-@1PLl%_>0!}?(eGCyq;?WhQmL-lxGq&(f(~#23iRQK{N$MJV$qLxJqy~6P zZoHWO3(kFzS_A4M7%HU$oaA?+lY4$oR7{qD{#Ad{4^p6iWfvNJR|=6O`t>HPAIvwqAm{zg>BNht(2SVaNQ`=N4xyy+o+ZID#F& z+b~7f&5V|Ai658rlZ zypjR>Lh7Y$?{LNUXrVl0y-ip-##p{`4|m)&AXx=d$#3~)Y&U;yCcL>y8x{PtBbG4HsgJW z$$0uALGh*&%vLs&F(FOsa&m04pDYPqQFjVz{VpWK@n~-Jj7v*NdFI#PnR8^8h$sm^ z9HOC5oB~scl0#FCF;KL@^U}AhnbE(_6dS%*vn!F^T2=8MnSG)GilG8?kN~*Pj?6z7WBD~3%Qz6b7<|3Dy`>l_0K2- zkX2{|oQA>PFH@DI22XnKU+A@wAI6SFKhf%Md1sxODTGXLkCIMIeCBm=;!RVG*$$&u zjWa9+EHafoMzC>xej*{)t3X&Fz9-4`fZ>ZYf0!>^VgE}j>el;peJMh+NgokjZo0}H ztvt?X7J0{2WnIa40tdbdOb)1rMs3a^r@|*0F&D9G##CJcf1ex5-tvLb=ro9srkJGZy-%daU<=9!kUPJSoi;#SM8-ArynQGG9j$p!_Fj^W z{&LaM&VzCO^Js7~TKWqPdoqOl>k#7@G74_qs1R|g8vgKMhWjt=+DBI*!FV=LUzlqn z-o+16w@mn&^y`YnK@=z}Br6R?nkfTPGL`~_#g{O70w$Oo0h9cfK7M{?l}tY3`<)Ei zC5U^UZ{u@Pw-dv)L)!lGb;Fn-?*4f{(i@J;sgRJDVwvIIS^i`UF9N@kiXU&ix;;k3 z#ihGhkx?-B)d!U!emJA#1&+B^tjEH$@4uW#Is71J{8=)EW0->T&t zLbJmNB^bPkqV!70<1eNeSo80{>d$!h%bjHD48bKw{muD}^p=QPl*0X@(3r81mYKrF$lXkADigR1ogLVydjO)Hr3r!oo;vYm9-<>%<1$b0;Sg}_qd!&Z%qg_aIG zy(7KFR#Gt)DcL6y-_Lf}UKMMdadoCZXnrSBYe{06hK3*eQd-4-2}o^EB%_zO=~cV* zFVou(ViRzJfqT@r(1^tTJqYc89dy$|qWmcc76!XVFg?FS(DRUA9_m*-O3FqKO#Eeq z%ao>WXE~5Xws#!yH3M0~B!2dJgnQslnJ;H~q=Q_yb;|Sy=ZX=vSo3d4r=mTS|LSl; zO=Be*c3P2b>Nd>g68n=s^n75Eu^!QEu~$+1RjkhOl$o-=ONw9k?JZuyx&AqoIntM* z*IhF>?CA~N`=%8|h%o_WWg$AQC!)>@WTGgwIN*Eh&OTxS_T2^ofiv5mmk+evtDjRP zGAdeq-(Odly4}IG`LUXr-;LHh;5ntRQwP3SUOn!7`?H)MYISk07cn$Zv>`Ed7@gKj zi!>siW*&5qB=Q(xwh_~}B|90_(6)So-hOFLmQVhg?$A1p-8Pe{X@K9~YyNxAWjs8Vwt9J+&uTWqR6dV3aj`QKTXsn~Hsg^J2g=wQ z6>z3XeuXa+8A-==`6fHvSR<25I^Mj5lan2T%F13VFmH)E zo32F9k@`s$FoAxLu3deHoZMGqtlhhV*V5LN)@D9H!;ixsYR^s;$y&D%u^i?=K@TS_ z@3Swm%MRmEA#LMSV3TB)j;}ock+ZK`XtX!wlH1y9KjdXWta3kCOL`uMw5Gu~i}D;L zjrSm`@X-=dUBc(I`>!Iru|ga|XlOb=aVj5Z4GResL)$nR8AU>=b+egvNFIX)gXa*S z8Z>!h3(A?NWw26fa;q)c7%yjTl%g@YiHkb}Mv{Jh{N-z{F9o2~Zx8U^W*RYTlh^4A z)%a0-P=3Ee=g~0aOyk&uFagO}S|JYtayfPD0VLe4m%Q?^G+E*$2m3oY9UIC^s_A0N z-}172hU6)L_YQ8=@oPa_P$g*{VPHw8NDLxx6fsGt{^-i_8L=R#m4P>{%2`$unFpy^ z+!(RVpROV*uA!Q7&S*skvM;|@Kc7kq_(ZJcOK$&Kz>ZGW1ee^q0VWg)GBx%Idb666 z>gLFP_gToABANrSgaJ$LINQL7A#*j^Xb7VdJ7rPH9x;GsfgXB8C^~=wg4LJ#Jd!>c zUT-knD;!kXOiWC6aXK1xFW3kgUHk4*w(!nQA)8fwcgSwik3Tk#XW44#Dmf)8so5$% zF)xA{Zmruypov1y~cnS zpwgw@p=kzQbkW%l74Q|4x5z22NXZn<%J6O^b22ODZskW|5wepicCBCj!jNOnM*Y#_ ztPM$`!%QJ5mM zF(Gpt%KKXMI=k;;NAv@!AT;CaSviKW;B23GzM&ugn3S?b6<-BO)AkIOBzw*&E8@=+ z0PY!`gI$?gOc%+PDwZwKQ`w)S?!)YSY=3QXK5yo9SUP@Hb_hHD+p-lxMpas;fOM-(r%N`JX+60q1SUHlq zK+pi$-uMi`tJLqUoh&%=UJ$v9afuG;^gse^jWNr;>^#nu?vKx2s5)%~1qEYU8p+@p zbs7V$cI$dJqQAR&4+Of!fy7D$+OD7TT!cOSD<`D+bmNppf^@`sAW|Y)y?X6s|0I`& zcrHh*aN)frf~+?kX_BUJZ(Yxpxrwuq38d`d)i-et7ulOLKfOP?#8AT#y zz5BhP99pb@g>|rN^S?&~Dutr|3oZa`=+J6Y|3ritcJQERh$%`Jz~}MTL_-_sC}h8! zp?A`e`Ta@Pg*y_x=tG@5gV$w2Q_7-Ogr3_Pb}ty_tP7O)xSvB_N6}*;C2V%f@ZH#o`o}efSe~s zdjAt^ue4-~aW5bSaGt6Pb4Z=PUv47{g-25#2BC~D@SViCMo~WspgS4hlh)(YR7Te} z9{+NnT4un&{@Yek2bj~a|48^iJF?_g)-82RG{pOAKp7B z`$5M!0*ul|?zc4?9=4i8R2^tj)bFKI-jB2T1FEfxxHV zR%h|RK;_OKyVTdK_m}hJOzZdc>pAedOS;W^p{tb@=xp|Ffhx4;ZOQ7GOi%BlEaS_h zm{qbH9N~i_^rPWDle6pXLuzYQl%b2hXp#39dd0v!lyKdstby3bG0H>Zqk-a+4*MJD!@av%ZN)IiG(Z?p$0@*H(PYZ}nr=3rw7`>tfUm zywH*V@iq$$P#0VA)pU|3C+?v9oKs_X&X54+JE{*5K8a3|boS zSRp0Wk51(4Shc7KnObr@p{63k4iND};*6r;Rp3RC9rQ2Kg78|=?uz;;%?IOUiM2si zPI~HC6k>BP6zxvbIxP!-6mJ|NkQx&18_yivM4mIBuX{{mKnJLQHt0$9`TmZu(_N;K zl<@81+#}umx1}k(SjZ&7^=j{Xm(q6{Zq=_p0CMf8aD4s+sH}y@f-_(9{MXLmT!XR{ zth>GRk>Hb>BfH*s8rM6p6|WMv9pDapIL=*AH_}5`Bko#NYXV=qL=qu(?C1hS=f|t$ z%8M?Ta~*ahOsCtMqW{CEs=-FNp3RqZGjy35yD;~N&B07A7|j~7mGqSQ+7;oxr$#u) z@s1F6hZZjFCkXYsr#<4+cz8fH(?PRG_282`+30soDbLp%MOysvEM1<)lP42yIoaZH+_|JfQ| z24AXK;s7Tz@B#$PT?bm(N0l#FnCQ-Np5a=Z4SIR|p}e6s3ySIw8C4#as5ljCtwrE6 z`)*gOanz<%@N-M;^aLI$p#95LW<)n<=fMBhI}i70Vb#8>xG-2&&@Ed~0ooU7m4XmR z#7b*8{_6wSs)b+DWD0du(LeVGS3(g$YhHLlU;1<#(%`Q{C$Rnxe);)-;QQGBPg$bf cnz_DisCX+QFKJZ;Oai?UmK4ep(D?j+0Y0&c0RR91 literal 0 HcmV?d00001 diff --git a/site/graphics/torq-logo.png b/site/graphics/torq-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..767a5cebc1262fecfe976d59b9ccce3a7be1ac81 GIT binary patch literal 18931 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 u + + + + + + + + + + + Handlers - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+ + + +
+ +
+
+ + +
+
+ +

Message Handlers

+

There is a separate code directory containing message handler +customizations. This is found at $KDBCODE/handlers. Much of the code is +derived from Simon Garland’s contributions to +code.kx.

+

Every external interaction with a process goes through a message +handler, and these can be modified to, for example, log or restrict +access. Passing through a bespoke function defined in a message handler +will add extra processing time and therefore latency to the message. All +the customizations we have provided aim to minimise additional latency, +but if a bespoke process is latency sensitive then some or all of the +customizations could be switched off. We would argue though that +generally it is better to switch on all the message handler functions +which provide diagnostic information, as for most non-latency sensitive +processes (HDBs, Gateways, some RDBs etc.) the extra information upon +failure is worth the cost. The message handlers can be globally switched +off by setting .proc.loadhandlers to 0b in the configuration file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ScriptNSDiagFunctionModifies
logusage.q.usageYLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updatespw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer
controlaccess.q.accessNRestrict access for set of users/user groups to a list of functions, and from a defined set of serverspw, pg, ps, ws, ph, pp, pi
trackclients.q.clientsYTrack client process details including then number of requests and cumulative data size returnedpo, pg, ps, ws, pc
trackservers.q.serversYDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.pc, timer
zpsignore.q.zpsignoreNOverride async message handler based on certain message patternsps
writeaccess.q.readonlyNRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.pg, ps, ws, ph, pp
+

Each customization can be turned on or off individually from the +configuration file(s). Each script can be extensively customised using +the configuration file. Example customization for logusage.q, taken from +$KDBCONFIG/settings/default.q is below. Please see default.q for the +remaining configuration of the other message handler files.

+
/- Configuration used by the usage functions - logging of client interaction
+\d .usage
+enabled:1b      /- whether the usage logging is enabled
+logtodisk:1b        /- whether to log to disk or not
+logtomemory:1b      /- write query logs to memory
+ignore:1b       /- check the ignore list for functions to ignore
+ignorelist:(`upd;"upd") /- the list of functions to ignore in async calls
+flushtime:1D00      /- default value for how long to persist the
+            /- in-memory logs. Set to 0D for no flushing
+suppressalias:0b    /- whether to suppress the log file alias creation
+logtimestamp:{[].z.d}   /- function to generate the log file timestamp suffix
+LEVEL:3         /- log level. 0=none;1=errors;2=errors+complete
+            /- queries;3=errors+before a query+after
+logroll:1b      /- Whether or not to roll the log file
+            /- automatically (on a daily schedule)
+
+

+

logusage.q

+

logusage.q is probably the most important of the scripts from a +diagnostic perspective. It is a modified version of the logusage.q +script on code.kx.

+

In its most verbose mode it will log information to an in-memory table +(.usage.usage) and an on-disk ASCII file, both before and after every +client interaction and function executed on the timer. These choices +were made because:

+
    +
  • +

    logging to memory enables easy interrogation of client interaction;

    +
  • +
  • +

    logging to disk allows persistence if the process fails or locks up. + ASCII text files allow interrogation using OS tools such as vi, grep + or tail;

    +
  • +
  • +

    logging before a query ensures any query that adversely effects the + process is definitely captured, as well as capturing some state + information before the query execution;

    +
  • +
  • +

    logging after a query captures the time taken, result set size and + resulting state;

    +
  • +
  • +

    logging timer calls ensures a full history of what the process is + actually doing. Also, timer call performance degradation over time + is a common source of problems in kdb+ systems.

    +
  • +
+

The following fields are logged in .usage.usage:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
timeTime the row was added to the table
idID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication
timerExecution time. Null for rows with status=b (before)
zcmd.z handler the query arrived through
statusQuery status. One of b, c or e (before, complete, error)
aAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname
uUsername of sender
wHandle of sender
cmdCommand sent
memMemory statistics
szSize of result. Null for rows with status of b or e
errorError message
+

+

controlaccess.q

+

controlaccess.q is used to restrict client access to the process. It is +modified version of controlaccess.q from code.kx. The script allows +control of several aspects:

+
    +
  • +

    the host/ip address of the servers which are allowed to access the + process;

    +
  • +
  • +

    definition of three user groups (default, poweruser and superuser) + and the actions each group is allowed to do;

    +
  • +
  • +

    the group(s) each user is a member of, and any additional actions an + individual user is allowed/disallowed outside of the group + permissions;

    +
  • +
  • +

    the maximum size of the result set returned to a client.

    +
  • +
+

The access restrictions are loaded from csv files. The permissions files +are stored in $KDBCONFIG/permissions.

+ + + + + + + + + + + + + + + + + + + + + +
FileDescription
*_hosts.csvContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed
*_users.csvContains individual users and the user groups they are are a member of
*_functions.csvContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users
+

The permissions files are loaded using a similar hierarchical approach +as for the configuration and code loading. Three files can be provided- +default_.csv, [proctype]_.csv, and [procname]_.csv. All of the +files will be loaded, but permissions for the same entity (hostpattern, +user, or function) defined in [procname]_.csv will override those in +[proctype]_.csv which will in turn override [procname]_.csv.

+

When a client makes a query which is refused by the permissioning layer, +an error will be raised and logged in .usuage.usage if it is enabled.

+

+

trackclients.q

+

trackclients.q is used to track client interaction. It is a slightly +modified version of trackclients.q from code.kx, and extends the +functionality to handle interaction with the discovery service.

+

Whenever a client opens a connection to the q process, it will be +registered in the .clients.clients table. Various details are logged, +but from a diagnostic perspective the most important information are the +client details, the number of queries it has run, the last time it ran a +query, the number of failed queries and the cumulative size of results +returned to it.

+

+

trackservers.q

+

trackservers.q is used to register and maintain handles to external +servers. It is a heavily modified version of trackservers.q from +code.kx. It is explained more in section connectionmanagement.

+

+

zpsignore.q

+

zpsignore.q is used to check incoming async calls for certain patterns +and to bypass all further message handler checks for messages matching +the pattern. This is useful for handling update messages published to a +process from a data source.

+

+

writeaccess.q

+

writeaccess.q is used to restrict client write access to data within a +process. The script uses the reval function, released in KDB+ 3.3, to +prevent client queries from modifying any data in place. At present only +queries in the form of strings are passed through the reval function. +Additonally the script disables any form of HTTP access. If using +versions of KDB+ prior to 3.3, this feature must be disabled. An attempt +to use this feature on previous KDB+ versions will result in an error +and the relevant process exiting.

+

permissions.q

+

permissions.q is used to control client access to a server process. It +allows:

+
    +
  • +

    Access control via username/password access, either in combination + with the -u/U process flags or in place of them.

    +
  • +
  • +

    Definition of user groups, which control variable access.

    +
  • +
  • +

    Definition of user roles, which allow control over function + execution.

    +
  • +
  • +

    Deeper control over table subsetting through the use of “virtual + tables”, using enforced where clauses.

    +
  • +
+

Access restriction in TorQ can be enabled on all processes, each of +which can then load the default.q in $KDBCONFIG/permissions/, which +adds users, groups and roles allowing standard operation of TorQ. The +admin user and role by default can access all functions, and each of the +system processes has access only to the required system functions.

+

Permissions are enabled or disabled on a per-process basis through +setting .pm.enabled as 1b or 0b at process load (set to 0b by default). +A permissioned process can safely interact with a non-permissioned +process while still controlling access to itself.

+

The access schema consists of 7 control tables:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptions
UserUsername, locality, encryption type and password hash
UsergroupUser and their group.
UserroleUser and role.
FunctiongroupFunctions and their group
FunctionFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.
AccessVariable names, the groups which can access them, and the read or write access level.
VirtualtableVirtual table name, main table name, and the where clause it enforces on access to that table.
+

In addition to groupinfo and roleinfo tables, which contain the +group/role name and a string describing each group and role. A user can +belong to multiple groups, and have multiple roles. In particular the +schema supports group hierarchy, where a user group can be listed as a +user in the group table, and inherit all the permissions from another +other group, effectively inheriting the second group itself.

+

A user belonging to a group listed in the access table will have the +specified level of access (read or write) to that group’s variables, +e.g.

+ + + + + + + + + + + + + + + + + + + + +
TableGroupLevel
quoteheadtraderwrite
tradejuniortraderread
+

Here, users in headtrader will have write access to the quote table, +while juniortrader group has read access to the trade table. If +headtraders have been set to inherit the juniortrader group, they will +also have read access to trade. Note that read access is distinct from +write access. Headtraders in this circumstance do not have implicit read +access to the quote table. This control is for direct name access only. +Selects, execs and updates are controlled via the function table, as +below.

+

The permissions script can be set to have permissive mode enabled with +permissivemode:1b (disabled by default). When enabled at script loading, +this bypasses access checks on variables which are not listed in the +access table, effectively auto-whitelisting any variables not listed in +the access table for all users, which may be useful in partly restricted +development environments.

+

Function access is controlled through non-hierarchical roles. A user +attempting to run a named function will have their access checked +against the function table through their role, for example, trying to +run a function timedata[syms;bkttype], which selects from a table by a +time bucket type bkttype on xbar:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionRoleParam. Check
timedataquant{1b}
timedatanormal user{x[`bkttype] in `hh}
selectquant{1b}
+

The parameter check in the third column must be a lambda accepting a +dictionary of parameters and their values, which can then return a +boolean if some parameter condition is met. Here, any normal user must +have their bucket type as an hour. If they try anything else, the +function is not permitted. This could be extended to restriction to +certain syms as well, in this example, the quant can run this function +with any parameters. Anything passed to the param. check function +returns 1b. A quant having general select access is listed as having +1b in the param. check.

+

Further restriction of data can be achieved with virtual tables, via +which users can be restricted to having a certain subset of data from a +main table available. To avoid the need to replicate a potentially large +subset of a table into a separately-controlled variable, this is done +through pointing to the table under a different name via a where clause, +e.g.

+ + + + + + + + + + + + + + + + + + + + +
Virtual TableTableWhere Clause
trade_lsetrade,(in;`src;“L”)
quote_newquote,(>;`time;(-;`.z.p;01:00))
+

When a select from trade_lse is performed, a select on trade is +modified to contain the where clause above. Access to virtual tables can +be controlled identically to access to real tables through the access +table.

+

If the process is given the flag “-public 1”, it will run in public +access mode. This allows a user to log in without a password and be +given the publicuser role and membership of the public group, which can +be configured as any other group or role.

+

The permissions control has a default size restriction of 2GB, set (as +bytes) on .pm.maxsize. This is a global restriction and is not affected +by user permissions.

+

Adding to the groups and roles is handled by the functions:

+
adduser[`user;`locality;`hash type; md5"password"]
+removeuser[`user]
+addgroup[`groupname; "description"]
+removegroup[`groupname]
+addrole[`rolename; "description"]
+removerole[`rolename]
+addtogroup[`user;`groupname]
+removefromgroup[`user; `groupname]
+assignrole[`user; `rolename]
+unassignrole[`user; `rolename]
+addfunction[`function; `functiongroup]
+removefunction[`function; `functiongroup]
+grantaccess[`variable; `groupname; `level]
+revokeaccess[`variable; `groupname; `level]
+grantfunction[`function; `rolename; {paramCheckFn}]
+revokefunction[`function; `rolename]
+createvirtualtable[`vtablename; `table; ,(whereclause)]
+removevirtualtable[`vtablename]
+cloneuser[`user;`newuser;"password"]
+
+

which are further explained in the script API.

+

Permission control operates identically on the gateway. A user connected +to the gateway must have access to the gateway, and their roles must +have access to the .gw.syncexec or .gw.asyncexec functions.

+

Usage Example

+

To connect to a permissioned RDB in the TorQ system, a group and role +for the user must be established. If the RDB contains the tables trade, +quote, and depth, and the process contains the functions getdata[syms, +bkttype,bktsize] and hloc[table], restricted access would be +configured like so:

+
.pm.adduser[`adam;`local;`md5;md5"pass"]
+.pm.adduser[`bob;`local;`md5;md5"pass"]
+
+.pm.addtogroup[`adam;`fulluser]
+.pm.addtogroup[`bob;`partuser]
+.pm.addtogroup[`fulluser;`partuser]
+.pm.grantaccess[`quote;`fulluser;`read]
+.pm.grantaccess[`trade;`partuser;`read]
+
+.pm.createvirtualtable[`quotenew;`quote;enlist(>;`time;(-;`.z.p;01:00))]
+.pm.grantaccess[`quotenew;`partuser;`read]
+
+.pm.assignrole[`adam;`toplevel]
+.pm.assignrole[`bob;`lowlevel]
+.pm.grantfunction[`getdata;`toplevel;{1b}]
+.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]
+.pm.grantfunction[`hloc;`toplevel;{1b}]
+.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]
+
+

This provides a system in which Bob can access only the trade table, +while Adam has access to the trade table and quote table (through +inheritance from Bob’s group). Through a virtual table, if Bob runs +“select from quotenew”, he is able to get a table of the last hour of +quotes. When the system is started in normal mode, there is no IPC +access to the depth table, however if the system was started in +permissive mode, in this case any user who could log in could access +depth.

+

Adam can run the getdata function however he wants, and Bob can only run +it against sym GOOG. Similarly Adam can run hloc against any table, but +Bob can only look at trade with it.

+

Additionally, any system calls would need to be actively permissioned in +the same way, after defining a systemuser role (or expanding the default +role in TorQ). The superuser is given global function access by +assigning them .pm.ALL in the function table, for example a tickerplant +pushing to the RDB would need to have a user and role defined:

+
.pm.adduser[`ticker;`local;`md5;md5"plant"]
+.pm.assignrole[`ticker;`tp]
+
+

And then grant that role access to the .u.upd function:

+
.pm.grantfunction[`.u.upd;`tp;{1b}]
+
+

Although the .u.upd function updates to a table, there is no need to +grant direct access to that table.

+

Gateway Example

+

The gateway user will have superuser role by default. The execution of a +function passed through the gateway is checked against the user who sent +the call. This should not be modified.

+

Within the gateway itself, access to target processes can be controlled +via the function table. For example, if Adam in the previous example was +allowed to access only the RDB with .gw.syncexec, you could use:

+
.pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]
+
+

Since .gw.syncexec is a projection, the arguments supplied are checked +in order, with dictionary keys `0`1`2... etc. This could be further +extended to restrict access to queries with the +.pm.allowed[user;query] function, which checks permissions of the +current user as listed on the gateway permission tables:

+
.pm.grantfunction[`.gw.syncexec;`toplevel;
+    {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]
+
+

+

Diagnostic Reporting

+

The message handler modifications provide a wealth of diagnostic +information including:

+
    +
  • +

    the timings and memory usage for every query run on a process;

    +
  • +
  • +

    failed queries;

    +
  • +
  • +

    clients trying to do things they are not permissioned for;

    +
  • +
  • +

    the clients which are querying often and/or regularly extracting + large datasets;

    +
  • +
  • +

    the number of clients currently connected;

    +
  • +
  • +

    timer calls and how long they take.

    +
  • +
+

Although not currently implemented, it would be straightforward to use +this information to implement reports on the behaviour of each process +and the overall health of the system. Similarly it would be +straightforward to set up periodic publication to a central repository +to have a single point for system diagnostic statistics.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/site/index.html b/site/index.html new file mode 100644 index 000000000..467a431be --- /dev/null +++ b/site/index.html @@ -0,0 +1,353 @@ + + + + + + + + + + + + TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ +
+ +
+
+
+ +

TorQ

+ +

+

The TorQ framework created by AquaQ Analytics forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from code.kx.com (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.

+

The easiest way to get a production capture started is to download and install one of the Starter Packs (here's a short video to get going), or read the manual. We also have a Google Group for questions/discussions.

+

For recent updates to TorQ please check out our blog.

+

For email support contact support@aquaq.co.uk

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/site/mkdocs/js/lunr.min.js b/site/mkdocs/js/lunr.min.js new file mode 100644 index 000000000..b0198dff9 --- /dev/null +++ b/site/mkdocs/js/lunr.min.js @@ -0,0 +1,7 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.0 + * Copyright (C) 2016 Oliver Nightingale + * MIT Licensed + * @license + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n":">",'"':""","'":"'","/":"/"};function escapeHtml(string){return String(string).replace(/[&<>"'\/]/g,function(s){return entityMap[s]})}var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tags){if(typeof tags==="string")tags=tags.split(spaceRe,2);if(!isArray(tags)||tags.length!==2)throw new Error("Invalid tags: "+tags);openingTagRe=new RegExp(escapeRegExp(tags[0])+"\\s*");closingTagRe=new RegExp("\\s*"+escapeRegExp(tags[1]));closingCurlyRe=new RegExp("\\s*"+escapeRegExp("}"+tags[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function(){return this.tail===""};Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||match.index!==0)return"";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={".":this.view};this.parent=parentContext}Context.prototype.push=function(view){return new Context(view,this)};Context.prototype.lookup=function(name){var cache=this.cache;var value;if(name in cache){value=cache[name]}else{var context=this,names,index,lookupHit=false;while(context){if(name.indexOf(".")>0){value=context.view;names=name.split(".");index=0;while(value!=null&&index")value=this._renderPartial(token,context,partials,originalTemplate);else if(symbol==="&")value=this._unescapedValue(token,context);else if(symbol==="name")value=this._escapedValue(token,context);else if(symbol==="text")value=this._rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype._renderSection=function(token,context,partials,originalTemplate){var self=this;var buffer="";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;jthis.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&& +(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a= +this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f); +if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval", +"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b, +a);this.check()}));this.errback?q(a,"error",u(this,this.errback)):this.events.error&&q(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b, +registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a); +b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n, +q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d, +e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==e&&(!("."===k||".."===k)||1e.attachEvent.toString().indexOf("[native code"))&& +!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"), +s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"=== +b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this); diff --git a/site/mkdocs/js/search-results-template.mustache b/site/mkdocs/js/search-results-template.mustache new file mode 100644 index 000000000..a8b3862f2 --- /dev/null +++ b/site/mkdocs/js/search-results-template.mustache @@ -0,0 +1,4 @@ + diff --git a/site/mkdocs/js/search.js b/site/mkdocs/js/search.js new file mode 100644 index 000000000..d5c866164 --- /dev/null +++ b/site/mkdocs/js/search.js @@ -0,0 +1,88 @@ +require([ + base_url + '/mkdocs/js/mustache.min.js', + base_url + '/mkdocs/js/lunr.min.js', + 'text!search-results-template.mustache', + 'text!../search_index.json', +], function (Mustache, lunr, results_template, data) { + "use strict"; + + function getSearchTerm() + { + var sPageURL = window.location.search.substring(1); + var sURLVariables = sPageURL.split('&'); + for (var i = 0; i < sURLVariables.length; i++) + { + var sParameterName = sURLVariables[i].split('='); + if (sParameterName[0] == 'q') + { + return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); + } + } + } + + var index = lunr(function () { + this.field('title', {boost: 10}); + this.field('text'); + this.ref('location'); + }); + + data = JSON.parse(data); + var documents = {}; + + for (var i=0; i < data.docs.length; i++){ + var doc = data.docs[i]; + doc.location = base_url + doc.location; + index.add(doc); + documents[doc.location] = doc; + } + + var search = function(){ + + var query = document.getElementById('mkdocs-search-query').value; + var search_results = document.getElementById("mkdocs-search-results"); + while (search_results.firstChild) { + search_results.removeChild(search_results.firstChild); + } + + if(query === ''){ + return; + } + + var results = index.search(query); + + if (results.length > 0){ + for (var i=0; i < results.length; i++){ + var result = results[i]; + doc = documents[result.ref]; + doc.base_url = base_url; + doc.summary = doc.text.substring(0, 200); + var html = Mustache.to_html(results_template, doc); + search_results.insertAdjacentHTML('beforeend', html); + } + } else { + search_results.insertAdjacentHTML('beforeend', "

No results found

"); + } + + if(jQuery){ + /* + * We currently only automatically hide bootstrap models. This + * requires jQuery to work. + */ + jQuery('#mkdocs_search_modal a').click(function(){ + jQuery('#mkdocs_search_modal').modal('hide'); + }); + } + + }; + + var search_input = document.getElementById('mkdocs-search-query'); + + var term = getSearchTerm(); + if (term){ + search_input.value = term; + search(); + } + + search_input.addEventListener("keyup", search); + +}); diff --git a/site/mkdocs/js/text.js b/site/mkdocs/js/text.js new file mode 100644 index 000000000..17921b6e5 --- /dev/null +++ b/site/mkdocs/js/text.js @@ -0,0 +1,390 @@ +/** + * @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/requirejs/text for details + */ +/*jslint regexp: true */ +/*global require, XMLHttpRequest, ActiveXObject, + define, window, process, Packages, + java, location, Components, FileUtils */ + +define(['module'], function (module) { + 'use strict'; + + var text, fs, Cc, Ci, xpcIsWindows, + progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], + xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, + bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, + hasLocation = typeof location !== 'undefined' && location.href, + defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), + defaultHostName = hasLocation && location.hostname, + defaultPort = hasLocation && (location.port || undefined), + buildMap = {}, + masterConfig = (module.config && module.config()) || {}; + + text = { + version: '2.0.12', + + strip: function (content) { + //Strips declarations so that external SVG and XML + //documents can be added to a document without worry. Also, if the string + //is an HTML document, only the part inside the body tag is returned. + if (content) { + content = content.replace(xmlRegExp, ""); + var matches = content.match(bodyRegExp); + if (matches) { + content = matches[1]; + } + } else { + content = ""; + } + return content; + }, + + jsEscape: function (content) { + return content.replace(/(['\\])/g, '\\$1') + .replace(/[\f]/g, "\\f") + .replace(/[\b]/g, "\\b") + .replace(/[\n]/g, "\\n") + .replace(/[\t]/g, "\\t") + .replace(/[\r]/g, "\\r") + .replace(/[\u2028]/g, "\\u2028") + .replace(/[\u2029]/g, "\\u2029"); + }, + + createXhr: masterConfig.createXhr || function () { + //Would love to dump the ActiveX crap in here. Need IE 6 to die first. + var xhr, i, progId; + if (typeof XMLHttpRequest !== "undefined") { + return new XMLHttpRequest(); + } else if (typeof ActiveXObject !== "undefined") { + for (i = 0; i < 3; i += 1) { + progId = progIds[i]; + try { + xhr = new ActiveXObject(progId); + } catch (e) {} + + if (xhr) { + progIds = [progId]; // so faster next time + break; + } + } + } + + return xhr; + }, + + /** + * Parses a resource name into its component parts. Resource names + * look like: module/name.ext!strip, where the !strip part is + * optional. + * @param {String} name the resource name + * @returns {Object} with properties "moduleName", "ext" and "strip" + * where strip is a boolean. + */ + parseName: function (name) { + var modName, ext, temp, + strip = false, + index = name.indexOf("."), + isRelative = name.indexOf('./') === 0 || + name.indexOf('../') === 0; + + if (index !== -1 && (!isRelative || index > 1)) { + modName = name.substring(0, index); + ext = name.substring(index + 1, name.length); + } else { + modName = name; + } + + temp = ext || modName; + index = temp.indexOf("!"); + if (index !== -1) { + //Pull off the strip arg. + strip = temp.substring(index + 1) === "strip"; + temp = temp.substring(0, index); + if (ext) { + ext = temp; + } else { + modName = temp; + } + } + + return { + moduleName: modName, + ext: ext, + strip: strip + }; + }, + + xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, + + /** + * Is an URL on another domain. Only works for browser use, returns + * false in non-browser environments. Only used to know if an + * optimized .js version of a text resource should be loaded + * instead. + * @param {String} url + * @returns Boolean + */ + useXhr: function (url, protocol, hostname, port) { + var uProtocol, uHostName, uPort, + match = text.xdRegExp.exec(url); + if (!match) { + return true; + } + uProtocol = match[2]; + uHostName = match[3]; + + uHostName = uHostName.split(':'); + uPort = uHostName[1]; + uHostName = uHostName[0]; + + return (!uProtocol || uProtocol === protocol) && + (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && + ((!uPort && !uHostName) || uPort === port); + }, + + finishLoad: function (name, strip, content, onLoad) { + content = strip ? text.strip(content) : content; + if (masterConfig.isBuild) { + buildMap[name] = content; + } + onLoad(content); + }, + + load: function (name, req, onLoad, config) { + //Name has format: some.module.filext!strip + //The strip part is optional. + //if strip is present, then that means only get the string contents + //inside a body tag in an HTML string. For XML/SVG content it means + //removing the declarations so the content can be inserted + //into the current doc without problems. + + // Do not bother with the work if a build and text will + // not be inlined. + if (config && config.isBuild && !config.inlineText) { + onLoad(); + return; + } + + masterConfig.isBuild = config && config.isBuild; + + var parsed = text.parseName(name), + nonStripName = parsed.moduleName + + (parsed.ext ? '.' + parsed.ext : ''), + url = req.toUrl(nonStripName), + useXhr = (masterConfig.useXhr) || + text.useXhr; + + // Do not load if it is an empty: url + if (url.indexOf('empty:') === 0) { + onLoad(); + return; + } + + //Load the text. Use XHR if possible and in a browser. + if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { + text.get(url, function (content) { + text.finishLoad(name, parsed.strip, content, onLoad); + }, function (err) { + if (onLoad.error) { + onLoad.error(err); + } + }); + } else { + //Need to fetch the resource across domains. Assume + //the resource has been optimized into a JS module. Fetch + //by the module name + extension, but do not include the + //!strip part to avoid file system issues. + req([nonStripName], function (content) { + text.finishLoad(parsed.moduleName + '.' + parsed.ext, + parsed.strip, content, onLoad); + }); + } + }, + + write: function (pluginName, moduleName, write, config) { + if (buildMap.hasOwnProperty(moduleName)) { + var content = text.jsEscape(buildMap[moduleName]); + write.asModule(pluginName + "!" + moduleName, + "define(function () { return '" + + content + + "';});\n"); + } + }, + + writeFile: function (pluginName, moduleName, req, write, config) { + var parsed = text.parseName(moduleName), + extPart = parsed.ext ? '.' + parsed.ext : '', + nonStripName = parsed.moduleName + extPart, + //Use a '.js' file name so that it indicates it is a + //script that can be loaded across domains. + fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; + + //Leverage own load() method to load plugin value, but only + //write out values that do not have the strip argument, + //to avoid any potential issues with ! in file names. + text.load(nonStripName, req, function (value) { + //Use own write() method to construct full module value. + //But need to create shell that translates writeFile's + //write() to the right interface. + var textWrite = function (contents) { + return write(fileName, contents); + }; + textWrite.asModule = function (moduleName, contents) { + return write.asModule(moduleName, fileName, contents); + }; + + text.write(pluginName, nonStripName, textWrite, config); + }, config); + } + }; + + if (masterConfig.env === 'node' || (!masterConfig.env && + typeof process !== "undefined" && + process.versions && + !!process.versions.node && + !process.versions['node-webkit'])) { + //Using special require.nodeRequire, something added by r.js. + fs = require.nodeRequire('fs'); + + text.get = function (url, callback, errback) { + try { + var file = fs.readFileSync(url, 'utf8'); + //Remove BOM (Byte Mark Order) from utf8 files if it is there. + if (file.indexOf('\uFEFF') === 0) { + file = file.substring(1); + } + callback(file); + } catch (e) { + if (errback) { + errback(e); + } + } + }; + } else if (masterConfig.env === 'xhr' || (!masterConfig.env && + text.createXhr())) { + text.get = function (url, callback, errback, headers) { + var xhr = text.createXhr(), header; + xhr.open('GET', url, true); + + //Allow plugins direct access to xhr headers + if (headers) { + for (header in headers) { + if (headers.hasOwnProperty(header)) { + xhr.setRequestHeader(header.toLowerCase(), headers[header]); + } + } + } + + //Allow overrides specified in config + if (masterConfig.onXhr) { + masterConfig.onXhr(xhr, url); + } + + xhr.onreadystatechange = function (evt) { + var status, err; + //Do not explicitly handle errors, those should be + //visible via console output in the browser. + if (xhr.readyState === 4) { + status = xhr.status || 0; + if (status > 399 && status < 600) { + //An http 4xx or 5xx error. Signal an error. + err = new Error(url + ' HTTP status: ' + status); + err.xhr = xhr; + if (errback) { + errback(err); + } + } else { + callback(xhr.responseText); + } + + if (masterConfig.onXhrComplete) { + masterConfig.onXhrComplete(xhr, url); + } + } + }; + xhr.send(null); + }; + } else if (masterConfig.env === 'rhino' || (!masterConfig.env && + typeof Packages !== 'undefined' && typeof java !== 'undefined')) { + //Why Java, why is this so awkward? + text.get = function (url, callback) { + var stringBuffer, line, + encoding = "utf-8", + file = new java.io.File(url), + lineSeparator = java.lang.System.getProperty("line.separator"), + input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), + content = ''; + try { + stringBuffer = new java.lang.StringBuffer(); + line = input.readLine(); + + // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 + // http://www.unicode.org/faq/utf_bom.html + + // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: + // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 + if (line && line.length() && line.charAt(0) === 0xfeff) { + // Eat the BOM, since we've already found the encoding on this file, + // and we plan to concatenating this buffer with others; the BOM should + // only appear at the top of a file. + line = line.substring(1); + } + + if (line !== null) { + stringBuffer.append(line); + } + + while ((line = input.readLine()) !== null) { + stringBuffer.append(lineSeparator); + stringBuffer.append(line); + } + //Make sure we return a JavaScript string and not a Java string. + content = String(stringBuffer.toString()); //String + } finally { + input.close(); + } + callback(content); + }; + } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && + typeof Components !== 'undefined' && Components.classes && + Components.interfaces)) { + //Avert your gaze! + Cc = Components.classes; + Ci = Components.interfaces; + Components.utils['import']('resource://gre/modules/FileUtils.jsm'); + xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); + + text.get = function (url, callback) { + var inStream, convertStream, fileObj, + readData = {}; + + if (xpcIsWindows) { + url = url.replace(/\//g, '\\'); + } + + fileObj = new FileUtils.File(url); + + //XPCOM, you so crazy + try { + inStream = Cc['@mozilla.org/network/file-input-stream;1'] + .createInstance(Ci.nsIFileInputStream); + inStream.init(fileObj, 1, 0, false); + + convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] + .createInstance(Ci.nsIConverterInputStream); + convertStream.init(inStream, "utf-8", inStream.available(), + Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); + + convertStream.readString(inStream.available(), readData); + convertStream.close(); + inStream.close(); + callback(readData.value); + } catch (e) { + throw new Error((fileObj && fileObj.path || '') + ': ' + e); + } + }; + } + return text; +}); diff --git a/site/mkdocs/search_index.json b/site/mkdocs/search_index.json new file mode 100644 index 000000000..16698adee --- /dev/null +++ b/site/mkdocs/search_index.json @@ -0,0 +1,524 @@ +{ + "docs": [ + { + "location": "/", + "text": "The TorQ framework created by \nAquaQ Analytics\n forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from \ncode.kx.com\n (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.\n\n\nThe easiest way to get a production capture started is to download and install one of the \nStarter Packs\n (here's a \nshort video\n to get going), or read the manual. We also have a \nGoogle Group for questions/discussions\n.\n\n\nFor recent updates to TorQ please check out our \nblog\n.\n\n\nFor email support contact", + "title": "Home" + }, + { + "location": "/Overview/", + "text": "Overview\n\n\n\n\nWhat is kdb+?\n\n\nkdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.\n\n\n\n\nWhat is AquaQ TorQ?\n\n\nAquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document.\n\n\nAquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are:\n\n\n\n\n\n\nProcess Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level.\n\n\n\n\n\n\nCode Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped.\n\n\n\n\n\n\nConfiguration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously.\n\n\n\n\n\n\nUsage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message.\n\n\n\n\n\n\nIncoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level.\n\n\n\n\n\n\nAccess Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management.\n\n\n\n\n\n\nTimer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers.\n\n\n\n\n\n\nStandard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled.\n\n\n\n\n\n\nError Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue.\n\n\n\n\n\n\nVisualisation: Utilities to ease GUI development using websockets\n and HTML5.\n\n\n\n\n\n\nDocumentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included.\n\n\n\n\n\n\nUtilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have:\n\n\n\n\n\n\nCaching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame;\n\n\n\n\n\n\nTimezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones;\n\n\n\n\n\n\nEmail: an library to send emails;\n\n\n\n\n\n\nAsync Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions;\n\n\n\n\n\n\nHeartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment;\n\n\n\n\n\n\nData Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks;\n\n\n\n\n\n\nSubscriptions: allow processes to dynamically detect and\n subscribe to datasources;\n\n\n\n\n\n\nTickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files;\n\n\n\n\n\n\nDatabase Writing: utility functions for writing to, sorting and\n parting on disk databases;\n\n\n\n\n\n\nCompression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression.\n\n\n\n\n\n\n\n\n\n\nAquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own:\n\n\n\n\n\n\nDiscovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process;\n\n\n\n\n\n\nGateway: A fully synchronous and asynchronous gateway is provided.\n\n\nThe gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client;\n\n\n\n\n\n\nReal Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes.\n\n\n\n\n\n\nWrite Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n \nw.q\n\n\n\n\n\n\nTickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.;\n\n\n\n\n\n\nReporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports.\n\n\n\n\n\n\nHousekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks.\n\n\n\n\n\n\nFile Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed.\n\n\n\n\n\n\nMonitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks;\n\n\n\n\n\n\nKill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.\n\n\n\n\n\n\n\n\nA Large Scale Data Processing Platform\n\n\nOne of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. \nkdb+tick\n\nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this:\n\n\n\n\nHowever, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this:\n\n\n\n\nA common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms.\n\n\nOther common production features include:\n\n\n\n\n\n\nA modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc.\n\n\n\n\n\n\nA Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job\n\n\n\n\n\n\nProcesses that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter])\n\n\n\n\n\n\nA Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system\n\n\n\n\n\n\nA Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system.\n\n\n\n\n\n\nBasic Monitoring (section [sec:monitor]) of process availability\n\n\n\n\n\n\nHousekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.\n\n\n\n\n\n\n\n\nDo I Really Have to Read This Whole Document?\n\n\nHopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition:\n\n\n\n\n\n\nWe have added a load of usage information:\n\n\naquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ...\n\n\n\nIf sourcing from another script there are hooks to modify and extend\nthe usage information as required.\n\n\n\n\n\n\nWe have some pretty extensive logging:\n\n\naquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ...\n\n\n\n\n\n\n\nWe have added functionality to find functions or variables defined\n in the session, and also to search function definitions.\n\n\nq).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api ..\n\n\n\n\n\n\n\nWe have incorporated help.q.\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\n\n\nWe have separated and commented all of our config:\n\n\naquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...\n\n\n\n\n\n\n\n\n\nOperating System and kdb+ Version\n\n\nAquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.\n\n\n\n\nLicense\n\n\nThis code is released under the MIT license.", + "title": "About" + }, + { + "location": "/Overview/#overview", + "text": "", + "title": "Overview" + }, + { + "location": "/Overview/#what-is-kdb", + "text": "kdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.", + "title": "What is kdb+?" + }, + { + "location": "/Overview/#what-is-aquaq-torq", + "text": "AquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document. AquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are: Process Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level. Code Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped. Configuration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously. Usage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message. Incoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level. Access Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management. Timer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers. Standard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled. Error Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue. Visualisation: Utilities to ease GUI development using websockets\n and HTML5. Documentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included. Utilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have: Caching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame; Timezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones; Email: an library to send emails; Async Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions; Heartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment; Data Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks; Subscriptions: allow processes to dynamically detect and\n subscribe to datasources; Tickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files; Database Writing: utility functions for writing to, sorting and\n parting on disk databases; Compression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression. AquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own: Discovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process; Gateway: A fully synchronous and asynchronous gateway is provided. The gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client; Real Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes. Write Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n w.q Tickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.; Reporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports. Housekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks. File Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed. Monitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks; Kill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.", + "title": "What is AquaQ TorQ?" + }, + { + "location": "/Overview/#a-large-scale-data-processing-platform", + "text": "One of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. kdb+tick \nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this: However, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this: A common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms. Other common production features include: A modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc. A Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job Processes that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter]) A Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system A Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system. Basic Monitoring (section [sec:monitor]) of process availability Housekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.", + "title": "A Large Scale Data Processing Platform" + }, + { + "location": "/Overview/#do-i-really-have-to-read-this-whole-document", + "text": "Hopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition: We have added a load of usage information: aquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ... If sourcing from another script there are hooks to modify and extend\nthe usage information as required. We have some pretty extensive logging: aquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ... We have added functionality to find functions or variables defined\n in the session, and also to search function definitions. q).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api .. We have incorporated help.q. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions We have separated and commented all of our config: aquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...", + "title": "Do I Really Have to Read This Whole Document?" + }, + { + "location": "/Overview/#operating-system-and-kdb-version", + "text": "AquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.", + "title": "Operating System and kdb+ Version" + }, + { + "location": "/Overview/#license", + "text": "This code is released under the MIT license.", + "title": "License" + }, + { + "location": "/gettingstarted/", + "text": "Getting Started\n\n\nkdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented.\n\n\nWe provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will:\n\n\n\n\n\n\nensure the environment is set up correctly;\n\n\n\n\n\n\ndefine some common utility functions (such as logging);\n\n\n\n\n\n\nexecute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files;\n\n\n\n\n\n\nload configuration;\n\n\n\n\n\n\nload the shared code based;\n\n\n\n\n\n\nset up the message handlers;\n\n\n\n\n\n\nload any required bespoke scripts.\n\n\n\n\n\n\nThe behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.\n\n\n\n\nUsing torq.q\n\n\ntorq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below.\n\n\n$ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1\n\n\n\nTo load a file, do:\n\n\n$ q torq.q -load myfile.q -debug -proctype testproc -procname test1\n\n\n\nIt can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script.\n\n\nmyvar:@[value;`myvar;1 2 3]\n\n\n\nThe available command line parameters are:\n\n\n\n\n\n\n\n\nCmd Line Param\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n-procname x -proctype y\n\n\nThe process name and process type\n\n\n\n\n\n\n-procfile x\n\n\nThe name of the file to get the process information from\n\n\n\n\n\n\n-load x [y..z]\n\n\nThe files or database directory to load\n\n\n\n\n\n\n-loaddir x [y..z]\n\n\nLoad all .q, .k files in specified directories\n\n\n\n\n\n\n-localtime\n\n\nSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P\n\n\n\n\n\n\n-trap\n\n\nAny errors encountered during initialization when loading external files will be caught and logged, processing will continue\n\n\n\n\n\n\n-stop\n\n\nStop loading the file if an error is encountered but do not exit\n\n\n\n\n\n\n-noredirect\n\n\nDo not redirect std out/std err to a file (useful for debugging)\n\n\n\n\n\n\n-noredirectalias\n\n\nDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)\n\n\n\n\n\n\n-noconfig\n\n\nDo not load configuration\n\n\n\n\n\n\n-nopi\n\n\nReset the definition of .z.pi to the initial value (useful for debugging)\n\n\n\n\n\n\n-debug\n\n\nEquivalent to [-nopi -noredirect]\n\n\n\n\n\n\n-usage\n\n\nPrint usage info and exit\n\n\n\n\n\n\n\n\nIn addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.\n\n\n\n\nEnvironment Variables\n\n\nFive environment variables are required:\n\n\n\n\n\n\n\n\nEnvironment Variable\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nKDBCONFIG\n\n\nThe base configuration directory\n\n\n\n\n\n\nKDBCODE\n\n\nThe base code directory\n\n\n\n\n\n\nKDBLOGS\n\n\nWhere standard out/error and usage logs are written\n\n\n\n\n\n\nKDBHTML\n\n\nContains HTML files\n\n\n\n\n\n\nKDBLIB\n\n\nContains supporting library files\n\n\n\n\n\n\n\n\ntorq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.\n\n\n\n\nProcess Identification\n\n\nAt the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded.\n\n\nThe most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways:\n\n\n\n\n\n\nFrom the process file in the default location of\n $KDBCONFIG/process.csv;\n\n\n\n\n\n\nFrom the process file defined using the command line parameter\n -procfile;\n\n\n\n\n\n\nFrom the port number it is started on, by referring to the process\n file for further process details;\n\n\n\n\n\n\nUsing the command line parameters -proctype and -procname;\n\n\n\n\n\n\nBy defining .proc.proctype and .proc.procname in a script which\n loads torq.q.\n\n\n\n\n\n\nFor options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file).\n\n\nFor option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry.\n\n\nThe process file has format as below.\n\n\naquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2\n\n\n\nThe process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.\n\n\n\n\nLogging\n\n\nBy default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are:\n\n\n\n\n\n\n\n\nLog File\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nout_[procname]_[date].log\n\n\nTimestamped out log\n\n\n\n\n\n\nerr_[procname]_[date].log\n\n\nTimestamped error log\n\n\n\n\n\n\nout_[procname].log\n\n\nAlias to current log log\n\n\n\n\n\n\nerr_[procname].log\n\n\nAlias to current error log\n\n\n\n\n\n\n\n\nThe date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.\n\n\n\n\nConfiguration Loading\n\n\nDefault Configuration Loading\n\n\nDefault process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:-\n\n\n\n\n\n\ndefault.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments;\n\n\n\n\n\n\n[[proctype]]{}.q: configuration for a specific process type;\n\n\n\n\n\n\n[[procname]]{}.q: configuration for a specific named process.\n\n\n\n\n\n\nThe only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.\n\n\nApplication Configuration Loading\n\n\nApplication specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:-\n\n\n\n\n\n\ndefault.q: Application default configuration loaded by all\n processes.\n\n\n\n\n\n\n[[proctype]]{}.q: Application specific configuration for a\n specific process type.\n\n\n\n\n\n\n[[procname]]{}.q: Appliction specific configuration for a specific\n named process.\n\n\n\n\n\n\nAll loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory.\n\n\nAll configuration is loaded before code.\n\n\n\n\nCode Loading\n\n\nCode is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder:\n\n\n\n\n\n\n$KDBCODE/common: shared codebase loaded by all processes;\n\n\n\n\n\n\n$KDBCODE/[proctype]: code for a specific process type;\n\n\n\n\n\n\n$KDBCODE/[procname]: code for a specific process name;\n\n\n\n\n\n\nFor any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded.\n\n\nAdditional directories can be loaded using the -loaddir command line\nparameter.\n\n\n\n\nInitialization Errors\n\n\nInitialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", + "title": "Getting Started" + }, + { + "location": "/gettingstarted/#getting-started", + "text": "kdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented. We provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will: ensure the environment is set up correctly; define some common utility functions (such as logging); execute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files; load configuration; load the shared code based; set up the message handlers; load any required bespoke scripts. The behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.", + "title": "Getting Started" + }, + { + "location": "/gettingstarted/#using-torqq", + "text": "torq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below. $ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1 To load a file, do: $ q torq.q -load myfile.q -debug -proctype testproc -procname test1 It can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script. myvar:@[value;`myvar;1 2 3] The available command line parameters are: Cmd Line Param Description -procname x -proctype y The process name and process type -procfile x The name of the file to get the process information from -load x [y..z] The files or database directory to load -loaddir x [y..z] Load all .q, .k files in specified directories -localtime Sets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P -trap Any errors encountered during initialization when loading external files will be caught and logged, processing will continue -stop Stop loading the file if an error is encountered but do not exit -noredirect Do not redirect std out/std err to a file (useful for debugging) -noredirectalias Do not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix) -noconfig Do not load configuration -nopi Reset the definition of .z.pi to the initial value (useful for debugging) -debug Equivalent to [-nopi -noredirect] -usage Print usage info and exit In addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.", + "title": "Using torq.q" + }, + { + "location": "/gettingstarted/#environment-variables", + "text": "Five environment variables are required: Environment Variable Description KDBCONFIG The base configuration directory KDBCODE The base code directory KDBLOGS Where standard out/error and usage logs are written KDBHTML Contains HTML files KDBLIB Contains supporting library files torq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.", + "title": "Environment Variables" + }, + { + "location": "/gettingstarted/#process-identification", + "text": "At the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded. The most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways: From the process file in the default location of\n $KDBCONFIG/process.csv; From the process file defined using the command line parameter\n -procfile; From the port number it is started on, by referring to the process\n file for further process details; Using the command line parameters -proctype and -procname; By defining .proc.proctype and .proc.procname in a script which\n loads torq.q. For options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file). For option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry. The process file has format as below. aquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2 The process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.", + "title": "Process Identification" + }, + { + "location": "/gettingstarted/#logging", + "text": "By default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are: Log File Description out_[procname]_[date].log Timestamped out log err_[procname]_[date].log Timestamped error log out_[procname].log Alias to current log log err_[procname].log Alias to current error log The date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.", + "title": "Logging" + }, + { + "location": "/gettingstarted/#configuration-loading", + "text": "", + "title": "Configuration Loading" + }, + { + "location": "/gettingstarted/#default-configuration-loading", + "text": "Default process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:- default.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments; [[proctype]]{}.q: configuration for a specific process type; [[procname]]{}.q: configuration for a specific named process. The only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.", + "title": "Default Configuration Loading" + }, + { + "location": "/gettingstarted/#application-configuration-loading", + "text": "Application specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:- default.q: Application default configuration loaded by all\n processes. [[proctype]]{}.q: Application specific configuration for a\n specific process type. [[procname]]{}.q: Appliction specific configuration for a specific\n named process. All loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory. All configuration is loaded before code.", + "title": "Application Configuration Loading" + }, + { + "location": "/gettingstarted/#code-loading", + "text": "Code is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder: $KDBCODE/common: shared codebase loaded by all processes; $KDBCODE/[proctype]: code for a specific process type; $KDBCODE/[procname]: code for a specific process name; For any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded. Additional directories can be loaded using the -loaddir command line\nparameter.", + "title": "Code Loading" + }, + { + "location": "/gettingstarted/#initialization-errors", + "text": "Initialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", + "title": "Initialization Errors" + }, + { + "location": "/utilities/", + "text": "Utilities\n\n\nWe have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.\n\n\n\n\napi.q\n\n\nThis provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order.\n\n\nDefinitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition.\n\n\nWhether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace.\n\n\n.api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done.\n\n\n\n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 \n ..\n mmax | function .q 1 \n ..\n .clients.MAXIDLE | variable .clients 0 \n ..\n .access.MAXSIZE | variable .access 0 \n ..\n .cache.maxsize | variable .cache 1 \nThe maximum size in..\n .cache.maxindividual| variable .cache 1 \nThe maximum size in..\n max | primitive 1 \n ..\n q).api.f\nmax*\n \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n \n \n \n max | primitive 1 \n \n \n \n\n\n\n\n\n.api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches.\n\n\n.api.s is used to search function definitions for specific values.\n\n\nq).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE\ns:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n..\n\n\n\n.api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views.\n\n\nq).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n..\n\n\n\n.api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging.\n\n\nq)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g\n\n\n\n\n\ntimer.q\n\n\nkdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms).\n\n\nThere are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen\n\n\n\n\n\n\nmode 0 will reschedule for T0+P;\n\n\n\n\n\n\nmode 1 will reschedule for T1+P;\n\n\n\n\n\n\nmode 2 will reschedule for T2+P.\n\n\n\n\n\n\nBoth mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.\n\n\n\n\nasync.q\n\n\nkdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway):\n\n\n\n\n\n\ndeferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed;\n\n\n\n\n\n\nasynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result.\n\n\n\n\n\n\nThe code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results).\n\n\nq).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\"\n\n\n\n.async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready.\n\n\nq).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3\n\n\n\nFor more details, see .api.p\u201c.async.*\u201d.\n\n\n\n\ncache.q\n\n\ncache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries.\n\n\nThe result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold:\n\n\n\n\n\n\nthe function is run multiple times with the same parameters (perhaps\n different clients all want the same result set);\n\n\n\n\n\n\nthe result set changes infrequently or the clients can accept\n slightly out-of-date values;\n\n\n\n\n\n\nthe result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts.\n\n\n\n\n\n\nThe cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size.\n\n\nIf a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored.\n\n\nThe main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache.\n\n\nThe function is run and the result placed in the cache:\n\n\nq)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3\n\n\n\nThe second time round, the result set is returned immediately from the\ncache as we are within the staletime value:\n\n\nq)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3\n\n\n\nIf the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned:\n\n\nq)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3\n\n\n\nThe cache performance is tracked:\n\n\nq).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2\n\n\n\nSee .api.p.cache.*for more details.\n\n\n\n\nemail.q\n\n\nA library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details.\n\n\nThe main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nurl\n\n\nY\n\n\nsymbol\n\n\nURL of mail server e.g. smtp://mail.example.com\n\n\n\n\n\n\nuser\n\n\nY\n\n\nsymbol\n\n\nUsername of user to login as\n\n\n\n\n\n\npassword\n\n\nY\n\n\nsymbol\n\n\nPassword for user\n\n\n\n\n\n\nusessl\n\n\nN\n\n\nboolean\n\n\nConnect using SSL/TLS, defaults to false\n\n\n\n\n\n\nfrom\n\n\nN\n\n\nsymbol\n\n\nEmail from field, defaults to torq@aquaq.co.uk\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i\n\n\n\nThe email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nto\n\n\nY\n\n\nsymbol (list)\n\n\naddresses to send to\n\n\n\n\n\n\nsubject\n\n\nY\n\n\nchar list\n\n\nemail subject\n\n\n\n\n\n\nbody\n\n\nY\n\n\nlist of char lists\n\n\nemail body\n\n\n\n\n\n\ncc\n\n\nN\n\n\nsymbol (list)\n\n\ncc list\n\n\n\n\n\n\nbodyType\n\n\nN\n\n\nsymbol\n\n\ntype of email body. Can be `text or `html. Default is `text\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i\n\n\n\nNote that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time.\n\n\nTwo further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection.\n\n\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i\n\n\n\n.email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information.\n\n\nq).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n...\n\n\n\nAdditionally functions are available within the email library. See\n.api.p.email.*for more details.\n\n\nEmails with SSL certificates from Windows\n\n\nIf you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are:\n\n\n\n\n\n\ndownload\n \nthis\n\n and save it to your PC\n\n\n\n\n\n\nset\n\n\n CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt\n\n\n\n\n\n\n\nMore information is available\n\nhere\n\nand \nhere\n\n\n\n\ntimezone.q\n\n\nA slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.\n\n\n\n\ncompress.q\n\n\ncompress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table.\n\n\nThe utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed.\n\n\nCompression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.)\n\n\nThe compressionconfig.csv file should have the following format:\n\n\ntable,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7\n\n\n\nThis file can be placed in the config folder, or a path to the file\ngiven at run time.\n\n\nThe compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file.\n\n\nThis utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed:\n\n\n.cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nThis function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already.\n\n\nfullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n....\n\n\n\nTo then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles):\n\n\n.cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nTo run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use:\n\n\n.cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file\n\n\n\nLogs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio:\n\n\n|comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file.\n\n\n\nA table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab:\n\n\nfile algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n.....\n\n\n\nA note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.\n\n\n\n\ndataloader.q\n\n\nThis script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of \nthe data loader example on\ncode.kx\n.\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields:\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nheaders\n\n\nY\n\n\nsymbol list\n\n\nNames of the header columns in the file\n\n\n\n\n\n\ntypes\n\n\nY\n\n\nchar list\n\n\nData types to read from the file\n\n\n\n\n\n\nseparator\n\n\nY\n\n\nchar[list]\n\n\nDelimiting character. Enlist it if first line of file is header data\n\n\n\n\n\n\ntablename\n\n\nY\n\n\nsymbol\n\n\nName of table to write data to\n\n\n\n\n\n\ndbdir\n\n\nY\n\n\nsymbol\n\n\nDirectory to write data to\n\n\n\n\n\n\npartitiontype\n\n\nN\n\n\nsymbol\n\n\nPartitioning to use. Must be one of\n\n\n\n\n\n\n`date`month`year`int. Default is `date\n\n\n\n\n\n\n\n\n\n\n\n\npartitioncol\n\n\nN\n\n\nsymbol\n\n\nColumn to use to extract partition information.Default is `time\n\n\n\n\n\n\ndataprocessfunc\n\n\nN\n\n\nfunction\n\n\nDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}\n\n\n\n\n\n\nchunksize\n\n\nN\n\n\nint\n\n\nData size in bytes to read in one chunk. Default is 100 MB\n\n\n\n\n\n\ncompression\n\n\nN\n\n\nint list\n\n\nCompression parameters to use e.g. 17 2 6. Default is empty list for no compression\n\n\n\n\n\n\ngc\n\n\nN\n\n\nboolean\n\n\nWhether to run garbage collection at appropriate points. Default is 0b (false)\n\n\n\n\n\n\n\n\nExample usage:\n\n\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]\n\n\n\n\n\nsubscriptions.q\n\n\nThe subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions).\n\n\n.sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant:\n\n\n.sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\n.sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants:\n\n\n.sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nThe subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants:\n\n\n.sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nSee .api.p\u201c.sub.*\u201d for more details.\n\n\n\n\npubsub.q\n\n\npubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.\n\n\n\n\ntplogutils.q\n\n\ntplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.\n\n\n\n\nmonitoringchecks.q\n\n\nmonitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure:\n\n\n\n\n\n\ntable sizes are increasing during live capture\n\n\n\n\n\n\nthe HDB data saves down correctly\n\n\n\n\n\n\nthe allocated memory of a process does not increase past a certain\n size\n\n\n\n\n\n\nthe size of the symbol list in memory doesn\u2019t grow to big\n\n\n\n\n\n\nthe process does not have too much on its pending subscriber queue\n\n\n\n\n\n\nThese checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.\n\n\n\n\nheartbeat.q\n\n\nheartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.\n\n\n\n\ndbwriteutils.q\n\n\nThis contains a set of utility functions for writing data to historic\ndatabases.\n\n\nSorting and Attributes\n\n\nThe sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration).\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\n\n\n\nAs an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true):\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0\n\n\n\nTo invoke the sort utilities, supply a list of (tablename; partitions)\ne.g.\n\n\nq).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table\n\n\n\nA different sort configuration file can be loaded with\n\n\n.sort.getsortcsv[`:file]\n\n\n\nGarbage Collection\n\n\nThe garbage collection utility prints some debug information before and\nafter the garbage collection.\n\n\nq).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n\n\n\nTable Manipulation\n\n\nThe table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.\n\n\n\n\nhelp.q\n\n\nThe standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[\ncode.kx\n].\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\nhtml.q\n\n\nAn HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the \n.html\n namespace.\n\n\n\n\nAdditional Utilities\n\n\nThere are some additional user contributed utility scripts available on\ncode.kx which are good candidates for inclusion. These could either be\ndropped into the common code directory, or if not globally applicable\nthen in the code directory for either the process type or name. The full\nset of user contributed code is documented\n\nhere\n.\n\n\n\n\nFull API\n\n\nThe full public api can be found by running\n\n\nq).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n..\n\n\n\nCombined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions.\n\n\n\n\n\n\n\n\nNamespace\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.proc\n\n\nProcess API\n\n\n\n\n\n\n.lg\n\n\nStandard out/error logging API\n\n\n\n\n\n\n.err\n\n\nError throwing API\n\n\n\n\n\n\n.usage\n\n\nUsage logging API\n\n\n\n\n\n\n.access\n\n\nPermissions API\n\n\n\n\n\n\n.clients\n\n\nClient tracking API\n\n\n\n\n\n\n.servers\n\n\nServer tracking API\n\n\n\n\n\n\n.async\n\n\nAsync communication API\n\n\n\n\n\n\n.timer\n\n\nTimer API\n\n\n\n\n\n\n.cache\n\n\nCaching API\n\n\n\n\n\n\n.tz\n\n\nTimezone conversions API\n\n\n\n\n\n\n.checks\n\n\nMonitoring API\n\n\n\n\n\n\n.cmp\n\n\nCompression API\n\n\n\n\n\n\n.ps\n\n\nPublish and Subscribe API\n\n\n\n\n\n\n.hb\n\n\nHeartbeating API\n\n\n\n\n\n\n.loader\n\n\nData Loader API\n\n\n\n\n\n\n.sort\n\n\nData sorting and attribute setting API\n\n\n\n\n\n\n.sub\n\n\nSubscription API\n\n\n\n\n\n\n.gc\n\n\nGarbage Collection API\n\n\n\n\n\n\n.tplog\n\n\nTickerplant Log Replay API\n\n\n\n\n\n\n.api\n\n\nAPI management API\n\n\n\n\n\n\n\n\n\n\nModified u.q\n\n\nStarting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.", + "title": "Utilities" + }, + { + "location": "/utilities/#utilities", + "text": "We have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.", + "title": "Utilities" + }, + { + "location": "/utilities/#apiq", + "text": "This provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order. Definitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition. Whether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace. .api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done. \n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 ..\n mmax | function .q 1 ..\n .clients.MAXIDLE | variable .clients 0 ..\n .access.MAXSIZE | variable .access 0 ..\n .cache.maxsize | variable .cache 1 The maximum size in..\n .cache.maxindividual| variable .cache 1 The maximum size in..\n max | primitive 1 ..\n q).api.f max* \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n max | primitive 1 .api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches. .api.s is used to search function definitions for specific values. q).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE s:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n.. .api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views. q).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n.. .api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging. q)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g", + "title": "api.q" + }, + { + "location": "/utilities/#timerq", + "text": "kdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms). There are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen mode 0 will reschedule for T0+P; mode 1 will reschedule for T1+P; mode 2 will reschedule for T2+P. Both mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.", + "title": "timer.q" + }, + { + "location": "/utilities/#asyncq", + "text": "kdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway): deferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed; asynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result. The code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results). q).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\" .async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready. q).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3 For more details, see .api.p\u201c.async.*\u201d.", + "title": "async.q" + }, + { + "location": "/utilities/#cacheq", + "text": "cache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries. The result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold: the function is run multiple times with the same parameters (perhaps\n different clients all want the same result set); the result set changes infrequently or the clients can accept\n slightly out-of-date values; the result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts. The cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size. If a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored. The main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache. The function is run and the result placed in the cache: q)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3 The second time round, the result set is returned immediately from the\ncache as we are within the staletime value: q)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3 If the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned: q)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3 The cache performance is tracked: q).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2 See .api.p.cache.*for more details.", + "title": "cache.q" + }, + { + "location": "/utilities/#emailq", + "text": "A library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details. The main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure. Parameter Req Type Description url Y symbol URL of mail server e.g. smtp://mail.example.com user Y symbol Username of user to login as password Y symbol Password for user usessl N boolean Connect using SSL/TLS, defaults to false from N symbol Email from field, defaults to torq@aquaq.co.uk debug N integer Debug level. 0=no output, 1=normal output, 2=verbose output. Default is 1 An example is: q).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i The email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure. Parameter Req Type Description to Y symbol (list) addresses to send to subject Y char list email subject body Y list of char lists email body cc N symbol (list) cc list bodyType N symbol type of email body. Can be `text or `html. Default is `text debug N integer Debug level. 0=no output, 1=normal output,2=verbose output. Default is 1 An example is: q).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i Note that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time. Two further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection. q).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i .email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information. q).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n... Additionally functions are available within the email library. See\n.api.p.email.*for more details.", + "title": "email.q" + }, + { + "location": "/utilities/#emails-with-ssl-certificates-from-windows", + "text": "If you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are: download\n this \n and save it to your PC set CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt More information is available here \nand here", + "title": "Emails with SSL certificates from Windows" + }, + { + "location": "/utilities/#timezoneq", + "text": "A slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.", + "title": "timezone.q" + }, + { + "location": "/utilities/#compressq", + "text": "compress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table. The utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed. Compression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.) The compressionconfig.csv file should have the following format: table,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7 This file can be placed in the config folder, or a path to the file\ngiven at run time. The compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file. This utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed: .cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file This function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already. fullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n.... To then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles): .cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file To run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use: .cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file Logs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio: |comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file. A table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab: file algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n..... A note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.", + "title": "compress.q" + }, + { + "location": "/utilities/#dataloaderq", + "text": "This script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of the data loader example on\ncode.kx .\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields: Parameter Req Type Description headers Y symbol list Names of the header columns in the file types Y char list Data types to read from the file separator Y char[list] Delimiting character. Enlist it if first line of file is header data tablename Y symbol Name of table to write data to dbdir Y symbol Directory to write data to partitiontype N symbol Partitioning to use. Must be one of `date`month`year`int. Default is `date partitioncol N symbol Column to use to extract partition information.Default is `time dataprocessfunc N function Diadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y} chunksize N int Data size in bytes to read in one chunk. Default is 100 MB compression N int list Compression parameters to use e.g. 17 2 6. Default is empty list for no compression gc N boolean Whether to run garbage collection at appropriate points. Default is 0b (false) Example usage: .loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]", + "title": "dataloader.q" + }, + { + "location": "/utilities/#subscriptionsq", + "text": "The subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions). .sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant: .sub.getsubscriptionhandles[`tickerplant;`;()!()] .sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants: .sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] The subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants: .sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] See .api.p\u201c.sub.*\u201d for more details.", + "title": "subscriptions.q" + }, + { + "location": "/utilities/#pubsubq", + "text": "pubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.", + "title": "pubsub.q" + }, + { + "location": "/utilities/#tplogutilsq", + "text": "tplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.", + "title": "tplogutils.q" + }, + { + "location": "/utilities/#monitoringchecksq", + "text": "monitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure: table sizes are increasing during live capture the HDB data saves down correctly the allocated memory of a process does not increase past a certain\n size the size of the symbol list in memory doesn\u2019t grow to big the process does not have too much on its pending subscriber queue These checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.", + "title": "monitoringchecks.q" + }, + { + "location": "/utilities/#heartbeatq", + "text": "heartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.", + "title": "heartbeat.q" + }, + { + "location": "/utilities/#dbwriteutilsq", + "text": "This contains a set of utility functions for writing data to historic\ndatabases.", + "title": "dbwriteutils.q" + }, + { + "location": "/utilities/#sorting-and-attributes", + "text": "The sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration). aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1 As an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true): aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0 To invoke the sort utilities, supply a list of (tablename; partitions)\ne.g. q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table A different sort configuration file can be loaded with .sort.getsortcsv[`:file]", + "title": "Sorting and Attributes" + }, + { + "location": "/utilities/#garbage-collection", + "text": "The garbage collection utility prints some debug information before and\nafter the garbage collection. q).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB", + "title": "Garbage Collection" + }, + { + "location": "/utilities/#table-manipulation", + "text": "The table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.", + "title": "Table Manipulation" + }, + { + "location": "/utilities/#helpq", + "text": "The standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[ code.kx ]. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions", + "title": "help.q" + }, + { + "location": "/utilities/#htmlq", + "text": "An HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the .html namespace.", + "title": "html.q" + }, + { + "location": "/utilities/#additional-utilities", + "text": "There are some additional user contributed utility scripts available on\ncode.kx which are good candidates for inclusion. These could either be\ndropped into the common code directory, or if not globally applicable\nthen in the code directory for either the process type or name. The full\nset of user contributed code is documented here .", + "title": "Additional Utilities" + }, + { + "location": "/utilities/#full-api", + "text": "The full public api can be found by running q).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n.. Combined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions. Namespace Description .proc Process API .lg Standard out/error logging API .err Error throwing API .usage Usage logging API .access Permissions API .clients Client tracking API .servers Server tracking API .async Async communication API .timer Timer API .cache Caching API .tz Timezone conversions API .checks Monitoring API .cmp Compression API .ps Publish and Subscribe API .hb Heartbeating API .loader Data Loader API .sort Data sorting and attribute setting API .sub Subscription API .gc Garbage Collection API .tplog Tickerplant Log Replay API .api API management API", + "title": "Full API" + }, + { + "location": "/utilities/#modified-uq", + "text": "Starting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.", + "title": "Modified u.q" + }, + { + "location": "/handlers/", + "text": "Message Handlers\n\n\nThere is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to\n\ncode.kx\n.\n\n\nEvery external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file.\n\n\n\n\n\n\n\n\nScript\n\n\nNS\n\n\nDiag\n\n\nFunction\n\n\nModifies\n\n\n\n\n\n\n\n\n\n\nlogusage.q\n\n\n.usage\n\n\nY\n\n\nLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates\n\n\npw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer\n\n\n\n\n\n\ncontrolaccess.q\n\n\n.access\n\n\nN\n\n\nRestrict access for set of users/user groups to a list of functions, and from a defined set of servers\n\n\npw, pg, ps, ws, ph, pp, pi\n\n\n\n\n\n\ntrackclients.q\n\n\n.clients\n\n\nY\n\n\nTrack client process details including then number of requests and cumulative data size returned\n\n\npo, pg, ps, ws, pc\n\n\n\n\n\n\ntrackservers.q\n\n\n.servers\n\n\nY\n\n\nDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.\n\n\npc, timer\n\n\n\n\n\n\nzpsignore.q\n\n\n.zpsignore\n\n\nN\n\n\nOverride async message handler based on certain message patterns\n\n\nps\n\n\n\n\n\n\nwriteaccess.q\n\n\n.readonly\n\n\nN\n\n\nRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.\n\n\npg, ps, ws, ph, pp\n\n\n\n\n\n\n\n\nEach customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files.\n\n\n/- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)\n\n\n\n\n\nlogusage.q\n\n\nlogusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx.\n\n\nIn its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because:\n\n\n\n\n\n\nlogging to memory enables easy interrogation of client interaction;\n\n\n\n\n\n\nlogging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail;\n\n\n\n\n\n\nlogging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution;\n\n\n\n\n\n\nlogging after a query captures the time taken, result set size and\n resulting state;\n\n\n\n\n\n\nlogging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems.\n\n\n\n\n\n\nThe following fields are logged in .usage.usage:\n\n\n\n\n\n\n\n\nField\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\ntime\n\n\nTime the row was added to the table\n\n\n\n\n\n\nid\n\n\nID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication\n\n\n\n\n\n\ntimer\n\n\nExecution time. Null for rows with status=b (before)\n\n\n\n\n\n\nzcmd\n\n\n.z handler the query arrived through\n\n\n\n\n\n\nstatus\n\n\nQuery status. One of b, c or e (before, complete, error)\n\n\n\n\n\n\na\n\n\nAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname\n\n\n\n\n\n\nu\n\n\nUsername of sender\n\n\n\n\n\n\nw\n\n\nHandle of sender\n\n\n\n\n\n\ncmd\n\n\nCommand sent\n\n\n\n\n\n\nmem\n\n\nMemory statistics\n\n\n\n\n\n\nsz\n\n\nSize of result. Null for rows with status of b or e\n\n\n\n\n\n\nerror\n\n\nError message\n\n\n\n\n\n\n\n\n\n\ncontrolaccess.q\n\n\ncontrolaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects:\n\n\n\n\n\n\nthe host/ip address of the servers which are allowed to access the\n process;\n\n\n\n\n\n\ndefinition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do;\n\n\n\n\n\n\nthe group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions;\n\n\n\n\n\n\nthe maximum size of the result set returned to a client.\n\n\n\n\n\n\nThe access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions.\n\n\n\n\n\n\n\n\nFile\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n*_hosts.csv\n\n\nContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed\n\n\n\n\n\n\n*_users.csv\n\n\nContains individual users and the user groups they are are a member of\n\n\n\n\n\n\n*_functions.csv\n\n\nContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users\n\n\n\n\n\n\n\n\nThe permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv.\n\n\nWhen a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.\n\n\n\n\ntrackclients.q\n\n\ntrackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service.\n\n\nWhenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.\n\n\n\n\ntrackservers.q\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.\n\n\n\n\nzpsignore.q\n\n\nzpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.\n\n\n\n\nwriteaccess.q\n\n\nwriteaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.\n\n\npermissions.q\n\n\npermissions.q is used to control client access to a server process. It\nallows:\n\n\n\n\n\n\nAccess control via username/password access, either in combination\n with the -u/U process flags or in place of them.\n\n\n\n\n\n\nDefinition of user groups, which control variable access.\n\n\n\n\n\n\nDefinition of user roles, which allow control over function\n execution.\n\n\n\n\n\n\nDeeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses.\n\n\n\n\n\n\nAccess restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions.\n\n\nPermissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself.\n\n\nThe access schema consists of 7 control tables:\n\n\n\n\n\n\n\n\nName\n\n\nDescriptions\n\n\n\n\n\n\n\n\n\n\nUser\n\n\nUsername, locality, encryption type and password hash\n\n\n\n\n\n\nUsergroup\n\n\nUser and their group.\n\n\n\n\n\n\nUserrole\n\n\nUser and role.\n\n\n\n\n\n\nFunctiongroup\n\n\nFunctions and their group\n\n\n\n\n\n\nFunction\n\n\nFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.\n\n\n\n\n\n\nAccess\n\n\nVariable names, the groups which can access them, and the read or write access level.\n\n\n\n\n\n\nVirtualtable\n\n\nVirtual table name, main table name, and the where clause it enforces on access to that table.\n\n\n\n\n\n\n\n\nIn addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself.\n\n\nA user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g.\n\n\n\n\n\n\n\n\nTable\n\n\nGroup\n\n\nLevel\n\n\n\n\n\n\n\n\n\n\nquote\n\n\nheadtrader\n\n\nwrite\n\n\n\n\n\n\ntrade\n\n\njuniortrader\n\n\nread\n\n\n\n\n\n\n\n\nHere, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow.\n\n\nThe permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments.\n\n\nFunction access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar:\n\n\n\n\n\n\n\n\nFunction\n\n\nRole\n\n\nParam. Check\n\n\n\n\n\n\n\n\n\n\ntimedata\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\ntimedata\n\n\nnormal user\n\n\n{x[`bkttype] in `hh}\n\n\n\n\n\n\nselect\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\n\n\nThe parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check.\n\n\nFurther restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g.\n\n\n\n\n\n\n\n\nVirtual Table\n\n\nTable\n\n\nWhere Clause\n\n\n\n\n\n\n\n\n\n\ntrade_lse\n\n\ntrade\n\n\n,(in;`src;\u201cL\u201d)\n\n\n\n\n\n\nquote_new\n\n\nquote\n\n\n,(\n;`time;(-;`.z.p;01:00))\n\n\n\n\n\n\n\n\nWhen a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable.\n\n\nIf the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role.\n\n\nThe permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions.\n\n\nAdding to the groups and roles is handled by the functions:\n\n\nadduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"]\n\n\n\nwhich are further explained in the script API.\n\n\nPermission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.\n\n\nUsage Example\n\n\nTo connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so:\n\n\n.pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist(\n;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]\n\n\n\nThis provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth.\n\n\nAdam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it.\n\n\nAdditionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined:\n\n\n.pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp]\n\n\n\nAnd then grant that role access to the .u.upd function:\n\n\n.pm.grantfunction[`.u.upd;`tp;{1b}]\n\n\n\nAlthough the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.\n\n\nGateway Example\n\n\nThe gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified.\n\n\nWithin the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]\n\n\n\nSince .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]\n\n\n\n\n\nDiagnostic Reporting\n\n\nThe message handler modifications provide a wealth of diagnostic\ninformation including:\n\n\n\n\n\n\nthe timings and memory usage for every query run on a process;\n\n\n\n\n\n\nfailed queries;\n\n\n\n\n\n\nclients trying to do things they are not permissioned for;\n\n\n\n\n\n\nthe clients which are querying often and/or regularly extracting\n large datasets;\n\n\n\n\n\n\nthe number of clients currently connected;\n\n\n\n\n\n\ntimer calls and how long they take.\n\n\n\n\n\n\nAlthough not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", + "title": "Handlers" + }, + { + "location": "/handlers/#message-handlers", + "text": "There is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to code.kx . Every external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file. Script NS Diag Function Modifies logusage.q .usage Y Log all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates pw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer controlaccess.q .access N Restrict access for set of users/user groups to a list of functions, and from a defined set of servers pw, pg, ps, ws, ph, pp, pi trackclients.q .clients Y Track client process details including then number of requests and cumulative data size returned po, pg, ps, ws, pc trackservers.q .servers Y Discover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service. pc, timer zpsignore.q .zpsignore N Override async message handler based on certain message patterns ps writeaccess.q .readonly N Restrict client write access to prevent any modification to data in place. Also disables all HTTP access. pg, ps, ws, ph, pp Each customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files. /- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)", + "title": "Message Handlers" + }, + { + "location": "/handlers/#logusageq", + "text": "logusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx. In its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because: logging to memory enables easy interrogation of client interaction; logging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail; logging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution; logging after a query captures the time taken, result set size and\n resulting state; logging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems. The following fields are logged in .usage.usage: Field Description time Time the row was added to the table id ID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication timer Execution time. Null for rows with status=b (before) zcmd .z handler the query arrived through status Query status. One of b, c or e (before, complete, error) a Address of sender. .dotz.ipa can be used to convert from the integer format to a hostname u Username of sender w Handle of sender cmd Command sent mem Memory statistics sz Size of result. Null for rows with status of b or e error Error message", + "title": "logusage.q" + }, + { + "location": "/handlers/#controlaccessq", + "text": "controlaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects: the host/ip address of the servers which are allowed to access the\n process; definition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do; the group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions; the maximum size of the result set returned to a client. The access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions. File Description *_hosts.csv Contains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed *_users.csv Contains individual users and the user groups they are are a member of *_functions.csv Contains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users The permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv. When a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.", + "title": "controlaccess.q" + }, + { + "location": "/handlers/#trackclientsq", + "text": "trackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service. Whenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.", + "title": "trackclients.q" + }, + { + "location": "/handlers/#trackserversq", + "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.", + "title": "trackservers.q" + }, + { + "location": "/handlers/#zpsignoreq", + "text": "zpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.", + "title": "zpsignore.q" + }, + { + "location": "/handlers/#writeaccessq", + "text": "writeaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.", + "title": "writeaccess.q" + }, + { + "location": "/handlers/#permissionsq", + "text": "permissions.q is used to control client access to a server process. It\nallows: Access control via username/password access, either in combination\n with the -u/U process flags or in place of them. Definition of user groups, which control variable access. Definition of user roles, which allow control over function\n execution. Deeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses. Access restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions. Permissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself. The access schema consists of 7 control tables: Name Descriptions User Username, locality, encryption type and password hash Usergroup User and their group. Userrole User and role. Functiongroup Functions and their group Function Function names, the roles which can access them, and a lambda checking the parameters those roles can use. Access Variable names, the groups which can access them, and the read or write access level. Virtualtable Virtual table name, main table name, and the where clause it enforces on access to that table. In addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself. A user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g. Table Group Level quote headtrader write trade juniortrader read Here, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow. The permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments. Function access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar: Function Role Param. Check timedata quant {1b} timedata normal user {x[`bkttype] in `hh} select quant {1b} The parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check. Further restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g. Virtual Table Table Where Clause trade_lse trade ,(in;`src;\u201cL\u201d) quote_new quote ,( ;`time;(-;`.z.p;01:00)) When a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable. If the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role. The permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions. Adding to the groups and roles is handled by the functions: adduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"] which are further explained in the script API. Permission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.", + "title": "permissions.q" + }, + { + "location": "/handlers/#usage-example", + "text": "To connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so: .pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist( ;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}] This provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth. Adam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it. Additionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined: .pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp] And then grant that role access to the .u.upd function: .pm.grantfunction[`.u.upd;`tp;{1b}] Although the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.", + "title": "Usage Example" + }, + { + "location": "/handlers/#gateway-example", + "text": "The gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified. Within the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use: .pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}] Since .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables: .pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]", + "title": "Gateway Example" + }, + { + "location": "/handlers/#diagnostic-reporting", + "text": "The message handler modifications provide a wealth of diagnostic\ninformation including: the timings and memory usage for every query run on a process; failed queries; clients trying to do things they are not permissioned for; the clients which are querying often and/or regularly extracting\n large datasets; the number of clients currently connected; timer calls and how long they take. Although not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", + "title": "Diagnostic Reporting" + }, + { + "location": "/conn/", + "text": "Connection Management\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk\n\n\n\nConnections\n\n\nProcesses locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available.\n\n\nThe main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.\n\n\nProcess Attributes\n\n\nEach process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include:\n\n\n\n\n\n\nrange of data contained in the process;\n\n\n\n\n\n\navailable tables;\n\n\n\n\n\n\ninstrument universe;\n\n\n\n\n\n\nphysical location;\n\n\n\n\n\n\nany other fields of relevance.\n\n\n\n\n\n\nConnection Passwords\n\n\nThe password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.\n\n\nRetrieving and Using Handles\n\n\nA function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters:\n\n\n\n\n\n\ntype-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname);\n\n\n\n\n\n\ntypes-or-names: the types or names to retrieve e.g. hdb;\n\n\n\n\n\n\nrequired-attributes: the dictionary of attributes to match on;\n\n\n\n\n\n\nopen-dead-connections: whether to re-open dead connections;\n\n\n\n\n\n\nonly-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter.\n\n\n\n\n\n\n.servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes).\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\n\n\n\n.servers.getservers will try to automatically re-open connections if\nrequired.\n\n\nq).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n\n\nThere are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters:\n\n\n\n\n\n\ntypes: the type to retrieve e.g. hdb;\n\n\n\n\n\n\nselection-algorithm: can be one of any, last or roundrobin.\n\n\n\n\n\n\nConnecting To Non-TorQ Processes\n\n\nConnections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required.\n\n\nNon-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b.\n\n\nExample of nontorqprocess.csv file:\n\n\nhost,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02\n\n\n\nManually Adding And Using Connections\n\n\nConnections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.\n\n\nIPC types\n\n\nIn version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE.\n\n\nIn the settings example below, everything that connects to the\ntickerplant will use unix domain sockets.\n\n\n\\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix\n\n\n\nAttempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns.\n\n\nAt the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", + "title": "Connection Management" + }, + { + "location": "/conn/#connection-management", + "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk", + "title": "Connection Management" + }, + { + "location": "/conn/#connections", + "text": "Processes locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available. The main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.", + "title": "Connections" + }, + { + "location": "/conn/#process-attributes", + "text": "Each process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include: range of data contained in the process; available tables; instrument universe; physical location; any other fields of relevance.", + "title": "Process Attributes" + }, + { + "location": "/conn/#connection-passwords", + "text": "The password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.", + "title": "Connection Passwords" + }, + { + "location": "/conn/#retrieving-and-using-handles", + "text": "A function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters: type-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname); types-or-names: the types or names to retrieve e.g. hdb; required-attributes: the dictionary of attributes to match on; open-dead-connections: whether to re-open dead connections; only-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter. .servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes). q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$())) .servers.getservers will try to automatically re-open connections if\nrequired. q).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!() There are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters: types: the type to retrieve e.g. hdb; selection-algorithm: can be one of any, last or roundrobin.", + "title": "Retrieving and Using Handles" + }, + { + "location": "/conn/#connecting-to-non-torq-processes", + "text": "Connections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required. Non-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b. Example of nontorqprocess.csv file: host,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02", + "title": "Connecting To Non-TorQ Processes" + }, + { + "location": "/conn/#manually-adding-and-using-connections", + "text": "Connections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.", + "title": "Manually Adding And Using Connections" + }, + { + "location": "/conn/#ipc-types", + "text": "In version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE. In the settings example below, everything that connects to the\ntickerplant will use unix domain sockets. \\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix Attempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns. At the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", + "title": "IPC types" + }, + { + "location": "/Processes/", + "text": "Processes\n\n\nA set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is:\n\n\naquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1\n\n\n\n\n\nDiscovery Service\n\n\nOverview\n\n\nProcesses use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections.\n\n\nThe discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery.\n\n\nTo run the discovery service, use a start line such as:\n\n\naquaq $ q torq.q -load code/processes/discovery.q -p 9995\n\n\n\nModify the configuration as required.\n\n\nOperation\n\n\n\n\n\n\nProcesses register with the discovery service.\n\n\n\n\n\n\n\n\nProcesses use the discovery service to locate other processes.\n\n\n\n\n\n\n\n\nWhen new services register, any processes which have registered an\n interest in that process type are notified.\n\n\n\n\n\n\n\n\nAvailable Processes\n\n\nThe list of available processes can be found in the .servers.SERVERS\ntable.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()\n\n\n\n\n\nGateway\n\n\nA synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.\n\n\n\n\nAsynchronous Behaviour\n\n\nAsynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens:\n\n\n\n\n\n\nthe query is placed in a queue;\n\n\n\n\n\n\nthe list of available servers is retrieved;\n\n\n\n\n\n\nthe queue is prioritised, so those queries with higher priority are\n serviced first;\n\n\n\n\n\n\nqueries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query;\n\n\n\n\n\n\nwhen all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client.\n\n\n\n\n\n\nThe two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc.\n\n\nAn asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.\n\n\nSynchronous Behaviour\n\n\nWhen using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.\n\n\nProcess Discovery\n\n\nThe gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.\n\n\nError Handling\n\n\nWhen synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when:\n\n\n\n\n\n\nthe client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately);\n\n\n\n\n\n\nthe query is timed out;\n\n\n\n\n\n\na back end server returns an error;\n\n\n\n\n\n\na back end server fails;\n\n\n\n\n\n\nthe join function fails.\n\n\n\n\n\n\nIf postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).\n\n\nClient Calls\n\n\nThere are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details.\n\n\n\n\n\n\n\n\nFunction\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.gw.syncexec[query; servertypes]\n\n\nExecute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.\n\n\n\n\n\n\n.gw.syncexecj[query; servertypes; joinfunction]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results.\n\n\n\n\n\n\n.gw.asyncexec[query; servertypes]\n\n\nExecute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.\n\n\n\n\n\n\n.gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.\n\n\n\n\n\n\n\n\nFor the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it.\n\n\nq).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk\n\n\n\nBoth the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB.\n\n\nq)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017\n\n\n\nRun the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line.\n\n\nq torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb\n\n\n\nStart a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds.\n\n\nq)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009\n\n\n\nIf a query is done for a server type which is not registered, an error\nis returned:\n\n\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other\n\n\n\nCustom join functions can be specified:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1\n\n\n\nCustom joins can fail with appropriate errors:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b\n\n\n\nAsynchronous queries must be sent in async and blocked:\n\n\nq)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\n\n\n\nWe can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time.\n\n\nq)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003\n\n\n\nAlternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function.\n\n\nq)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n\n\nAsynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required.\n\n\nq)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550\n\n\n\nNon kdb+ Clients\n\n\nAll the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the \nJava Grid\nViewer\n:\n\n\nimport java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n}\n\n\n\nSome of the unofficially supported APIs may only allow synchronous calls\nto be made.\n\n\n\n\nReal Time Database (RDB)\n\n\nThe Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include:\n\n\n\n\n\n\nTickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file;\n\n\n\n\n\n\nAutomatic re-connection and resubscription to tickerplant;\n\n\n\n\n\n\nList of tables to subscribe to supplied as configuration setting;\n\n\n\n\n\n\nMore pre-built flexibility in end-of-day;\n\n\n\n\n\n\nMore verbose end-of-day logging;\n\n\n\n\n\n\nReload multiple authenticated HDBs after end-of-day;\n\n\n\n\n\n\nEnd-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay\n\n\n\n\n\n\nSee the top of the file for more information.\n\n\n\n\nWrite Database (WDB)\n\n\nThe Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q:\n\n\n\n\n\n\nProvides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting;\n\n\n\n\n\n\nGreater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options;\n\n\n\n\n\n\nUse of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes;\n\n\n\n\n\n\nChecks whether to persist data to disk on a timer rather than on\n each tick;\n\n\n\n\n\n\nInforms other RDB, HDB and GW processes that end of day save and\n sort has completed;\n\n\n\n\n\n\nMore log information supplied.\n\n\n\n\n\n\nThe WDB process can broken down into two main functions:\n\n\n\n\n\n\nPeriodically saving data to disk and\n\n\n\n\n\n\nSorting data at end of day\n\n\n\n\n\n\nThe WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day).\n\n\nThe behaviour of the WDB process is controlled by the \n.wdb.mode\n\nparameter. This should be set to one of following three values:\n\n\n\n\n\n\nsaveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc.\n\n\n\n\n\n\nsave - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data\n\n\n\n\n\n\nsort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes\n\n\n\n\n\n\nWhen running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data.\n\n\nThe wdb process provides two methods for persisting data to disk and\nsorting at the end of the day.\n\n\n\n\n\n\ndefault - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to.\n\n\n\n\n\n\npartbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory.\n\n\nAt the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters.\n\n\n\n\n\n\nThe optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.\n\n\n\n\nTickerplant Log Replay\n\n\nThe Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for:\n\n\n\n\n\n\nhandling end of day save down failures;\n\n\n\n\n\n\nhandling large volumes of data (larger than can fit into RAM).\n\n\n\n\n\n\nThe process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can:\n\n\n\n\n\n\nreplay specific message ranges;\n\n\n\n\n\n\nreplay in manageable message chunks;\n\n\n\n\n\n\nrecover as many messages as possible from a log file rather than\n just stopping at the first bad message;\n\n\n\n\n\n\nignore specific tables;\n\n\n\n\n\n\nmodify the tables before or after they are saved;\n\n\n\n\n\n\napply sorting and parting after all the data is written out.\n\n\n\n\n\n\nThe process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be:\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1\n\n\n\nThe tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage.\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage\n\n\n\n\n\nHousekeeping\n\n\nThe housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process:\n\n\n\n\n\n\nAllows for removing and zipping of directory files;\n\n\n\n\n\n\nProvides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter;\n\n\n\n\n\n\nReads all tasks from a single CSV;\n\n\n\n\n\n\nRuns on a user defined timer;\n\n\n\n\n\n\nCan be run immediately from command line or within the process;\n\n\n\n\n\n\nCan be easily extended to include new user defined housekeeping\n tasks.\n\n\n\n\n\n\nThe process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings:\n\n\n\n\n\n\nFunction details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping);\n\n\n\n\n\n\nPath specifies the directory that the files are in;\n\n\n\n\n\n\nMatch provides the search string to the find function, files\n returned will have names that match this string;\n\n\n\n\n\n\nExclude provides a second string to the find function, and these\n files are excluded from the match list;\n\n\n\n\n\n\nAge is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days).\n\n\n\n\n\n\nAn example csv file would be:\n\n\nfunction,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3\n\n\n\nThe process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror.\n\n\nThe remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv.\n\n\nAs well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion.\n\n\nHousekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag:\n\n\nq torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage\n\n\n\n\n\nFile Alerter\n\n\nThe file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can:\n\n\n\n\n\n\nrun more than one function on the specified file.\n\n\n\n\n\n\noptionally move the file to a new directory after running the\n function.\n\n\n\n\n\n\nstore a table of files that have already been processed.\n\n\n\n\n\n\nrun the function only on new files or run it every time the file is\n modified.\n\n\n\n\n\n\nignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified.\n\n\n\n\n\n\nThe file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows.\n\n\ninputcsv\n - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv.\n\n\npolltime\n - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute.\n\n\nalreadyprocessed\n - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran.\n\n\nskipallonstart\n - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0.\n\n\nThe files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow.\n\n\npath\n - This is the path to the directory that will be scanned for\nthe file.\n\n\nmatch\n - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d.\n\n\nfunction\n - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non.\n\n\nnewonly\n - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified.\n\n\nmovetodirectory\n - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved.\n\n\nIt is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like:\n\n\npath,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\"\n\n\n\nThe file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files.\n\n\nAfter the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it.\n\n\nThe file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be:\n\n\ncopy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"}\n\n\n\nAlthough the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session.\n\n\nEach stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner.\n\n\nThe file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.\n\n\n\n\nReporter\n\n\nOverview\n\n\nThe reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers.\n\n\n\n\nFeatures:\n\n\n\n\n\n\nEasily create a report for information that you want;\n\n\n\n\n\n\nFully customizable scheduling such as start time, end time and days\n of the week;\n\n\n\n\n\n\nRun reports repeatedly with a custom period between them;\n\n\n\n\n\n\nAsynchronous querying with custom timeout intervals;\n\n\n\n\n\n\nInbuilt result handlers allow reports to be written to file or\n published;\n\n\n\n\n\n\nCustom result handlers can be defined;\n\n\n\n\n\n\nLogs each step of the report process;\n\n\n\n\n\n\nFully integrated with the TorQ gateway to allow reports to be run\n across backend processes.\n\n\n\n\n\n\nThe reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table.\n\n\nTo run the reporter process:\n\n\nq torq.q -load code/processes/reporter.q -p 20004\n\n\n\nOnce the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.\n\n\nReport Configuration\n\n\nBy default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema.\n\n\n\n\n\n\n\n\nColumn Header\n\n\nDescription and Example\n\n\n\n\n\n\n\n\n\n\nname\n\n\nReport name e.g. Usage\n\n\n\n\n\n\nquery\n\n\nQuery to be evaluated on that process. It can be a string query or function\n\n\n\n\n\n\nresulthandler\n\n\nResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d]\n\n\n\n\n\n\ngateway\n\n\nIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway\n\n\n\n\n\n\njoinfunction\n\n\nUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze\n\n\n\n\n\n\nproctype\n\n\nThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb\n\n\n\n\n\n\nprocname\n\n\nThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1\n\n\n\n\n\n\nstart\n\n\nTime on that day to start at e.g. 12:00\n\n\n\n\n\n\nend\n\n\nTime on that day that the report will stop at e.g. 23:00\n\n\n\n\n\n\nperiod\n\n\nThe period between each report query e.g. 00:00:10\n\n\n\n\n\n\ntimeoutinterval\n\n\nThe amount of time the reporter waits before timing out a report e.g. 00:00:30\n\n\n\n\n\n\ndaysofweek\n\n\nNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday\n\n\n\n\n\n\n\n\nWhen running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load.\n\n\nListing [code:csvschema] shows an example of the schema needed in the\ninput csv file.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6\n\n\n\nResult Handlers\n\n\nThere are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query).\n\n\nwritetofiletype\n - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be \nusage_rdb_2014_01_02_15_00_12.txt\n e.g.\n\n\nwritetofiletype[\"./output/\";\"usage\";\"csv\"]\n\n\n\nsplaytable\n - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g.\n\n\nsplaytable[\"./output/\";\"usage\"]\n\n\n\nemailalert\n - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions.\n\n\nemailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")]\n\n\n\nemailreport\n - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed.\n\n\nemailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"]\n\n\n\npublishresult\n - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.\n\n\nReport Process Tracking\n\n\nEach step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. \n\n\n\n\n\n\n\n\nStage symbol\n\n\nExplanation\n\n\n\n\n\n\n\n\n\n\nR\n\n\nThe query is currently running\n\n\n\n\n\n\nE\n\n\nAn error has occurred during the query\n\n\n\n\n\n\nC\n\n\nThe query has been completed with no errors\n\n\n\n\n\n\nT\n\n\nThe query has exceeded the timeout interval\n\n\n\n\n\n\nS\n\n\nSystem message e.g. \u201cReporter Process Initialised\u201d\n\n\n\n\n\n\n\n\ntime | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"\n\n\n\nSubscribing for Results\n\n\nTo publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol.\n\n\n/- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)\n\n\n\nExample reports\n\n\nThe following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the \n.Q.w[]\n information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6\n\n\n\n\n\nMonitor\n\n\nThe Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived.\n\n\nRun it with:\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001\n\n\n\nIt is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded.\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap\n\n\n\nThe current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg\n\n\nq)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"\n\n\n\nHTML5 front end\n\n\nA HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include:\n\n\n\n\n\n\nHeartbeat table with processes that have warnings highlighted in\n orange and errors in red\n\n\n\n\n\n\nLog message table displaying the last 30 errors\n\n\n\n\n\n\nLog message error chart that is by default displayed in 5 minute\n bins\n\n\n\n\n\n\nChart\u2019s bin value can be changed on the fly\n\n\n\n\n\n\nResponsive design so works on all main devices i.e. phones, tablets\n and desktop\n\n\n\n\n\n\nIt is accessible by going to the url \nhttp://HOST:PORT/.non?monitorui\n\n\n\n\nCompression\n\n\nThe compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify\n\n\n\n\n\n\nthe compression configuration file to use\n\n\n\n\n\n\nthe database directory to compress\n\n\n\n\n\n\nthe maximum age of data to attempt to compress\n\n\n\n\n\n\nwhether the process should exit upon completion\n\n\n\n\n\n\nThe process is run like other TorQ processes:\n\n\nq torq.q -load code/processes/compression.q -p 20005\n\n\n\nModify the settings file or override variables from the command line as\nappropriate.\n\n\n\n\nKill\n\n\nThe kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way.\n\n\nIf run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable.\n\n\nq torq.q -load code/processes/kill.q -p 20000\n\n\n\n.servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable):\n\n\nq torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant\n\n\n\nThe kill process can also be used to kill only specific named processes\nwithin the process types:\n\n\nq torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2\n\n\n\n\n\nChained Tickerplant\n\n\nIn tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis.\n\n\nThe chained tickerplant can:\n\n\n\n\n\n\nsubscribe to specific tables and syms\n\n\n\n\n\n\nbatch publish at an interval or publish tick by tick\n\n\n\n\n\n\ncreate a tickerplant log that its real time subscribers can replay\n\n\n\n\n\n\nreplay the source tickerplant log\n\n\n\n\n\n\nTo launch the chained tickerplant\n\n\nq torq.q -load code/processes/chainedtp.q -p 12009\n\n\n\nChained tickerplant settings are found in \nconfig/settings/chainedtp.q\n\nand are under the \n.ctp\n namespace.\n\n\n\n\n\n\n\n\nSetting\n\n\nExplanation\n\n\nDefault\n\n\n\n\n\n\n\n\n\n\ntickerplantname\n\n\nlist of tickerplant names to try and make a connection to\n\n\n`tickerplant1\n\n\n\n\n\n\npubinterval\n\n\npublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick\n\n\n0D00:00:00\n\n\n\n\n\n\ntpconnsleep\n\n\nnumber of seconds between attempts to connect to the source tickerplant\n\n\n10\n\n\n\n\n\n\ncreatelogfile\n\n\ncreate a log file\n\n\n0b\n\n\n\n\n\n\nlogdir\n\n\ndirectory containing chained tickerplant logs\n\n\n`:hdb\n\n\n\n\n\n\nsubscribeto\n\n\nsubscribe to these tables only (null for all)\n\n\n`\n\n\n\n\n\n\nsubscribesyms\n\n\nsubscribe to these syms only (null for all)\n\n\n`\n\n\n\n\n\n\nreplay\n\n\nreplay the tickerplant log file\n\n\n0b\n\n\n\n\n\n\nschema\n\n\nretrieve schema from tickerplant\n\n\n1b\n\n\n\n\n\n\nclearlogonsubscription\n\n\nclear log on subscription, only called if createlogfile is also enabled\n\n\n0b\n\n\n\n\n\n\n\n\n\n\nIntegration with kdb+tick\n\n\nAquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", + "title": "Processes" + }, + { + "location": "/Processes/#processes", + "text": "A set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is: aquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1", + "title": "Processes" + }, + { + "location": "/Processes/#discovery-service", + "text": "", + "title": "Discovery Service" + }, + { + "location": "/Processes/#overview", + "text": "Processes use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections. The discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery. To run the discovery service, use a start line such as: aquaq $ q torq.q -load code/processes/discovery.q -p 9995 Modify the configuration as required.", + "title": "Overview" + }, + { + "location": "/Processes/#operation", + "text": "Processes register with the discovery service. Processes use the discovery service to locate other processes. When new services register, any processes which have registered an\n interest in that process type are notified.", + "title": "Operation" + }, + { + "location": "/Processes/#available-processes", + "text": "The list of available processes can be found in the .servers.SERVERS\ntable. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()", + "title": "Available Processes" + }, + { + "location": "/Processes/#gateway", + "text": "A synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.", + "title": "Gateway" + }, + { + "location": "/Processes/#asynchronous-behaviour", + "text": "Asynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens: the query is placed in a queue; the list of available servers is retrieved; the queue is prioritised, so those queries with higher priority are\n serviced first; queries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query; when all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client. The two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc. An asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.", + "title": "Asynchronous Behaviour" + }, + { + "location": "/Processes/#synchronous-behaviour", + "text": "When using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.", + "title": "Synchronous Behaviour" + }, + { + "location": "/Processes/#process-discovery", + "text": "The gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.", + "title": "Process Discovery" + }, + { + "location": "/Processes/#error-handling", + "text": "When synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when: the client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately); the query is timed out; a back end server returns an error; a back end server fails; the join function fails. If postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).", + "title": "Error Handling" + }, + { + "location": "/Processes/#client-calls", + "text": "There are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details. Function Description .gw.syncexec[query; servertypes] Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed. .gw.syncexecj[query; servertypes; joinfunction] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. .gw.asyncexec[query; servertypes] Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results. .gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded. For the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it. q).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk Both the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB. q)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017 Run the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line. q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb Start a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds. q)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009 If a query is done for a server type which is not registered, an error\nis returned: q)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other Custom join functions can be specified: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1 Custom joins can fail with appropriate errors: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b Asynchronous queries must be sent in async and blocked: q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq) We can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time. q)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003 Alternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function. q)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016 Asynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required. q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550", + "title": "Client Calls" + }, + { + "location": "/Processes/#non-kdb-clients", + "text": "All the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the Java Grid\nViewer : import java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n} Some of the unofficially supported APIs may only allow synchronous calls\nto be made.", + "title": "Non kdb+ Clients" + }, + { + "location": "/Processes/#real-time-database-rdb", + "text": "The Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include: Tickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file; Automatic re-connection and resubscription to tickerplant; List of tables to subscribe to supplied as configuration setting; More pre-built flexibility in end-of-day; More verbose end-of-day logging; Reload multiple authenticated HDBs after end-of-day; End-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay See the top of the file for more information.", + "title": "Real Time Database (RDB)" + }, + { + "location": "/Processes/#write-database-wdb", + "text": "The Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q: Provides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting; Greater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options; Use of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes; Checks whether to persist data to disk on a timer rather than on\n each tick; Informs other RDB, HDB and GW processes that end of day save and\n sort has completed; More log information supplied. The WDB process can broken down into two main functions: Periodically saving data to disk and Sorting data at end of day The WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day). The behaviour of the WDB process is controlled by the .wdb.mode \nparameter. This should be set to one of following three values: saveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc. save - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data sort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes When running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data. The wdb process provides two methods for persisting data to disk and\nsorting at the end of the day. default - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to. partbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory. At the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters. The optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.", + "title": "Write Database (WDB)" + }, + { + "location": "/Processes/#tickerplant-log-replay", + "text": "The Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for: handling end of day save down failures; handling large volumes of data (larger than can fit into RAM). The process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can: replay specific message ranges; replay in manageable message chunks; recover as many messages as possible from a log file rather than\n just stopping at the first bad message; ignore specific tables; modify the tables before or after they are saved; apply sorting and parting after all the data is written out. The process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be: q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1 The tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage. q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage", + "title": "Tickerplant Log Replay" + }, + { + "location": "/Processes/#housekeeping", + "text": "The housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process: Allows for removing and zipping of directory files; Provides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter; Reads all tasks from a single CSV; Runs on a user defined timer; Can be run immediately from command line or within the process; Can be easily extended to include new user defined housekeeping\n tasks. The process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings: Function details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping); Path specifies the directory that the files are in; Match provides the search string to the find function, files\n returned will have names that match this string; Exclude provides a second string to the find function, and these\n files are excluded from the match list; Age is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days). An example csv file would be: function,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3 The process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror. The remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv. As well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion. Housekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag: q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage", + "title": "Housekeeping" + }, + { + "location": "/Processes/#file-alerter", + "text": "The file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can: run more than one function on the specified file. optionally move the file to a new directory after running the\n function. store a table of files that have already been processed. run the function only on new files or run it every time the file is\n modified. ignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified. The file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows. inputcsv - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv. polltime - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute. alreadyprocessed - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran. skipallonstart - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0. The files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow. path - This is the path to the directory that will be scanned for\nthe file. match - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d. function - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non. newonly - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified. movetodirectory - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved. It is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like: path,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\" The file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files. After the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it. The file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be: copy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"} Although the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session. Each stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner. The file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.", + "title": "File Alerter" + }, + { + "location": "/Processes/#reporter", + "text": "", + "title": "Reporter" + }, + { + "location": "/Processes/#overview_1", + "text": "The reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers. Features: Easily create a report for information that you want; Fully customizable scheduling such as start time, end time and days\n of the week; Run reports repeatedly with a custom period between them; Asynchronous querying with custom timeout intervals; Inbuilt result handlers allow reports to be written to file or\n published; Custom result handlers can be defined; Logs each step of the report process; Fully integrated with the TorQ gateway to allow reports to be run\n across backend processes. The reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table. To run the reporter process: q torq.q -load code/processes/reporter.q -p 20004 Once the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.", + "title": "Overview" + }, + { + "location": "/Processes/#report-configuration", + "text": "By default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema. Column Header Description and Example name Report name e.g. Usage query Query to be evaluated on that process. It can be a string query or function resulthandler Result handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d] gateway If non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway joinfunction Used to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze proctype The type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb procname The name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1 start Time on that day to start at e.g. 12:00 end Time on that day that the report will stop at e.g. 23:00 period The period between each report query e.g. 00:00:10 timeoutinterval The amount of time the reporter waits before timing out a report e.g. 00:00:30 daysofweek Numeric value required for the day of the week. Where 0 is Saturday and 2 is Monday When running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load. Listing [code:csvschema] shows an example of the schema needed in the\ninput csv file. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6", + "title": "Report Configuration" + }, + { + "location": "/Processes/#result-handlers", + "text": "There are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query). writetofiletype - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be usage_rdb_2014_01_02_15_00_12.txt e.g. writetofiletype[\"./output/\";\"usage\";\"csv\"] splaytable - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g. splaytable[\"./output/\";\"usage\"] emailalert - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions. emailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")] emailreport - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed. emailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"] publishresult - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.", + "title": "Result Handlers" + }, + { + "location": "/Processes/#report-process-tracking", + "text": "Each step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. Stage symbol Explanation R The query is currently running E An error has occurred during the query C The query has been completed with no errors T The query has exceeded the timeout interval S System message e.g. \u201cReporter Process Initialised\u201d time | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"", + "title": "Report Process Tracking" + }, + { + "location": "/Processes/#subscribing-for-results", + "text": "To publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol. /- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)", + "title": "Subscribing for Results" + }, + { + "location": "/Processes/#example-reports", + "text": "The following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the .Q.w[] information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6", + "title": "Example reports" + }, + { + "location": "/Processes/#monitor", + "text": "The Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived. Run it with: aquaq $ q torq.q -load code/processes/monitor.q -p 20001 It is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded. aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap The current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg q)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"", + "title": "Monitor" + }, + { + "location": "/Processes/#html5-front-end", + "text": "A HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include: Heartbeat table with processes that have warnings highlighted in\n orange and errors in red Log message table displaying the last 30 errors Log message error chart that is by default displayed in 5 minute\n bins Chart\u2019s bin value can be changed on the fly Responsive design so works on all main devices i.e. phones, tablets\n and desktop It is accessible by going to the url http://HOST:PORT/.non?monitorui", + "title": "HTML5 front end" + }, + { + "location": "/Processes/#compression", + "text": "The compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify the compression configuration file to use the database directory to compress the maximum age of data to attempt to compress whether the process should exit upon completion The process is run like other TorQ processes: q torq.q -load code/processes/compression.q -p 20005 Modify the settings file or override variables from the command line as\nappropriate.", + "title": "Compression" + }, + { + "location": "/Processes/#kill", + "text": "The kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way. If run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable. q torq.q -load code/processes/kill.q -p 20000 .servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable): q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant The kill process can also be used to kill only specific named processes\nwithin the process types: q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2", + "title": "Kill" + }, + { + "location": "/Processes/#chained-tickerplant", + "text": "In tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis. The chained tickerplant can: subscribe to specific tables and syms batch publish at an interval or publish tick by tick create a tickerplant log that its real time subscribers can replay replay the source tickerplant log To launch the chained tickerplant q torq.q -load code/processes/chainedtp.q -p 12009 Chained tickerplant settings are found in config/settings/chainedtp.q \nand are under the .ctp namespace. Setting Explanation Default tickerplantname list of tickerplant names to try and make a connection to `tickerplant1 pubinterval publish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick 0D00:00:00 tpconnsleep number of seconds between attempts to connect to the source tickerplant 10 createlogfile create a log file 0b logdir directory containing chained tickerplant logs `:hdb subscribeto subscribe to these tables only (null for all) ` subscribesyms subscribe to these syms only (null for all) ` replay replay the tickerplant log file 0b schema retrieve schema from tickerplant 1b clearlogonsubscription clear log on subscription, only called if createlogfile is also enabled 0b", + "title": "Chained Tickerplant" + }, + { + "location": "/Processes/#integration-with-kdbtick", + "text": "AquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", + "title": "Integration with kdb+tick" + }, + { + "location": "/visualisation/", + "text": "Visualisation\n\n\nkdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.\n\n\n\n\nkdb+ Utilities\n\n\nThe server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes:\n\n\n\n\n\n\njson.k provides two way conversion between kdb+ data structures and\n JSON;\n\n\n\n\n\n\nu.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript;\n\n\n\n\n\n\nfunctions for reformatting temporal types to be JSON compliant;\n\n\n\n\n\n\npage serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.\n\n\n\n\n\n\n\n\nJavaScript Utilities\n\n\nThe JavaScript utilities are contained in kdbconnect.js. The library\nallows you to:\n\n\n\n\n\n\ncreate a connection to the kdb+ process;\n\n\n\n\n\n\ndisplay the socket status;\n\n\n\n\n\n\nsending queries;\n\n\n\n\n\n\nbinding results returned from kdb+ to updates in the webpage.\n\n\n\n\n\n\n\n\nOutline\n\n\nAll communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form:\n\n\n`name`data!(\"dataID\";dataObject)\n\n\n\nAll the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap.\n\n\nq)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nWe have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like:\n\n\n`name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))\n\n\n\nThis can be packed with .html.updformat:\n\n\nq).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nTo utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using\n\n\n.html.wssub[`tablename]\n\n\n\nPublications from the kdb+ side are done with\n\n\n.html.pub[`tablename;tabledata]\n\n\n\nOn the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data.\n\n\n/* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nSimilarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different:\n\n\nKDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nTo display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status.\n\n\n// Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected.\n\n\n\nErrors can be displayed by binding the event called \u201cerror\u201d.\n\n\nKDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});\n\n\n\n\n\nExample\n\n\nA basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.\n\n\n\n\nFurther Work\n\n\nFurther work planned includes:\n\n\n\n\n\n\nallow subscriptions on a key basis- currently all subscribers\n receive all updates;\n\n\n\n\n\n\nadd JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table;\n\n\n\n\n\n\nallow multiple websocket connections to be maintained at the same\n time.", + "title": "Visualisation" + }, + { + "location": "/visualisation/#visualisation", + "text": "kdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.", + "title": "Visualisation" + }, + { + "location": "/visualisation/#kdb-utilities", + "text": "The server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes: json.k provides two way conversion between kdb+ data structures and\n JSON; u.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript; functions for reformatting temporal types to be JSON compliant; page serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.", + "title": "kdb+ Utilities" + }, + { + "location": "/visualisation/#javascript-utilities", + "text": "The JavaScript utilities are contained in kdbconnect.js. The library\nallows you to: create a connection to the kdb+ process; display the socket status; sending queries; binding results returned from kdb+ to updates in the webpage.", + "title": "JavaScript Utilities" + }, + { + "location": "/visualisation/#outline", + "text": "All communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form: `name`data!(\"dataID\";dataObject) All the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap. q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a We have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like: `name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14))) This can be packed with .html.updformat: q).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a To utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using .html.wssub[`tablename] Publications from the kdb+ side are done with .html.pub[`tablename;tabledata] On the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data. /* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); Similarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different: KDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); To display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status. // Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected. Errors can be displayed by binding the event called \u201cerror\u201d. KDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});", + "title": "Outline" + }, + { + "location": "/visualisation/#example", + "text": "A basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.", + "title": "Example" + }, + { + "location": "/visualisation/#further-work", + "text": "Further work planned includes: allow subscriptions on a key basis- currently all subscribers\n receive all updates; add JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table; allow multiple websocket connections to be maintained at the same\n time.", + "title": "Further Work" + } + ] +} \ No newline at end of file diff --git a/site/sitemap.xml b/site/sitemap.xml new file mode 100644 index 000000000..dc8593544 --- /dev/null +++ b/site/sitemap.xml @@ -0,0 +1,68 @@ + + + + + + / + 2017-01-12 + daily + + + + + + /Overview/ + 2017-01-12 + daily + + + + + + /gettingstarted/ + 2017-01-12 + daily + + + + + + /utilities/ + 2017-01-12 + daily + + + + + + /handlers/ + 2017-01-12 + daily + + + + + + /conn/ + 2017-01-12 + daily + + + + + + /Processes/ + 2017-01-12 + daily + + + + + + /visualisation/ + 2017-01-12 + daily + + + + \ No newline at end of file diff --git a/site/utilities/index.html b/site/utilities/index.html new file mode 100644 index 000000000..c663c3aa3 --- /dev/null +++ b/site/utilities/index.html @@ -0,0 +1,1423 @@ + + + + + + + + + + + + Utilities - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

+

Utilities

+

We have provided several utility scripts, which either implement +developer aids or standard operations which are useful across processes.

+

+

api.q

+

This provides a mechanism for documenting and publishing +function/variable/table or view definitions within the kdb+ process. It +provides a search facility both by name and definition (in the case of +functions). There is also a function for returning the approximate +memory usage of each variable in the process in descending order.

+

Definitions are added using the .api.add function. A variable can be +marked as public or private, and given a description, parameter list and +return type. The search functions will return all the values found which +match the pattern irrespective of them having a pre-defined definition.

+

Whether a value is public or private is defined in the definitions +table. If not found then by default all values are private, except those +which live in the .q or top level namespace.

+

.api.f is used to find a function, variable, table or view based on a +case-insensitive pattern search. If a symbol parameter is supplied, a +wildcard search of *[suppliedvalue]* is done. If a string is +supplied, the value is used as is, meaning other non-wildcard regex +pattern matching can be done.

+

+    q).api.f`max                                                                                                                                                                                                                    
+    name                | vartype   namespace public descrip             ..
+    --------------------| -----------------------------------------------..
+    maxs                | function  .q        1      ""                  ..
+    mmax                | function  .q        1      ""                  ..
+    .clients.MAXIDLE    | variable  .clients  0      ""                  ..
+    .access.MAXSIZE     | variable  .access   0      ""                  ..
+    .cache.maxsize      | variable  .cache    1      "The maximum size in..
+    .cache.maxindividual| variable  .cache    1      "The maximum size in..
+    max                 | primitive           1      ""                  ..
+    q).api.f"max*"                                                                                                                                                                                                                  
+    name| vartype   namespace public descrip params return
+    ----| ------------------------------------------------
+    maxs| function  .q        1      ""      ""     ""    
+    max | primitive           1      ""      ""     ""    
+
+
+ +

.api.p is the same as .api.f, but only returns public functions. .api.u +is as .api.p, but only includes user defined values i.e. it excludes q +primitives and values found in the .q, .Q, .h and .o namespaces. +.api.find is a more general version of .api.f which can be used to do +case sensitive searches.

+

.api.s is used to search function definitions for specific values.

+
q).api.s"*max*"                                                                                                                                                                                                                 
+function            definition                                       ..
+---------------------------------------------------------------------..
+.Q.w                "k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\"..
+.clients.cleanup    "{if[count w0:exec w from`.clients.clients where ..
+.access.validsize   "{[x;y;z] $[superuser .z.u;x;MAXSIZE>s:-22!x;x;'\..
+.servers.getservers "{[nameortype;lookups;req;autoopen;onlyone]\n r:$..
+.cache.add          "{[function;id;status]\n \n res:value function;\n..
+
+

.api.m is used to return the approximate memory usage of variables and +views in the process, retrieved using -22!. Views will be re-evaluated +if required. Use .api.mem[0b] if you do not want to evaluate and +return views.

+
q).api.m[]                                                                                                                                                                                                                      
+variable          size    sizeMB
+--------------------------------
+.tz.t             1587359 2     
+.help.TXT         15409   0     
+.api.detail       10678   0     
+.proc.usage       3610    0     
+.proc.configusage 1029    0     
+..
+
+

.api.whereami[lambda] can be used to retrieve the name of a function +given its definition. This can be useful in debugging.

+
q)g:{x+y}                                                                                                                                                                                                                                                                     
+q)f:{20 + g[x;10]}                                                                                                                                                                                                                                                            
+q)f[10]                                                                                                                                                                                                                                                                       
+40
+q)f[`a]                                                                                                                                                                                                                                                                       
+{x+y}
+`type
++
+`a
+10
+q)).api.whereami[.z.s]                                                                                                                                                                                                                                                        
+`..g
+
+

+

timer.q

+

kdb+ provides a single timer function, .z.ts which is triggered with the +frequency specified by -t. We have provided an extension to allow +multiple functions to be added to the timer and fired when required. The +basic concept is that timer functions are registered in a table, with +.z.ts periodically checking the table and running whichever functions +are required. This is not a suitable mechanism where very high frequency +timers are required (e.g. sub 500ms).

+

There are two ways a function can be added to a timer- either as a +repeating timer, or to fire at a specific time. When a repeating timer +is specified, there are three options as to how the timer can be +rescheduled. Assuming that a timer function with period P is scheduled +to fire at time T0, actually fires at time T1 and finishes at time T2, +then

+
    +
  • +

    mode 0 will reschedule for T0+P;

    +
  • +
  • +

    mode 1 will reschedule for T1+P;

    +
  • +
  • +

    mode 2 will reschedule for T2+P.

    +
  • +
+

Both mode 0 and mode 1 have the potential for causing the timer to back +up if the finish time T2 is after the next schedule time. See +.api.p“.timer.*”for more details.

+

+

async.q

+

kdb+ processes can communicate with each using either synchronous or +asynchronous calls. Synchronous calls expect a response and so the +server must process the request when it is received to generate the +result and return it to the waiting client. Asynchronous calls do not +expect a response so allow for greater flexibility. The effect of +synchronous calls can be replicated with asynchronous calls in one of +two ways (further details in section gateway):

+
    +
  • +

    deferred synchronous: the client sends an async request, then blocks + on the handle waiting for the result. This allows the server more + flexibility as to how and when the query is processed;

    +
  • +
  • +

    asynchronous postback: the client sends an async request which is + wrapped in a function to be posted back to the client when the + result is ready. This allows the server flexibility as to how and + when the query is processed, and allows the client to continue + processing while the server is generating the result.

    +
  • +
+

The code for both of these can get a little tricky, largely due to the +amount of error trapping required. We have provided two functions to +allow these methods to be used more easily. .async.deferred takes a list +of handles and a query, and will return a two item list of +(success;results).

+
q).async.deferred[3 5;({system"sleep 1";system"p"};())]                                                                                                                                                                                     
+1    1   
+9995 9996
+q).async.deferred[3 5;({x+y};1;2)]                                                                                                                                                                                                          
+1 1
+3 3
+q).async.deferred[3 5;({x+y};1;`a)]                                                                                                                                                                                                         
+0                         0                        
+"error: server fail:type" "error: server fail:type"
+q).async.deferred[3 5 87;({system"sleep 1";system"p"};())]                                                                                                                                                                                  
+1     1     0                                       
+9995i 9996i "error: comm fail: failed to send query"
+
+

.async.postback takes a list of handles, a query, and the name or lambda +of the postback function to return the result to. It will immediately +return a success vector, and the results will be posted back to the +client when ready.

+
q).async.postback[3 5;({system"sleep 1";system"p"};());`showresult]                                                                                                                                                                         
+11b
+q)                                                                                                                                                                                                                                          
+q)9995i
+9996i
+
+q).async.postback[3 5;({x+y};1;2);`showresult]                                                                                                                                                                                              
+11b
+q)3
+3
+
+q).async.postback[3 5;({x+y};1;`a);`showresult]                                                                                                                                                                                             
+11b
+q)"error: server fail:type"
+"error: server fail:type"
+
+q).async.postback[3 5;({x+y};1;`a);showresult]                                                                                                                                                                                              
+11b
+q)"error: server fail:type"
+"error: server fail:type"
+
+q).async.postback[3 5 87;({x+y};1;2);showresult]                                                                                                                                                                                            
+110b
+q)3
+3
+
+

For more details, see .api.p“.async.*”.

+

+

cache.q

+

cache.q provides a mechanism for storing function results in a cache and +returning them from the cache if they are available and non stale. This +can greatly boost performance for frequently run queries.

+

The result set cache resides in memory and as such takes up space. It is +up to the programmer to determine which functions are suitable for +caching. Likely candidates are those where some or all of the following +conditions hold:

+
    +
  • +

    the function is run multiple times with the same parameters (perhaps + different clients all want the same result set);

    +
  • +
  • +

    the result set changes infrequently or the clients can accept + slightly out-of-date values;

    +
  • +
  • +

    the result set is not too large and/or is relatively expensive to + produce. For example, it does not make sense to cache raw data + extracts.

    +
  • +
+

The cache has a maximum size and a minimum size for any individual +result set, both of which are defined in the configuration file. Size +checks are done with -22! which will give an approximation (but +underestimate) of the result set size. In the worst case the estimate +could be half the size of the actual size.

+

If a new result set is to be cached, the size is checked. Assuming it +does not exceed the maximum individual size then it is placed in the +cache. If the new cache size would exceed the maximum allowed space, +other result sets are evicted from the cache. The current eviction +policy is to remove the least recently accessed result sets until the +required space is freed. The cache performance is tracked in a table. +Cache adds, hits, fails, reruns and evictions are monitored.

+

The main function to use the cache is .cache.execute[function; +staletime]. If the function has been executed within the last +staletime, then the result is returned from the cache. Otherwise the +function is executed and placed in the cache.

+

The function is run and the result placed in the cache:

+
q)\t r:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                     
+2023
+q)r                                                                                                                                                                                                                             
+3
+
+

The second time round, the result set is returned immediately from the +cache as we are within the staletime value:

+
q)\t r1:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                    
+0
+q)r1                                                                                                                                                                                                                            
+3
+
+

If the time since the last execution is greater than the required stale +time, the function is re-run, the cached result is updated, and the +result returned:

+
q)\t r2:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:00]                                                                                                                                                                    
+2008
+q)r2                                                                                                                                                                                                                            
+3
+
+

The cache performance is tracked:

+
q).cache.getperf[]                                                                                                                                                                                                              
+time                          id status function                  
+------------------------------------------------------------------
+2013.11.06D12:41:53.103508000 2  add    {system"sleep 2"; x+y} 1 2
+2013.11.06D12:42:01.647731000 2  hit    {system"sleep 2"; x+y} 1 2
+2013.11.06D12:42:53.930404000 2  rerun  {system"sleep 2"; x+y} 1 2
+
+

See .api.p.cache.*for more details.

+

+

email.q

+

A library file is provided to allow TorQ processes to send emails using +an SMTP server. This is a wrapper around the standard libcurl library. +The library file is currently available for Windows (32 bit), Linux (32 +and 64 bit) and OSX (32 and 64 bit). The associated q script contains +two main methods for creating a connection and sending emails. The email +library requires a modification to the path to find the required libs - +see the top of email.q for details.

+

The main connection method .email.connect takes a single dictionary +parameter and returns 0i for success and -1i for failure.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterReqTypeDescription
urlYsymbolURL of mail server e.g. smtp://mail.example.com
userYsymbolUsername of user to login as
passwordYsymbolPassword for user
usesslNbooleanConnect using SSL/TLS, defaults to false
fromNsymbolEmail from field, defaults to torq@aquaq.co.uk
debugNintegerDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1
+

An example is:

+
q).email.connect[`url`user`password`from`usessl`debug!(`$"smtp://mail.example.com:80";`$"torquser@aquaq.co.uk";`hello;`$"torquser@aquaq.co.uk";0b;1i)]
+02 Jan 2015 11:45:19   emailConnect: url is set to smtp://mail.example.com:80
+02 Jan 2015 11:45:19   emailConnect: user is set to torquser@aquaq.co.uk
+02 Jan 2015 11:45:19   emailConnect: password is set
+02 Jan 2015 11:45:19   emailConnect: from is set torquser@aquaq.co.uk
+02 Jan 2015 11:45:19   emailConnect: trying to connect
+02 Jan 2015 11:45:19   emailConnect: connected, socket is 5
+0i
+
+

The email sending function .email.send takes a single dictionary +parameter containing the details of the email to send. A connection must +be established before an email can be sent. The send function returns an +integer of the email length on success, or -1 on failure.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterReqTypeDescription
toYsymbol (list)addresses to send to
subjectYchar listemail subject
bodyYlist of char listsemail body
ccNsymbol (list)cc list
bodyTypeNsymboltype of email body. Can be `text or `html. Default is `text
debugNintegerDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1
+

An example is:

+
q).email.send[`to`subject`body`debug!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq");1i)]
+02 Jan 2015 12:39:29   sending email with subject: test email
+02 Jan 2015 12:39:29   email size in bytes is 16682
+02 Jan 2015 12:39:30   emailSend: email sent
+16682i
+
+

Note that if emails are sent infrequently the library must re-establish +the connection to the mail server (this will be done automatically after +the initial connection). In some circumstances it may be better to batch +emails together to send, or to offload email sending to separate +processes as communication with the SMTP server can take a little time.

+

Two further functions are available, .email.connectdefault and +.email.senddefault. These are as above but will use the default +configuration defined within the configuration files as the relevant +parameters passed to the methods. In addition, .email.senddefault will +automatically establish a connection.

+
q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq"))]
+2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email
+2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful
+2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent
+16673i
+q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq"))]
+2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
+2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
+16675i
+q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq");`"$/home/ashortt/example.txt")]
+2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
+2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
+47338i
+
+

.email.test will attempt to establish a connection to the default +configured email server and send a test email to the specified address. +debug should be set to 2i (verbose) to extract the full information.

+
q).email.debug:2i
+q).email.test `$"test@aquaq.co.uk"
+...
+
+

Additionally functions are available within the email library. See +.api.p.email.*for more details.

+

Emails with SSL certificates from Windows

+

If you wish to send emails via an account which requires authentication +from Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps +as usessl must be true and Windows does not usually find the correct +certificate. The steps are:

+
    +
  • +

    download + this + and save it to your PC

    +
  • +
  • +

    set

    +
      CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt
    +
    +
  • +
+

More information is available +here +and here

+

+

timezone.q

+

A slightly customised version of the timezone conversion functionality +from code.kx. It loads a table of timezone information from +$KDBCONFIG. See .api.p.tz.*for more details.

+

+

compress.q

+

compress.q applies compression to any kdb+ database, handles all +partition types including date, month, year, int, and can deal with top +level splayed tables. It will also decompress files as required. Once +the compression/decompression is complete, summary statistics are +returned, with detailed statistics for each compressed or decompressed +file held in a table.

+

The utility is driven by the configuration specified within a csv file. +Default parameters can be given, and these can be used to compress all +files within the database. However, the compress.q utility also provides +the flexibility to compress different tables with different compression +parameters, and different columns within tables using different +parameters. A function is provided which will return a table showing +each file in the database to be compressed, and how, before the +compression is performed.

+

Compression is performed using the -19! operator, which takes 3 +parameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2 +- gzip), the compression blocksize as a power of 2 (between 12 and 19), + and the level of compression to apply (from 0 - 9, applicable only for + gzip). (For further information on -19! and the parameters used, see + code.kx.com.)

+

The compressionconfig.csv file should have the following format:

+
table,minage,column,calgo,cblocksize,clevel
+default,20,default,2,17,6
+trades,20,default,1,17,0
+quotes,20,asize,2,17,7
+quotes,20,bsize,2,17,7
+
+

This file can be placed in the config folder, or a path to the file +given at run time.

+

The compression utility compresses all tables and columns present in the +HDB but not specified in the driver file according the default +parameters. In effect, to compress an entire HDB using the same +compression parameters, a single row with name default would suffice. To +specify that a particular table should be compressed in a certain +different manner, it should be listed in the table. If default is given +as the column for this table, then all of the columns of that table will +be compressed accordingly. To specify the compression parameters for +particular columns, these should be listed individually. For example, +the file above will compress trades tables 20 days old or more with an +algorithm of 1, and a blocksize of 17. The asize and bsize columns of +any quotes tables older than 20 days old will be compressed using +algorithm 2, blocksize 17 and level 7. All other files present will be +compressed according to the default, using an algorithm 2, blocksize 17 +and compression level 6. To leave files uncompressed, you must specify +them explicitly in the table with a calgo of 0. If the file is already +compressed, note that an algorithm of 0 will decompress the file.

+

This utility should be used with caution. Before running the compression +it is recommended to run the function .cmp.showcomp, which takes three +parameters - the path to the database, the path to the csv file, and the +maximum age of the files to be compressed:

+
.cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
+        /- for using the csv file in the config folder
+.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
+        /- to specify a file
+
+

This function produces a table of the files to be compressed, the +parameters with which they will be compressed, and the current size of +the file. Note that the current size column is calculated using hcount; +on a file which is already compressed this returns the uncompressed +length, i.e. this cannot be used as a signal as to whether the file is +compressed already.

+
fullpath                        column table  partition  age calgo cblocksize clevel compressage currentsize
+-------------------------------------------------------------------------------------
+:/home/hdb/2013.11.05/depth/asize1 asize1 depth  2013.11.05 146 0     17         8      1           787960
+:/home/hdb/2013.11.05/depth/asize2 asize2 depth  2013.11.05 146 0     17         8      1           787960
+:/home/hdb/2013.11.05/depth/asize3 asize3 depth  2013.11.05 146 0     17         8      1           787960
+:/home/hdb/2013.11.05/depth/ask1   ask1   depth  2013.11.05 146 0     17         8      1           1575904
+....
+
+

To then run the compression function, use .cmp.compressmaxage with the +same parameters as .cmp.showcomp (hdb path, csv path, maximum age of +files):

+
.cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
+        /- for using the csv file in the config folder
+.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
+        /- to specify a file
+
+

To run compression on all files in the database disregarding the maximum +age of the files (i.e. from minage as specified in the configuration +file to infinitely old), then use:

+
.cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv]   
+        /- for using the csv file in the config folder
+.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile]    
+        /- to specify a file
+
+

Logs are produced for each file which is compressed or decompressed. +Once the utility is complete, the statistics of the compression are also +logged. This includes the memory savings in MB from compression, the +additional memory usage in MB for decompression, the total compression +ratio, and the total decompression ratio:

+
|comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.
+|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .
+|comp1|INF|compression|Check .cmp.statstab for info on each file.
+
+

A table with the compressed and decompressed length for each individual +file, in descending order of compression ratio, is also produced. This +can be found in .cmp.statstab:

+
file                    algo compressedLength uncompressedLength compressionratio
+-----------------------------------------------------------------------------------
+:/hdb/2014.03.05/depth/asize1 2    89057            772600             8.675343
+:/hdb/2014.01.06/depth/asize1 2    114930           995532             8.662073
+:/hdb/2014.03.05/depth/bsize1 2    89210            772600             8.660464
+:/hdb/2014.03.12/depth/bsize1 2    84416            730928             8.658643
+:/hdb/2014.01.06/depth/bsize1 2    115067           995532             8.651759
+.....
+
+

A note for windows users - windows supports compression only with a +compression blocksize of 16 or more.

+

+

dataloader.q

+

This script contains some utility functions to assist in loading data +from delimited files (e.g. comma separated, tab delimited). It is a more +generic version of the data loader example on +code.kx. +The supplied functions allow data to be read in configurable size chunks +and written out to the database. When all the data is written, the +on-disk data is re-sorted and the attributes are applied. The main +function is .loader.loadalldata which takes two parameters- a dictionary +of loading parameters and a directory containing the files to read. The +dictionary should/can have the following fields:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterReqTypeDescription
headersYsymbol listNames of the header columns in the file
typesYchar listData types to read from the file
separatorYchar[list]Delimiting character. Enlist it if first line of file is header data
tablenameYsymbolName of table to write data to
dbdirYsymbolDirectory to write data to
partitiontypeNsymbolPartitioning to use. Must be one of
`date`month`year`int. Default is `date
partitioncolNsymbolColumn to use to extract partition information.Default is `time
dataprocessfuncNfunctionDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}
chunksizeNintData size in bytes to read in one chunk. Default is 100 MB
compressionNint listCompression parameters to use e.g. 17 2 6. Default is empty list for no compression
gcNbooleanWhether to run garbage collection at appropriate points. Default is 0b (false)
+

Example usage:

+
.loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;"SP  FI";",";`trade;`:hdb); `:TDC/toload]
+.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;"SP  FI";enlist",";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]
+
+

+

subscriptions.q

+

The subscription utilities allow multiple subscriptions to different +data sources to be managed and maintained. Automatic resubscriptions in +the event of failure are possible, along as specifying whether the +process will get the schema and replay the log file from the remote +source (e.g. in the case of tickerplant subscriptions).

+

.sub.getsubscriptionhandles is used to get a table of processes to +subscribe to. The following can be used to return a table of all +connected processes of type tickerplant:

+
.sub.getsubscriptionhandles[`tickerplant;`;()!()]
+
+

.sub.subscribe is used to subscribe to a process for the supplied list +of tables and instruments. For example, to subscribe to instruments A, B +and C for the quote table from all tickerplants:

+
.sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
+
+

The subscription method uses backtick for “all” (which is the same as +kdb+tick). To subscribe to all tables, all instruments, from all +tickerplants:

+
.sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
+
+

See .api.p“.sub.*” for more details.

+

+

pubsub.q

+

pubsub.q is essentially a placeholder script to allow publish and +subscribe functionality to be implemented. Licenced kdb+tick users can +use the publish and subscribe functionality implemented in u.[k|q]. If +u.[k|q] is placed in the common code directory and loaded before +pubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt) +then publish and subscribe will be implemented. You can also build out +this file to add your own publish and subscribe routines as required.

+

+

tplogutils.q

+

tplogutils.q contains functions for recovering tickerplant log files. +Under certain circumstances the tickerplant log file can become corrupt +by having an invalid sequence of bytes written to it. A log file can be +recovered using a simple recovery method. However, this will only +recover messages up to the first invalid message. The recovery functions +defined in tplogutils.q allow all valid messages to be recovered from +the tickerplant log file.

+

+

monitoringchecks.q

+

monitoringchecks.q implements a set of standard, basic monitoring +checks. They include checks to ensure:

+
    +
  • +

    table sizes are increasing during live capture

    +
  • +
  • +

    the HDB data saves down correctly

    +
  • +
  • +

    the allocated memory of a process does not increase past a certain + size

    +
  • +
  • +

    the size of the symbol list in memory doesn’t grow to big

    +
  • +
  • +

    the process does not have too much on its pending subscriber queue

    +
  • +
+

These checks are intended to be run by the reporter process on a +schedule, and any alerts emailed to an appropriate recipient list.

+

+

heartbeat.q

+

heartbeat.q implements heartbeating, and relies on both timer.q and +pubsub.q. A table called heartbeat will be published periodically, +allowing downstream processes to detect the availability of upstream +components. The heartbeat table contains a heartbeat time and counter. +The heartbeat script contains functions to handle and process heartbeats +and manage upstream process failures. See .api.p.hb.*for details.

+

+

dbwriteutils.q

+

This contains a set of utility functions for writing data to historic +databases.

+

Sorting and Attributes

+

The sort utilities allow the sort order and attributes of tables to be +globally defined. This helps to manage the code base when the data can +potentially be written from multiple locations (e.g. written from the +RDB, loaded from flat file, replayed from the tickerplant log). The +configuration is defined in a csv which defaults to $KDBCONFG/sort.csv. +The default setup is that every table is sorted by sym and time, with a +p attribute on sym (this is the standard kdb+ tick configuration).

+
aquaq$ tail config/sort.csv 
+tabname,att,column,sort
+default,p,sym,1
+default,,time,1
+
+

As an example, assume we have an optiontrade table which we want to be +different from the standard set up. We would like the table to be sorted +by optionticker and then time, with a p attribute on optionticker. We +also have a column called underlyingticker which we can put an attribute +on as it is derived from optionticker (so there is an element of +de-normalisation present in the table). We also have an exchange field +which we would like to put a g attribute on. All other tables we want to +be sorted and parted in the standard way. The configuration file would +look like this (sort order is derived from the order within the file +combined with the sort flag being set to true):

+
aquaq$ tail config/sort.csv                
+tabname,att,column,sort
+default,p,sym,1
+default,,time,1
+optiontrade,p,optionticker,1
+optiontrade,,exchtime,1
+optiontrade,p,underlyingticker,0
+optiontrade,g,exchange,0
+
+

To invoke the sort utilities, supply a list of (tablename; partitions) +e.g.

+
q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)
+2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table
+2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters
+2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time
+2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/
+2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time
+2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/
+2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table
+
+

A different sort configuration file can be loaded with

+
.sort.getsortcsv[`:file]
+
+

Garbage Collection

+

The garbage collection utility prints some debug information before and +after the garbage collection.

+
q).gc.run[]                                                                                                                                                      
+2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
+2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
+
+

Table Manipulation

+

The table manipulation utilities allow table manipulation routines to be +defined in a single place. This is useful when data can be written from +mutliple different processes e.g. RDB, WDB, or tickerplant log replay. +Instead of having to create a separate definition of customised +manipulation in each process, it can be done in a single location and +invokved in each process.

+

+

help.q

+

The standard help.q from code.kx provides help utilities in the console. +This should be kept up to date with +[code.kx].

+
q)help`                                                                                                                                                                                                                         
+adverb    | adverbs/operators
+attributes| data attributes
+cmdline   | command line parameters
+data      | data types
+define    | assign, define, control and debug
+dotz      | .z locale contents
+errors    | error messages
+save      | save/load tables
+syscmd    | system commands
+temporal  | temporal - date & time casts
+verbs     | verbs/functions
+
+

+

html.q

+

An HTML utility has been added to accompany the HTML5 front end for the +Monitoring process. It includes functions to format dates, tables to csv +to configure the HTML file to work on the correct process. It is +accessible from the .html namespace.

+

+

Additional Utilities

+

There are some additional user contributed utility scripts available on +code.kx which are good candidates for inclusion. These could either be +dropped into the common code directory, or if not globally applicable +then in the code directory for either the process type or name. The full +set of user contributed code is documented +here.

+

+

Full API

+

The full public api can be found by running

+
q).api.u`                                                                                                                                                                                                                       
+name             | vartype  namespace public descrip                 ..
+-----------------| --------------------------------------------------..
+.proc.createlog  | function .proc     1      "Create the standard out..
+.proc.rolllogauto| function .proc     1      "Roll the standard out/e..
+.proc.loadf      | function .proc     1      "Load the specified file..
+.proc.loaddir    | function .proc     1      "Load all the .q and .k ..
+.lg.o            | function .lg       1      "Log to standard out"   ..
+..
+
+

Combined with the commented configuration file, this should give a good +overview of the functionality available. A description of the individual +namespaces is below- run .api.u namespace*to list the functions.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamespaceDescription
.procProcess API
.lgStandard out/error logging API
.errError throwing API
.usageUsage logging API
.accessPermissions API
.clientsClient tracking API
.serversServer tracking API
.asyncAsync communication API
.timerTimer API
.cacheCaching API
.tzTimezone conversions API
.checksMonitoring API
.cmpCompression API
.psPublish and Subscribe API
.hbHeartbeating API
.loaderData Loader API
.sortData sorting and attribute setting API
.subSubscription API
.gcGarbage Collection API
.tplogTickerplant Log Replay API
.apiAPI management API
+

+

Modified u.q

+

Starting in kdb+ v3.4, the new broadcast feature has some performance +benefits. It works by serialising a message once before sending it +asynchronously to a list of subscribers whereas the previous method +would serialise it separately for each subscriber. To take advantage of +this, we’ve modified u.q. This can be turned off by setting .u.broadcast +to false. It is enabled by default, but will only override default +publishing if the kdb+ version being used is 3.4 or after.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/site/visualisation/index.html b/site/visualisation/index.html new file mode 100644 index 000000000..dadf072b3 --- /dev/null +++ b/site/visualisation/index.html @@ -0,0 +1,560 @@ + + + + + + + + + + + + Visualisation - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

Visualisation

+

kdb+ supports websockets and so HTML5 GUIs can be built. We have +incorporated a set of server side and client side utilities to ease HTML +GUI development.

+

+

kdb+ Utilities

+

The server side utilities are contained in html.q. These utilise some +community code, specifically json.k and a modified version of u.q, both +from Kx Systems. The supplied functionality includes:

+
    +
  • +

    json.k provides two way conversion between kdb+ data structures and + JSON;

    +
  • +
  • +

    u.q is the standard pub/sub functionality provided with kdb+tick, + and a modified version is incorporated to publish data structures + which can be easily interpreted in JavaScript;

    +
  • +
  • +

    functions for reformatting temporal types to be JSON compliant;

    +
  • +
  • +

    page serving to utilise the inbuilt kdb+ webserver to serve custom + web pages. An example would be instead of having to serve a page + with a hardcoded websocket connection host and port, the kdb+ + process can serve a page connecting back to itself no matter which + host or port it is running on.

    +
  • +
+

+

JavaScript Utilities

+

The JavaScript utilities are contained in kdbconnect.js. The library +allows you to:

+
    +
  • +

    create a connection to the kdb+ process;

    +
  • +
  • +

    display the socket status;

    +
  • +
  • +

    sending queries;

    +
  • +
  • +

    binding results returned from kdb+ to updates in the webpage.

    +
  • +
+

+

Outline

+

All communication between websockets and kdb+ is asynchronous. The +approach we have adopted is to ensure that all data sent to the web +browser is encoded as a JSON object containing a tag to enable the web +page to decipher what the data relates to. The format we have chosen is +for kdb+ to send dictionaries of the form:

+
`name`data!("dataID";dataObject)
+
+

All the packing can be done by .html.dataformat. Please note that the +temporal types are converted to longs which can easily be converted to +JavaScript Date types. This formatting can be modified in the formating +dictionary .html.typemap.

+
q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)
+q).html.dataformat["start";(enlist `tradegraph)!enlist a]
+name| "start"
+data| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a)
+q)first (.html.dataformat["start";(enlist `tradegraph)!enlist a])[`data;`tradegraph]                                                                                     
+minute   | 32400000
+time     | 32400000
+date     | 1396828800000
+month    | 1396310400000
+timestamp| "2014-04-07T13:23:01Z"
+timespan | 48181023
+datetime | "2014-04-07T13:23:01Z"
+float    | 20f
+sym      | `a
+
+

We have also extended this structure to allow web pages to receive data +in a way similar to the standard kdb+tick pub/sub format. In this case, +the data object looks like:

+
`name`data!("upd";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))
+
+

This can be packed with .html.updformat:

+
q).html.updformat["upd";`tablename`tabledata!(`trade;a)]                                                                                                                 
+name| "upd"
+data| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a))
+q)first(.html.updformat["upd";`tablename`tabledata!(`trade;a)])[`data;`tabledata]                                                                                        
+minute   | 32400000
+time     | 32400000
+date     | 1396828800000
+month    | 1396310400000
+timestamp| "2014-04-07T13:23:01Z"
+timespan | 48181023
+datetime | "2014-04-07T13:23:01Z"
+float    | 20f
+sym      | `a
+
+

To utilise the pub/sub functionality, the web page must connect to the +kdb+ process and subscribe for updates. Subscriptions are done using

+
.html.wssub[`tablename]
+
+

Publications from the kdb+ side are done with

+
.html.pub[`tablename;tabledata]
+
+

On the JavaScript side the incoming messages (data events) must be bound +to page updates. For example, there might be an initialisation event +called “start” which allows the web page to retrieve all the initial +data from the process. The code below redraws the areas of the page with +the received data.

+
/* Bind data - Data type "start" will execute the callback function */
+KDBCONNECT.bind("data","start",function(data){
+  // Check that data is not empty
+  if(data.hbtable.length !== 0)
+   // Write HTML table to div element with id heartbeat-table
+   { $("#heartbeat-table").html(MONITOR.jsonTable(data.hbtable));}
+  if(data.lmtable.length !== 0)
+   // Write HTML table to div element with id logmsg-table
+   { $("#logmsg-table").html(MONITOR.jsonTable(data.lmtable));}  
+  if(data.lmchart.length !== 0)
+   // Log message error chart
+   { MONITOR.barChart(data.lmchart,"logmsg-chart","Error Count","myTab"); }
+  });
+
+

Similarly the upd messages must be bound to page updates. In this case, +the structure is slightly different:

+
KDBCONNECT.bind("data","upd",function(data){
+  if(data.tabledata.length===0) return;
+  if(data.tablename === "heartbeat")
+    { $("#heartbeat-table").html(MONITOR.jsonTable(data.tabledata));}
+  if(data.tablename === "logmsg")
+    { $("#logmsg-table").html(MONITOR.jsonTable(data.tabledata));}
+  if(data.tablename === "lmchart")
+    { MONITOR.barChart(data.tabledata,"logmsg-chart","Error Count","myTab"); }
+ });
+
+

To display the WebSocket connection status the event “ws_event” must be +bound and it will output one of these default messages: “Connecting...”, +“Connected” and “Disconnected” depending on the connection state of the +WebSocket. Alternatively the value of the readyState attribute will +determine the WebSocket status.

+
// Select html element using jQuery
+var $statusMsg = $("#status-msg");  
+KDBCONNECT.bind("ws_event",function(data){
+  // Data is the default message string
+  $statusMsg.html(data);
+});
+KDBCONNECT.core.websocket.readyState // Returns 1 if connected.
+
+

Errors can be displayed by binding the event called “error”.

+
KDBCONNECT.bind("error",function(data){
+  $statusMsg.html("Error - " + data);
+});
+
+

+

Example

+

A basic example is provided with the Monitor process. To get this to +work, u.q from kdb+tick should be placed in the code/common directory to +allow all processes to publish updates. It should be noted that this is +not intended as a production monitoring visualisation screen, moreso a +demonstration of functionality. See section monitorgui for more +details.

+

+

Further Work

+

Further work planned includes:

+
    +
  • +

    allow subscriptions on a key basis- currently all subscribers + receive all updates;

    +
  • +
  • +

    add JavaScript controls to allow in-place updates based on key + pairs, and scrolling window updates e.g. add N new rows to + top/bottom of the specified table;

    +
  • +
  • +

    allow multiple websocket connections to be maintained at the same + time.

    +
  • +
+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file From eee9f7290861dd2eb5e5a9996110d16ee057b1db Mon Sep 17 00:00:00 2001 From: Conal Logan Date: Thu, 12 Jan 2017 15:59:31 +0000 Subject: [PATCH 2/9] Removed site folder --- site/Overview/index.html | 828 -------- site/Processes/index.html | 1747 ----------------- site/assets/fonts/icon.eot | Bin 2224 -> 0 bytes site/assets/fonts/icon.svg | 22 - site/assets/fonts/icon.ttf | Bin 2072 -> 0 bytes site/assets/fonts/icon.woff | Bin 2148 -> 0 bytes site/assets/images/favicon-e565ddfa3b.ico | Bin 1150 -> 0 bytes site/assets/images/favicon.ico | Bin 1150 -> 0 bytes .../javascripts/application-997097ee0c.js | 1 - site/assets/javascripts/application.js | 1 - .../javascripts/modernizr-4ab42b99fd.js | 1 - site/assets/javascripts/modernizr.js | 1 - .../stylesheets/application-a422ff04cc.css | 1 - site/assets/stylesheets/application.css | 1 - .../stylesheets/palettes-05ab2406df.css | 1 - site/assets/stylesheets/palettes.css | 1 - site/conn/index.html | 612 ------ site/gettingstarted/index.html | 757 ------- site/graphics/AquaQ-TorQ-symbol.png | Bin 125149 -> 0 bytes site/graphics/TorQ-logo.png | Bin 108699 -> 0 bytes site/graphics/async.png | Bin 138698 -> 0 bytes site/graphics/discovery1.png | Bin 30996 -> 0 bytes site/graphics/discovery2.png | Bin 37928 -> 0 bytes site/graphics/discovery3.png | Bin 43736 -> 0 bytes site/graphics/fullarchitecture.gliffy | 1 - site/graphics/fullarchitecture.png | Bin 108103 -> 0 bytes site/graphics/fullarchitecture2.gliffy | 1 - site/graphics/fullarchitecture2.png | Bin 113571 -> 0 bytes site/graphics/html5frontend.jpg | Bin 157632 -> 0 bytes site/graphics/logo.pdf | Bin 212032 -> 0 bytes site/graphics/logo.png | Bin 14209 -> 0 bytes site/graphics/reporter.png | Bin 19542 -> 0 bytes site/graphics/simpletickdiagram.png | Bin 16225 -> 0 bytes site/graphics/torq-logo.png | Bin 18931 -> 0 bytes site/handlers/index.html | 999 ---------- site/index.html | 353 ---- site/mkdocs/js/lunr.min.js | 7 - site/mkdocs/js/mustache.min.js | 1 - site/mkdocs/js/require.js | 36 - .../js/search-results-template.mustache | 4 - site/mkdocs/js/search.js | 88 - site/mkdocs/js/text.js | 390 ---- site/mkdocs/search_index.json | 524 ----- site/sitemap.xml | 68 - site/utilities/index.html | 1423 -------------- site/visualisation/index.html | 560 ------ 46 files changed, 8429 deletions(-) delete mode 100644 site/Overview/index.html delete mode 100644 site/Processes/index.html delete mode 100755 site/assets/fonts/icon.eot delete mode 100755 site/assets/fonts/icon.svg delete mode 100755 site/assets/fonts/icon.ttf delete mode 100755 site/assets/fonts/icon.woff delete mode 100644 site/assets/images/favicon-e565ddfa3b.ico delete mode 100644 site/assets/images/favicon.ico delete mode 100644 site/assets/javascripts/application-997097ee0c.js delete mode 100644 site/assets/javascripts/application.js delete mode 100644 site/assets/javascripts/modernizr-4ab42b99fd.js delete mode 100644 site/assets/javascripts/modernizr.js delete mode 100644 site/assets/stylesheets/application-a422ff04cc.css delete mode 100644 site/assets/stylesheets/application.css delete mode 100644 site/assets/stylesheets/palettes-05ab2406df.css delete mode 100644 site/assets/stylesheets/palettes.css delete mode 100644 site/conn/index.html delete mode 100644 site/gettingstarted/index.html delete mode 100755 site/graphics/AquaQ-TorQ-symbol.png delete mode 100755 site/graphics/TorQ-logo.png delete mode 100755 site/graphics/async.png delete mode 100755 site/graphics/discovery1.png delete mode 100755 site/graphics/discovery2.png delete mode 100755 site/graphics/discovery3.png delete mode 100755 site/graphics/fullarchitecture.gliffy delete mode 100755 site/graphics/fullarchitecture.png delete mode 100755 site/graphics/fullarchitecture2.gliffy delete mode 100755 site/graphics/fullarchitecture2.png delete mode 100755 site/graphics/html5frontend.jpg delete mode 100755 site/graphics/logo.pdf delete mode 100755 site/graphics/logo.png delete mode 100755 site/graphics/reporter.png delete mode 100755 site/graphics/simpletickdiagram.png delete mode 100755 site/graphics/torq-logo.png delete mode 100644 site/handlers/index.html delete mode 100644 site/index.html delete mode 100644 site/mkdocs/js/lunr.min.js delete mode 100644 site/mkdocs/js/mustache.min.js delete mode 100644 site/mkdocs/js/require.js delete mode 100644 site/mkdocs/js/search-results-template.mustache delete mode 100644 site/mkdocs/js/search.js delete mode 100644 site/mkdocs/js/text.js delete mode 100644 site/mkdocs/search_index.json delete mode 100644 site/sitemap.xml delete mode 100644 site/utilities/index.html delete mode 100644 site/visualisation/index.html diff --git a/site/Overview/index.html b/site/Overview/index.html deleted file mode 100644 index 8a1482ef9..000000000 --- a/site/Overview/index.html +++ /dev/null @@ -1,828 +0,0 @@ - - - - - - - - - - - - About - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- - -
-
- -

Overview

-

-

What is kdb+?

-

kdb+ is the market leading timeseries database from Kx Systems. kdb+ -is used predominently in the Financial Services sector to capture, -process and analyse billions of records on a daily basis, with Kx -counting almost all of the top tier investment banks as customers. kdb+ -incorporates a programming language, q, which is known for its -performance and expressive power. Given the unsurpassed data management -and analytical capabilities of kdb+, the applicability of kdb+ -technology extends beyond the financial domain into any sector where -rapid pre-built or adhoc analysis of large datasets is required. Other -sectors which have good use cases for kdb+ include utilities, -pharmaceuticals, telecoms, manufacturing, retail and any sector -utilising telemetry or sensor data.

-

-

What is AquaQ TorQ?

-

AquaQ TorQ is a framework which forms the basis of a production kdb+ -system by implementing some core functionality and utilities on top of -kdb+, allowing developers to concentrate on the application business -logic. We have incorporated as many best practices as possible, with -particular focus on performance, process management, diagnostic -information, maintainability and extensibility. We have kept the code as -readable as possible using descriptive comments, error messages, -function names and variable names. Wherever possible, we have tried to -avoid re-inventing the wheel and instead have used contributed code from -code.kx.com (either directly or modified). All code sections taken from -code.kx.com are referenced in this document.

-

AquaQ TorQ can be extended or modified as required. We have chosen some -default behaviour, but it can all be overridden. The features of AquaQ -TorQ are:

-
    -
  • -

    Process Management: Each process is given a type and name. By - default these are used to determine the code base it loads, the - configuration loaded, log file naming and how it reports itself to - discovery services. Whenever possible we have tried to ensure that - all default behaviour can be overridden at the process type level, - and further at the process name level.

    -
  • -
  • -

    Code Management: Processes can optionally load common or process - type/name specific code bases. All code loading is error trapped.

    -
  • -
  • -

    Configuration Management: Configuration scripts can be loaded as - standard and with specific process type/name configuration - overriding default values. Configuration scripts are loaded in a - specific order; default, then process type specific, then process - name specific. Values loaded last will override values loaded - previously.

    -
  • -
  • -

    Usage Logging: All process usage is logged to a single text log file - and periodically rolled. Logging includes opening/closing of - connections, synchronous and asynchronous queries and functions - executed on the timer. Logged values include the request, the - details of where it came from, the time it was received, the time it - took, memory usage before and after, the size of the result set, the - status and any error message.

    -
  • -
  • -

    Incoming and Outgoing Connection Management: Incoming (client) and - outgoing (server) connections are stored and their usage monitored - through query counts and total data size counts. Connections are - stored and retrieved and can be set to automatically be re-opened as - required. The password used for outgoing connections can be - overridden at default, process type and process name level.

    -
  • -
  • -

    Access Controls: Basic access controls are provided, and could be - extended. These apply restrictions on the IP addresses of remote - connections, the users who can access the process, and the functions - that each user can execute. A similar hierarchical approach is used - for access control management as for configuration management.

    -
  • -
  • -

    Timer Extensions: Mechanism to allow multiple functions to be added - to the timer either on a repeating or one-off basis. Multiple - re-scheduling algorithms supplied for repeating timers.

    -
  • -
  • -

    Standard Out/Error Logging: Functions to print formatted messages to - standard out and error. Hooks are provided to extend these as - required, e.g. publication to centralised logging database. Standard - out and error are redirected to appropriately named, timestamped and - aliased log files, which are periodically rolled.

    -
  • -
  • -

    Error Handling: Different failure options are supplied in case code - fails to load; either exit upon failure, stop at the point of - failure or trap and continue.

    -
  • -
  • -

    Visualisation: Utilities to ease GUI development using websockets - and HTML5.

    -
  • -
  • -

    Documentation and Development Tools: Functionality to document the - system is built into AquaQ TorQ, and can be accessed directly from - every q session. Developers can extend the documentation as they add - new functions. Functionality for searching for functions and - variables by name and definition is provided, and for ordering - variables by memory usage. The standard help.q from code.kx is also - included.

    -
  • -
  • -

    Utilities: We intend to build out and add utilities as we find them - to be suitably useful and generic. So far we have:

    -
      -
    1. -

      Caching: allows a result set cache to be declared and result - sets to be stored and retrieved from the cache. Suitable for - functions which may be run multiple times with the same - parameters, with the underlying data not changing in a short - time frame;

      -
    2. -
    3. -

      Timezone Handling: derived from code.kx, allows conversion - between timestamps in different timezones;

      -
    4. -
    5. -

      Email: an library to send emails;

      -
    6. -
    7. -

      Async Messaging: allows easy use of advanced async messaging - methods such as deferred synchronous communication and async - communication using postback functions;

      -
    8. -
    9. -

      Heartbeating: each process can be set to publish heartbeats, and - subscribe to and manage heartbeats from other processes in the - environment;

      -
    10. -
    11. -

      Data Loading: utility wrapper around .Q.fsn to read a data file - from disk, manipulate it and write it out in chunks;

      -
    12. -
    13. -

      Subscriptions: allow processes to dynamically detect and - subscribe to datasources;

      -
    14. -
    15. -

      Tickerplant Log File Recovery: recover as many messages as - possible from corrupt log files;

      -
    16. -
    17. -

      Database Writing: utility functions for writing to, sorting and - parting on disk databases;

      -
    18. -
    19. -

      Compression: allows compression of a database. This can be - performed using a set of parameters for the entire database, but - also gives the flexibilty of compressing user-specified tables - and/or columns of those tables with different parameters if - required, and also offers decompression.

      -
    20. -
    -
  • -
-

AquaQ TorQ will wrap easily around kdb+tick and therefore around any -tickerplant, RDB, HDB or real time processing application. We currently -have several customised processes of our own:

-
    -
  • -

    Discovery Service: Every process has a type, name and set of - available attributes, which are used by other processes to connect - to it. The Discovery Service is a central point that can be used to - find other available processes. Client processes can subscribe to - updates from the discovery service as new processes become - available- the discovery service will notify its subscribers, which - can then use the supplied hook to implement required behavior e.g. - connect to the newly available process;

    -
  • -
  • -

    Gateway: A fully synchronous and asynchronous gateway is provided.

    -

    The gateway will connect to a defined list of process types (can be -homogenous or heterogeneous processes) and will route queries across -them according to the priority of received requests. The routing -algorithms can be easily modified e.g. give priority to user X, or -only route queries to processes which exist in the same data centre -or geographical region to avoid the WAN (this would entail using the -process attributes). The gateway can either return the result to the -client back down the same handle, or it can wrap it in a callback -function to be invoked on the client;

    -
  • -
  • -

    Real Time Database (RDB): A customized version of the kdb+tick RDB, - to allow dynamic tickerplant subscriptions, reloading of multiple - HDBs using authenticated connections, and customized end-of-day save - downs. The RDB, WDB and tickerplant log replay share a common code - base to ensure that a save-down modification to a table is applied - across each of these processes.

    -
  • -
  • -

    Write Database (WDB): The job of a WDB is to write data to disk - rather than to serve client queries. WDBs usually write data out - periodically throughout the day, and are useful when there is too - much data to fit into memory and/or the end of day save operation - needs to be speeded up. The concept is based on - w.q

    -
  • -
  • -

    Tickerplant Log Replay: A process for replaying tickerplant log - files to create on-disk data sets. Extended features are provided - for only replaying subsets of log files (by message number and/or - table name), replaying in chunks, invoking bespoke final behaviour - etc.;

    -
  • -
  • -

    Reporter: The Reporter Process runs defined reports (q queries or - parameterized functions) against specific database or gateways on a - schedule. The results are retrieved and processed. Processing can be - user defined, or can be a standard operation such as writing the - data to disk, or emailing the results to a list of recipients. This - can be useful for running system checks or generating management - reports.

    -
  • -
  • -

    Housekeeping: A process to undertake housekeeping tasks - periodically, such as compressing and removing files that are no - longer used. Housekeeping looks up a file of instructions and - performs maintenance tasks on directories accordingly. Features - allow selective file deletion and zipping according to file age, - including a search string parameter and the ability to exclude items - from the search. The process can be scheduled, or run immediately - from the command line and can be extended as required to incorporate - more tasks.

    -
  • -
  • -

    File Alerter: A process to periodically scan a set of directories - and execute a function based on the availability of a file. This is - useful where files may arrive to the system during the day and must - be acted upon (e.g. files are uploaded to a shared directory by - users/clients). The functions to execute are defined by the user and - the whole process is driven by a csv file detailing the file to - search for, the function to execute and, optionally, a directory to - move the file to after it has been processed.

    -
  • -
  • -

    Monitor: A basic monitoring process which uses the Discovery Service - to locate the other processes within the system, listens for - heartbeats, and subscribes for log messages. This should be extended - as required but provides a basic central point for system health - checks;

    -
  • -
  • -

    Kill: A process used to kill other processes, optionally using the - Discovery Service to locate them.

    -
  • -
-

-

A Large Scale Data Processing Platform

-

One of the key drivers behind TorQ development has been to ensure all -the tools necessary to build a large scale data processing platform are -available. kdb+tick -provides the basic building blocks, and a standard set-up usually looks -something like this:

-

Simple kdb+tick Setup

-

However, in reality it is usually more complicated. A larger scale -architecture serving large numbers of client queries and receiving data -from multiple sources may look like this:

-

Production Data Capture

-

A common practice is to use a gateway (section gateway) to -manage client queries across back-end processes. The gateway can load -balance across processes and make failures transparent to the client. If -the clients access the gateway with asynchronous calls, then the gateway -can serve many requests at once and additionally implement client -queuing algorithms.

-

Other common production features include:

-
    -
  • -

    A modified version of the RDB (section sec:rdb) which does - different operations at end-of-day, reloads multiple HDB processes - etc.

    -
  • -
  • -

    A Write Database (section [sec:wdb]) which receives data from the - tickerplant and periodically writes it to disk. WDBs are used when - there is too much data in a day to fit into memory and/or to speed - up the end-of-day rollover job

    -
  • -
  • -

    Processes that load data from other sources either into the HDB - directly or to the RDB potentially via the tickerplant (section - [sec:dataloader]). The data may be dropped in specific locations - which have to be monitored (section [sec:filealerter])

    -
  • -
  • -

    A Reporting Engine (section [sec:reporter]) to run periodic - reports and do something with the result (e.g. generate an xls file - from the database and email it to senior management). Reporting - engines can also be used to run periodic checks of the system

    -
  • -
  • -

    A Discovery Service (section [sec:discovery]) to allow processes - to locate each other, and to allow processes to dynamically register - availability and push notifications around the system.

    -
  • -
  • -

    Basic Monitoring (section [sec:monitor]) of process availability

    -
  • -
  • -

    Housekeeping (section [sec:housekeeping]) to ensure log files are - tidied up, tickerplant log files are compressed/moved in a timely - fashion etc.

    -
  • -
-

-

Do I Really Have to Read This Whole Document?

-

Hopefully not. The core of AquaQ TorQ is a script called torq.q and we -have tried to make it as descriptive as possible, so perhaps that will -suffice. The first place to look will be in the config files, the main -one being \$KDBCONFIG/settings/default.q. This should contain a lot of -information on what can be modified. In addition:

-
    -
  • -

    We have added a load of usage information:

    -
    aquaq$ q torq.q -usage
    -KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
    -
    -General:
    - This script should form the basis of a production kdb+ environment.
    - It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags 
    -... etc ...
    -
    -

    If sourcing from another script there are hooks to modify and extend -the usage information as required.

    -
  • -
  • -

    We have some pretty extensive logging:

    -
    aquaq$ q torq.q -p 9999 -debug
    -KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
    -
    -2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0
    -2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0
    -2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv
    -2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1
    -2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found
    -... etc ...
    -
    -
  • -
  • -

    We have added functionality to find functions or variables defined - in the session, and also to search function definitions.

    -
    q).api.f`max                                                                                                                                                                                   
    -name                | vartype   namespace public descrip              ..
    ---------------------| ------------------------------------------------..
    -maxs                | function  .q        1      ""                   ..
    -mmax                | function  .q        1      ""                   ..
    -.clients.MAXIDLE    | variable  .clients  0      ""                   ..
    -.access.MAXSIZE     | variable  .access   0      ""                   ..
    -.cache.maxsize      | variable  .cache    1      "The maximum size in ..
    -.cache.maxindividual| variable  .cache    1      "The maximum size in ..
    -max                 | primitive           1      ""                   ..
    -
    -q)first 0!.api.p`.api                                                                                                                                                                          
    -name     | `.api.f
    -vartype  | `function
    -namespace| `.api
    -public   | 1b
    -descrip  | "Find a function/variable/table/view in the current process"
    -params   | "[string:search string]"
    -return   | "table of matching elements"
    -
    -q).api.p`.api                                                                                                                                                                                  
    -name        | vartype  namespace public descrip                       ..
    -------------| --------------------------------------------------------..
    -.api.f      | function .api      1      "Find a function/variable/tabl..
    -.api.p      | function .api      1      "Find a public function/variab..
    -.api.u      | function .api      1      "Find a non-standard q public ..
    -.api.s      | function .api      1      "Search all function definitio..
    -.api.find   | function .api      1      "Generic method for finding fu..
    -.api.search | function .api      1      "Generic method for searching ..
    -.api.add    | function .api      1      "Add a function to the api des..
    -.api.fullapi| function .api      1      "Return the full function api ..
    -
    -
  • -
  • -

    We have incorporated help.q.

    -
    q)help`                                                                                                                                                                                        
    -adverb    | adverbs/operators
    -attributes| data attributes
    -cmdline   | command line parameters
    -data      | data types
    -define    | assign, define, control and debug
    -dotz      | .z locale contents
    -errors    | error messages
    -save      | save/load tables
    -syscmd    | system commands
    -temporal  | temporal - date & time casts
    -verbs     | verbs/functions
    -
    -
  • -
  • -

    We have separated and commented all of our config:

    -
    aquaq$ head config/default.q 
    -/- Default configuration - loaded by all processes
    -
    -/- Process initialisation
    -\d .proc
    -loadcommoncode:1b   /- whether to load the common code defined at
    -                        /- ${KDBCODE}/common
    -loadprocesscode:0b  /- whether to load the process specific code defined at 
    -                        /- ${KDBCODE}/{process type} 
    -loadnamecode:0b     /- whether to load the name specific code defined at 
    -                    /- ${KDBCODE}/{name of process}
    -loadhandlers:1b     /- whether to load the message handler code defined at 
    -                        /- ${KDBCODE}/handlers
    -logroll:1b      /- whether to roll the std out/err logs daily
    -... etc ...
    -
    -
  • -
-

-

Operating System and kdb+ Version

-

AquaQ TorQ has been built and tested on the linux and OSX operating -systems though as far as we are aware there is nothing that would make -this incompatible with Solaris or Windows. It has also been tested with -kdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+ -versions or operating systems.

-

-

License

-

This code is released under the MIT license.

- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/site/Processes/index.html b/site/Processes/index.html deleted file mode 100644 index 015da42aa..000000000 --- a/site/Processes/index.html +++ /dev/null @@ -1,1747 +0,0 @@ - - - - - - - - - - - - Processes - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- - -
-
- -

-

Processes

-

A set of processes is included. These processes build upon AquaQ TorQ, -providing specific functionality. All the process scripts are contained -in $KDBCODE/processes. All processes should have an entry in -$KDBCONFIG/process.csv. All processes can have any type and name, -except for discovery services which must have a process type of -“discovery”. An example process.csv is:

-
aquaq$ cat config/process.csv
-host,port,proctype,procname
-aquaq,9998,rdb,rdb_europe_1
-aquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1
-aquaq,9996,discovery,discovery1
-aquaq,9995,discovery,discovery2
-aquaq,8000,gateway,gateway1
-aquaq,5010,tickerplant,tickerplant1
-aquaq,5011,rdb,rdb1
-aquaq,5012,hdb,hdb1
-aquaq,5013,hdb,hdb2
-aquaq,9990,tickerlogreplay,tpreplay1
-aquaq,20000,kill,killhdbs
-aquaq,20001,monitor,monitor1
-aquaq,20002,housekeeping,hk1
-
-

-

Discovery Service

-

Overview

-

Processes use the discovery service to register their own availability, -find other processes (by process type) and subscribe to receive updates -for new process availability (by process type). The discovery service -does not manage connections- it simply returns tables of registered -processes, irrespective of their current availability. It is up to each -individual process to manage its own connections.

-

The discovery service uses the process.csv file to make connections to -processes on start up. After start up it is up to each individual -process to attempt connections and register with the discovery service. -This is done automatically, depending on the configuration parameters. -Multiple discovery services can be run in which case each process will -try to register and retrieve process details from each discovery process -it finds in its process.csv file. Discovery services do not replicate -between themselves. A discovery process must have its process type -listed as discovery.

-

To run the discovery service, use a start line such as:

-
aquaq $ q torq.q -load code/processes/discovery.q -p 9995
-
-

Modify the configuration as required.

-

Operation

-
    -
  1. -

    Processes register with the discovery service.

    -

    Discovery service
-registration

    -
  2. -
  3. -

    Processes use the discovery service to locate other processes.

    -

    Process location

    -
  4. -
  5. -

    When new services register, any processes which have registered an - interest in that process type are notified.

    -

    Notification

    -
  6. -
-

Available Processes

-

The list of available processes can be found in the .servers.SERVERS -table.

-
q).servers.SERVERS                                                                                                                                                                                                                                                            
-procname     proctype        hpup            w  hits startp                        lastp                         endp attributes                                                                   
--------------------------------------------------------------------------------------
-discovery1   discovery       :aquaq:9995     0                                  2014.01.22D17:00:40.947470000      ()!()                                                                        
-discovery2   discovery       :aquaq:9996     0                                  2014.01.22D17:00:40.947517000      ()!()                                                                        
-hdb2         hdb             :aquaq:5013     0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
-killtick     kill            :aquaq:20000    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
-tpreplay1    tickerlogreplay :aquaq:20002    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
-tickerplant1 tickerplant     :aquaq:5010  6  0    2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000      ()!()                                                                        
-monitor1     monitor         :aquaq:20001 9  0    2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000      ()!()                                                                        
-rdb1         rdb             :aquaq:5011  7  0    2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000      `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades)          
-hdb3         hdb             :aquaq:5012  8  0    2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000      `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)
-gateway1     gateway         :aquaq:5020  10 0    2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000      ()!()
-
-

-

Gateway

-

A synchronous and asynchronous gateway is provided. The gateway can be -used for load balancing and/or to join the results of queries across -heterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should -only be used with asynchronous calls. Synchronous calls cause the -gateway to block so limits the gateway to serving one query at a time -(although if querying across multiple backend servers the backend -queries will be run in parallel). When using asynchronous calls the -client can either block and wait for the result (deferred synchronous) -or post a call back function which the gateway will call back to the -client with. With both asynchronous and synchronous queries the backend -servers to execute queries against are selected using process type. The -gateway API can be seen by querying .api.p“.gw.*” within a gateway -process.

-

Gateway behaviour

-

Asynchronous Behaviour

-

Asynchronous queries allow much greater flexibility. They allow multiple -queries to be serviced at once, prioritisation, and queries to be timed -out. When an asynchronous query is received the following happens:

-
    -
  • -

    the query is placed in a queue;

    -
  • -
  • -

    the list of available servers is retrieved;

    -
  • -
  • -

    the queue is prioritised, so those queries with higher priority are - serviced first;

    -
  • -
  • -

    queries are sent to back end servers as they become available. Once - the backend server returns its result, it is given another query;

    -
  • -
  • -

    when all the partial results from the query are returned the results - are aggregated and returned to the client. They are either returned - directly, or wrapped in a callback and posted back asynchronously to - the client.

    -
  • -
-

The two main customisable features of the gateway are the selection of -available servers (.gw.availableservers) and the queue prioritisation -(.gw.getnextqueryid). With default configuration, the available servers -are those servers which are not currently servicing a query from the -gateway, and the queue priority is a simple FIFO queue. The available -servers could be extended to handle process attributes, such as the -available datasets or the location of the process, and the queue -prioritisation could be modified to anything required e.g. based on the -query itself, the username, host of the client etc.

-

An asynchronous query can be timed out using a timeout defined by the -client. The gateway will periodically check if any client queries have -not completed in the alotted time, and return a timeout error to the -client. If the query is already running on any backend servers then they -cannot be timed out other than by using the standard -T flag.

-

Synchronous Behaviour

-

When using synchronous queries the gateway can only handle one query at -a time and cannot timeout queries other than with the standard -T flag. -All synchronous queries will be immediately dispatched to the back end -processes. They will be dispatched using an asyhcnronous call, allowing -them to run in parallel rather than serially. When the results are -received they are aggregated and returned to the client.

-

Process Discovery

-

The gateway uses the discovery service to locate processes to query -across. The discovery service will notify the gateway when new processes -become available and the gateway will automatically connect and start -using them. The gateway can also use the static information in -process.csv, but this limits the gateway to a predefined list of -processes rather than allowing new services to come online as demand -requires.

-

Error Handling

-

When synchronous calls are used, q errors are returned to clients as -they are encountered. When using asynchronous calls there is no way to -return actual errors and appropriately prefixed strings must be used -instead. It is up to the client to check the type of the received result -and if it is a string then whether it contains the error prefix. The -error prefix can be changed, but the default is “error: ”. Errors will -be returned when:

-
    -
  • -

    the client requests a query against a server type which the gateway - does not currently have any active instances of (this error is - returned immediately);

    -
  • -
  • -

    the query is timed out;

    -
  • -
  • -

    a back end server returns an error;

    -
  • -
  • -

    a back end server fails;

    -
  • -
  • -

    the join function fails.

    -
  • -
-

If postback functions are used, the error string will be posted back -within the postback function (i.e. it will be packed the same way as a -valid result).

-

Client Calls

-

There are four main client calls. The .gw.sync* methods should only be -invoked synchronously, and the .gw.async* methods should only be -invoked asynchronously. Each of these are documented more extensively in -the gateway api. Use .api.p“.gw.*” for more details.

- - - - - - - - - - - - - - - - - - - - - - - - - -
FunctionDescription
.gw.syncexec[query; servertypes]Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.
.gw.syncexecj[query; servertypes; joinfunction]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results.
.gw.asyncexec[query; servertypes]Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.
.gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.
-

For the purposes of demonstration, assume that the queries must be run -across an RDB and HDB process, and the gateway has one RDB and two HDB -processes available to it.

-
q).gw.servers                                                                                                                                                                                                                                                                 
-handle| servertype inuse active querycount lastquery                     usage                attributes                   
-------| --------------------------------------------------------------------
-7     | rdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk
-8     | hdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk
-9     | hdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk
-12    | rdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk
-
-

Both the RDB and HDB processes have a function f and table t defined. f -will run for 2 seconds longer on the HDB processes then it will the RDB.

-
q)f                                                                                                                                                                                                                                                                           
-{system"sleep ",string x+$[`hdb=.proc.proctype;2;0]; t}
-q)t                                                                                                                                                                                                                                                                           
-a   
-----
-5013
-5014
-5015
-5016
-5017
-
-

Run the gateway. The main parameter which should be set is the -.servers.CONNECTIONS parameter, which dictates the process types the -gateway queries across. Also, we need to explicitly allow sync calls. We -can do this from the config or from the command line.

-
q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb
-
-

Start a client and connect to the gateway. Start with a sync query. The -HDB query should take 4 seconds and the RDB query should take 2 seconds. -If the queries run in parallel, the total query time should be 4 -seconds.

-
q)h:hopen 8000                                                                                                                                                                                                                                                                
-q)h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                            
-a   
-----
-5014
-5015
-5016
-5017
-5018
-5012
-5013
-5014
-5015
-5016
-q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                         
-4009
-
-

If a query is done for a server type which is not registered, an error -is returned:

-
q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other)                                                                                                                                                                                                                                   
-`not all of the requested server types are available; missing other
-
-

Custom join functions can be specified:

-
q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x})                                                                                                                                                                                                  
-a   | x
-----| -
-5014| 2
-5015| 2
-5016| 2
-5017| 1
-5018| 1
-5012| 1
-5013| 1
-
-

Custom joins can fail with appropriate errors:

-
q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x})                                                                                                                                                                                                  
-`failed to apply supplied join function to results: b
-
-

Asynchronous queries must be sent in async and blocked:

-
q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::)                                                                                                                                                                                                                          
-    /- This white space is from pressing return
-    /- the client is blocked and unresponsive
-
-q)q)q)                                                                                                                                                                                                                                                                        
-q)                                                                                                                                                                                                                                                                            
-q)r                                                                                                                                                                                                                                                                           
-a   
-----
-5014
-5015
-5016
-5017
-5018
-5012
-5013
-5014
-5015
-5016
-q)
-
-

We can send multiple async queries at once. Given the gateway has two -RDBs and two HDBs avaialble to it, it should be possible to service two -of these queries at the same time.

-
q)h:hopen each 8000 8000                                                                                                                                                                                                                                                      
-q)\t (neg h)@\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\:(::); r:h@\:(::)
-4012
-q)r                                                                                                                                                                                                                                                                           
-+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016
-+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003
-
-

Alternatively async queries can specify a postback so the client does -not have to block and wait for the result. The postback function must -take two parameters- the first is the function that was sent up, the -second is the results. The postback can either be a lambda, or the name -of a function.

-
q)h:hopen 8000                                                                                                                                                                                                                                                                
-q)handleresults:{-1(string .z.z)," got results"; -3!x; show y}                                                                                                                                                                                                                
-q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn)                                                                                                                                                                                                           
-q)
-q)  /- These q prompts are from pressing enter
-q)  /- The q client is not blocked, unlike the previous example
-q)
-q)2014.01.07T16:53:42.481 got results
-a   
-----
-5014
-5015
-5016
-5017
-5018
-5012
-5013
-5014
-5015
-5016
-
-/- Can also use a named function rather than a lambda
-q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)
-q)
-q)              
-q)2014.01.07T16:55:12.235 got results
-a   
-----
-5014
-5015
-5016
-5017
-5018
-5012
-5013
-5014
-5015
-5016
-
-

Asynchronous queries can also be timed out. This query will run for 22 -seconds, but should be timed out after 5 seconds. There is a tolerance -of +5 seconds on the timeout value, as that is how often the query list -is checked. This can be reduced as required.

-
q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)
-
-q)q)q)r                                                                                                                                                                                                                                                                       
-"error: query has exceeded specified timeout value"
-q)\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)                                                                                                                                                                                                  
-6550
-
-

Non kdb+ Clients

-

All the examples in the previous section are from clients written in q. -However it should be possible to do most of the above from non kdb+ -clients. The officially supported APIs for Java, C# and C allow the -asynchronous methods above. For example, we can modify the try block in -the main function of the Java Grid -Viewer:

-
import java.awt.BorderLayout;
-import java.awt.Color;
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.swing.JFrame;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.table.AbstractTableModel;
-import kx.c;
-
-public class Main {
-    public static class KxTableModel extends AbstractTableModel {
-        private c.Flip flip;
-        public void setFlip(c.Flip data) {
-            this.flip = data;
-        }
-
-        public int getRowCount() {
-            return Array.getLength(flip.y[0]);
-        }
-
-        public int getColumnCount() {
-            return flip.y.length;
-        }
-
-        public Object getValueAt(int rowIndex, int columnIndex) {
-            return c.at(flip.y[columnIndex], rowIndex);
-        }
-
-        public String getColumnName(int columnIndex) {
-            return flip.x[columnIndex];
-        }
-    };
-
-    public static void main(String[] args) {
-        KxTableModel model = new KxTableModel();
-        c c = null;
-        try {
-            c = new c("localhost", 8000,"username:password");
-            // Create the query to send
-        String query=".gw.asyncexec[(`f;2);`hdb`rdb]";
-            // Send the query 
-        c.ks(query);
-            // Block on the socket and wait for the result
-        model.setFlip((c.Flip) c.k());
-        } catch (Exception ex) {
-            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
-        } finally {
-            if (c != null) {try{c.close();} catch (IOException ex) {}
-          }
-        }
-        JTable table = new JTable(model);
-        table.setGridColor(Color.BLACK);
-        String title = "kdb+ Example - "+model.getRowCount()+" Rows";
-        JFrame frame = new JFrame(title);
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
-        frame.setSize(300, 300);
-        frame.setVisible(true);
-    }
-}
-
-

Some of the unofficially supported APIs may only allow synchronous calls -to be made.

-

-

Real Time Database (RDB)

-

The Real Time Database is a modified version of r.q found in kdb+tick. -The modifications from the standard r.q include:

-
    -
  • -

    Tickerplant (data source) and HDB location derived from processes - defined by the discovery service or from config file;

    -
  • -
  • -

    Automatic re-connection and resubscription to tickerplant;

    -
  • -
  • -

    List of tables to subscribe to supplied as configuration setting;

    -
  • -
  • -

    More pre-built flexibility in end-of-day;

    -
  • -
  • -

    More verbose end-of-day logging;

    -
  • -
  • -

    Reload multiple authenticated HDBs after end-of-day;

    -
  • -
  • -

    End-of-day save down manipulation code is shared between RDB, WDB - and tickerplant log replay

    -
  • -
-

See the top of the file for more information.

-

-

Write Database (WDB)

-

The Write Database or WDB is based on w.q. This process features a -number of modifications and enhancements over w.q:

-
    -
  1. -

    Provides the option to write down to a custom partition scheme, - defined by parted columns in sort.csv, which removes the need for - end of day sorting;

    -
  2. -
  3. -

    Greater configuration options; max rows on a per table basis, list - subscription tables, upd function etc. See the top of the process - file for the options;

    -
  4. -
  5. -

    Use of common code with the RDB and Tickerplant Log Replay process - to manipulate tables before save, sort and apply attributes;

    -
  6. -
  7. -

    Checks whether to persist data to disk on a timer rather than on - each tick;

    -
  8. -
  9. -

    Informs other RDB, HDB and GW processes that end of day save and - sort has completed;

    -
  10. -
  11. -

    More log information supplied.

    -
  12. -
-

The WDB process can broken down into two main functions:

-
    -
  1. -

    Periodically saving data to disk and

    -
  2. -
  3. -

    Sorting data at end of day

    -
  4. -
-

The WDB process provides flexibility so it can be set-up as a -stand-alone process that will both save and sort data or two separate -processes (one that saves the data and another that will sort the data -on disk). This allows greater flexibility around the end of day event as -sorting data can be time consuming. It is also helps when implementing -seemless rollovers (i.e. no outage window at end-of-day).

-

The behaviour of the WDB process is controlled by the .wdb.mode -parameter. This should be set to one of following three values:

-
    -
  • -

    saveandsort - the process will subscribe for data, periodically - write data to disk and at EOD it will flush remaining data to disk - before sorting it and informing GWs, RDBs and HDBs etc.

    -
  • -
  • -

    save - the process will subscribe for data, periodically write data - to disk and at EOD it will flush remaining data to disk. It will - then inform its respective sort mode process to sort the data

    -
  • -
  • -

    sort - the process will wait to get a trigger from its respective - save mode process. When this is triggered it will sort the data on - disk, apply attributes and the trigger a reload on the RDB, HDB and - GW processes

    -
  • -
-

When running a system with separate save and sort process, the sort -process should be configured in the processes.csv file with a proctype -of sort. The save process will check for processes with a proctype of -sort when it attempts to trigger the end of day sort of the data.

-

The wdb process provides two methods for persisting data to disk and -sorting at the end of the day.

-
    -
  • -

    default - Data is persisted into a partition defined by the - [partitiontype] variable, similar to the hdb partition scheme. The - general scheme is of the form - [wdbdir]/[partitiontype]/[table]/. And a typical partition - directory would be similar to wdb/database/2015.11.26/trades/. At - the end of the day, before being moved to the hdb, the data is - sorted according to parameters defined in sort.csv. For each table, - sort.csv will specify the columns to sort (using xasc) and apply - attributes to.

    -
  • -
  • -

    partbyattr - Data is persisted to a custom partition scheme, derived - from parameters in the sort.csv file. The write down scheme is taken - from sort.csv, to reflect the effect of using xasc at the end of - day. For each table, the columns defined in sort.csv, with the - parted attribute, are used to create custom partitions in the wdb. - Multiple columns can be defined with the parted attribute and - distinct combinations of each are generated for custom partitions. - The general partition scheme is of the form - [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a - typical partition directory would be similar to - wdb/database/2015.11.26/trade/MSFT_N. In the above example, the - data is parted by sym and source, and so a unique partition - directory MSFT_N is created in the wdb directory.

    -

    At the end of the day, data is upserted into the hdb without the - need for sorting. The number of rows that are joined at once is - limited by the mergenumrows and mergenumtab parameters.

    -
  • -
-

The optional partbyattr method may provide a significant saving in time -at the end of day, allowing the hdb to be accessed sooner. For large -data sets with a low cardinality (ie. small number of distinct elements) -the optional method may provide a significant time saving, upwards of -50%. The optional method should also reduce the memory usage at the end -of day event, as joining data is generally less memory intensive than -sorting.

-

-

Tickerplant Log Replay

-

The Tickerplant Log Replay script is for replaying tickerplant logs. -This is useful for:

-
    -
  1. -

    handling end of day save down failures;

    -
  2. -
  3. -

    handling large volumes of data (larger than can fit into RAM).

    -
  4. -
-

The process takes as the main input either an individual log file to -replay, or a directory containing a set of log files. Amongst other -functionality, the process can:

-
    -
  • -

    replay specific message ranges;

    -
  • -
  • -

    replay in manageable message chunks;

    -
  • -
  • -

    recover as many messages as possible from a log file rather than - just stopping at the first bad message;

    -
  • -
  • -

    ignore specific tables;

    -
  • -
  • -

    modify the tables before or after they are saved;

    -
  • -
  • -

    apply sorting and parting after all the data is written out.

    -
  • -
-

The process must have some variables set (the tickerplant log file or -directory, the schema file, and the on-disk database directory to write -to) or it will fail on startup. These can either be set in the config -file, or overridden from the command line in the usual way. An example -start line would be:

-
q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1
-
-

The tickerplant log replay script has extended usage information which -can be accessed with -.replay.usage.

-
q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage
-
-

-

Housekeeping

-

The housekeeping process is used to undertake periodic system -housekeeping and maintenance, such as compressing or removing files -which are no longer required. The process will run the housekeeping jobs -periodically on a timer. Amongst other functionality the process:

-
    -
  • -

    Allows for removing and zipping of directory files;

    -
  • -
  • -

    Provides an inbuilt search utility and selectively searches using a - ‘find’ and ‘exclude’ string, and an ‘older than’ parameter;

    -
  • -
  • -

    Reads all tasks from a single CSV;

    -
  • -
  • -

    Runs on a user defined timer;

    -
  • -
  • -

    Can be run immediately from command line or within the process;

    -
  • -
  • -

    Can be easily extended to include new user defined housekeeping - tasks.

    -
  • -
-

The process has two main parameters that should be set prior to use; -runtimes and inputcsv.‘Runtimes’ sets the timer to run housekeeping at -the set time(s), and ‘Inputcsv’ provides the location of the -housekeeping csv file. These can either be set in the config file, or -overridden via the command line. If these are not set, then default -parameters are used; 12.00 and ‘KDBCONFIG/housekeeping.csv’ -respectively. The process is designed to run from a single csv file with -five headings:

-
    -
  • -

    Function details the action that you wish to be carried out on the - files, initially, this can be rm (remove) and zip (zipping);

    -
  • -
  • -

    Path specifies the directory that the files are in;

    -
  • -
  • -

    Match provides the search string to the find function, files - returned will have names that match this string;

    -
  • -
  • -

    Exclude provides a second string to the find function, and these - files are excluded from the match list;

    -
  • -
  • -

    Age is the ‘older than’ parameter, and the function will only be - carried out on files older than the age given (in days).

    -
  • -
-

An example csv file would be:

-
function,path,match,exclude,age
-zip,./logs/,*.log,*tick*,2
-rm,./logs/,*.log*,*tick*,4
-zip,./logs/,*tick*,,1
-rm,./logs/,*tick*,,3
-
-function path      match    exclude  age
-----------------------------------------
-zip      "./logs/" "*.log"  "*tick*" 2
-rm       "./logs/" "*.log*" "*tick*" 4
-zip      "./logs/" "*tick*" ""       1
-rm       "./logs/" "*tick*" ""       3
-
-

The process reads in the csv file, and passes it line by line to a -‘find’ function; providing a dictionary of values that can be used to -locate the files required. The find function takes advantage of system -commands to search for the files according to the specifications in the -dictionary. A search is performed for both the match string and the -exclude string, and cross referenced to produce a list of files that -match the parameters given. The files are then each passed to a further -set of system commands to perform the task of either zipping or -removing. Note that an incomplete csv or non-existant path will throw an -error.

-

The remove and zipping functions form only basic implimentations of the -housekeeping process; it is designed to be exended to include more -actions than those provided. Any user function defined in the -housekeeping code can be employed in the same fashion by providing the -name of the function,search string and age of files to the csv.

-

As well as being scheduled on a timer, the process can also be run -immediately. Adding ‘-hk.runnow 1’ to the command line when starting the -process will force immediate running of the actions in the housekeeping -csv. Likewise, setting runnow to 1b in the config file will immediately -run the cleaning process. Both methods will cause the process to exit -upon completion. Calling hkrun[] from within the q process will also -run the csv instructions immediately. This will not affect any timer -scheduling and the process will remain open upon completion.

-

Housekeeping works both on windows and unix based systems. Since the -process utilizes inbuilt system commands to perform maintenances, a -unix/windows switch detects the operating system of the host and applies -either unix or widows functions appropriately. Extensions need only be -made in the namespace of the hosting operating system (i.e. if you are -using a unix system, and wish to add a new function, you do not need to -add the function to the windows namespace to). Usage information can be -accessed using the ‘-hkusage’ flag:

-
q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage
-
-

-

File Alerter

-

The file alerter process is a long-running process which periodically -scans a set of directories for user-specified files. If a matching file -is found it will then carry out a user-defined function on it. The files -to search for and the functions to run are read in from a csv file. -Additionally, the file alerter process can:

-
    -
  • -

    run more than one function on the specified file.

    -
  • -
  • -

    optionally move the file to a new directory after running the - function.

    -
  • -
  • -

    store a table of files that have already been processed.

    -
  • -
  • -

    run the function only on new files or run it every time the file is - modified.

    -
  • -
  • -

    ignore any matching files already on the system when the process - starts and only run a function if a new file is added or a file is - modified.

    -
  • -
-

The file alerter process has four parameters which should be set prior -to use. These parameters can either be set in the config file or -overridden on the command-line. If they are not set, the default -parameters will be used. The parameters are as follows.

-

inputcsv - The name and location of the csv file which defines the -behaviour of the process. The default is KDBCONFIG/filealerter.csv.

-

polltime - How often the process will scan for matching files. The -default is 0D:00:01, i.e., every minute.

-

alreadyprocessed - The name and location of the already-processed -table. The default is KDBCONFIG/filealerterprocessed. This table will -be created automatically the first time the process is ran.

-

skipallonstart - If this is set to 1, it will ignore all files -already on the system; if it is set to 0, it will not. The default -value is 0.

-

The files to find and the functions to run are read in from a csv file -created by the user. This file has five columns, which are detailed -below.

-

path - This is the path to the directory that will be scanned for -the file.

-

match - This is a search string matching the name of the file to be -found. Wildcards can be used in this search, for example, “file*” will -find all files starting with “fil”.

-

function - This is the name of the function to be run on the file. -This function must be defined in the script -KDBCODE/processes/filealerter.q. If the function is not defined or fails -to run, the process will throw an error and ignore that file from then -on.

-

newonly - This is a boolean value. If it is set to 1, it will -only run the function on the file if it has been newly created. If it is -set to 0, then it will run the function every time the file is -modified.

-

movetodirectory - This is the path of the directory you would like -to move the file to after it has been processed. If this value is left -blank, the file will not be moved.

-

It is possible to run two separate functions on the same file by adding -them as separate lines in the csv file. If the file is to be moved after -it is processed, the file alerter will run both functions on the file -and then attempt to move it. A typical csv file to configure the file -alerter would look like:

-
path,match,function,newonly,movetodirectory
-/path/to/dirA,fileA.*,copy,0,/path/to/newDir
-/path/to/dirB,fileB.txt,email,1,
-/path/to/dirA,fileA.*,delete,0,/path/to/newDir
-
-path        match      function  newonly    movetodirectory
----------------------------------------------------
-"/path/to/dirA" "fileA.*"   copy    0   "/path/to/newDir"
-"/path/to/dirB" "fileB.txt" email   1   ""
-"/path/to/dirA" "fileA.*"   delete  0   "/path/to/newDir"
-
-

The file alerter process reads in each line of the csv file and searches -files matching the search string specified in that line. Note that there -may be more than one file found if a wildcard is used in the search -string. If it finds any files, it will check that they are not in the -already processed table. If newonly is set to 1, it only checks if -the filename is already in the table. If newonly is set to 0, it -checks against the filename, filesize and a md5 hash of the file. The -md5 hash and the filesize are used to determine if the file has been -modified since it was processed last. If the found files have not been -processed already, it then attempts to run the specified function to -these files.

-

After the process has run through each line of the csv, it generates a -table of all files that were processed on that run. These files are -appended to the already processed table which is then saved to disk. The -file alerter will attempt to move the files to the ‘movetodirectory’, if -specified. If the file has already been moved during the process (for -example, if the function to run on it was ‘delete’), the file alerter -will not attempt to move it.

-

The file alerter is designed to be extended by the user. Customised -functions should be defined within the filealerter.q script. They should -be diadic functions, i.e., they take two parameters: the path and the -filename. As an example, a simple function to make a copy of a file in -another directory could be:

-
copy:{[path;file] system "cp ", path,"/", file, " /path/to/newDir"}
-
-

Although the process is designed to run at regular intervals throughout -the day, it can be called manually by invoking the FArun[] command -from within the q session. Similarly, if new lines are added to the csv -file, then it can be re-loaded by calling the loadcsv[] command -from the q session.

-

Each stage of the process, along with any errors which may occur, are -appropriately logged in the usual manner.

-

The file alerter process is designed to work on both Windows and Unix -based systems. Since many of the functions defined will use inbuilt -system command they will be need to written to suit the operating system -in use. It should also be noted that Windows does not have an inbuilt -md5 hashing function so the file alerter will only detect different -versions of files if the filename or filesize changes.

-

-

Reporter

-

Overview

-

The reporter process is used to run periodic reports on specific -processes. A report is the result of a query that is run on a process at -a specific time. The result of the query is then handled by one of the -inbuilt result handlers, with the ability to add custom result handlers.

-

Reporter process

-

Features:

-
    -
  • -

    Easily create a report for information that you want;

    -
  • -
  • -

    Fully customizable scheduling such as start time, end time and days - of the week;

    -
  • -
  • -

    Run reports repeatedly with a custom period between them;

    -
  • -
  • -

    Asynchronous querying with custom timeout intervals;

    -
  • -
  • -

    Inbuilt result handlers allow reports to be written to file or - published;

    -
  • -
  • -

    Custom result handlers can be defined;

    -
  • -
  • -

    Logs each step of the report process;

    -
  • -
  • -

    Fully integrated with the TorQ gateway to allow reports to be run - across backend processes.

    -
  • -
-

The reporter process has three parameters that are read in on -initialisation from the reporter.q file found in the -$KDBCONFIG/settings directory. These settings are the string filepath -of the input csv file, a boolean to output log messages and timestamp -for flushing the query log table.

-

To run the reporter process:

-
q torq.q -load code/processes/reporter.q -p 20004
-
-

Once the reporter process has been initiated, the reports will be -scheduled and no further input is required from the user.

-

Report Configuration

-

By default, the process takes its inputs from a file called reporter.csv -which is found in the $KDBCONFIG directory. This allows the user -complete control over the configuration of the reports. As the queries -are evaluated on the target process, local variables can be referenced -or foreign functions can be run. Table [table:reportertable] shows the -meaning of the csv schema.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Column HeaderDescription and Example
nameReport name e.g. Usage
queryQuery to be evaluated on that process. It can be a string query or function
resulthandlerResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[“./output”;“usage”]
gatewayIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway
joinfunctionUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze
proctypeThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb
procnameThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1
startTime on that day to start at e.g. 12:00
endTime on that day that the report will stop at e.g. 23:00
periodThe period between each report query e.g. 00:00:10
timeoutintervalThe amount of time the reporter waits before timing out a report e.g. 00:00:30
daysofweekNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday
-

When running a report on a gateway, the gateway field must be set to the -proctype of the gateway that will be queried. It will then run the -report on the processes which are listed in the proctype field and join -the results by using the function specified in the joinfunction field. -If there is no join function then the reporter process will not start. -Multiple entries in the proctype field must be separated by a space and -are only allowed when the gateway field is not empty. If gateway field -is empty and there are multiple entries in the proctype field then the -reporter process will not load.

-

Listing [code:csvschema] shows an example of the schema needed in the -input csv file.

-
name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
-usage|10#.usage.usage|writetofiletype["./output/";"usage";"csv"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6
-memory|.Q.w[]|writetofile["./output/";"memory.csv"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6
-usage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6
-
-

Result Handlers

-

There are several default result handlers which are listed below. Custom -result handlers can be defined as required. The result handler will be -invoked with a single parameter (the result of the query).

-

writetofiletype - Accepts 3 parameters: path, filename, filetype and -data. When writing to file it uses a date time suffix so the resultant -filename will be usage_rdb_2014_01_02_15_00_12.txt e.g.

-
writetofiletype["./output/";"usage";"csv"]
-
-

splaytable - This accepts 3 parameters: path, file and data. This -splays the result to a directory. The result must be a table in order to -use this function e.g.

-
splaytable["./output/";"usage"]
-
-

emailalert - This accepts 3 parameters: period, recipient list and -data. The period dictates the throttle i.e. emails will be sent at most -every period. The result of the report must be a table with a single -column called messages which contains the character list of the email -message. This is used with the monitoring checks to raise alerts, but -can be used with other functions.

-
emailalert[0D00:30;("test@aquaq.co.uk";"test1@aquaq.co.uk")]
-
-

emailreport - This accepts 3 parameters: temporary path, recipient -list, file name, file type and data. The data is written out as the file -type (e.g. csv, xml, txt, xls, json) with the given file name to the -temporary path. It is then emailed to the recipient list, and the -temporary file removed.

-
emailreport["./tempdir/"; ("test@aquaq.co.uk";"test1@aquaq.co.uk"); "EndOfDayReport"; "csv"]
-
-

publishresult - Accepts 1 parameter and that is the data. This is -discussed later in the subsection subresults. -Custom result handlers can be added to $KDBCODE/processes/reporter.q . -It is important to note that the result handler is referencing local -functions as it is executed in the reporter process and not the target -process. When the query has been successful the result handler will be -passed a dictionary with the following keys: queryid, time, name, -procname, proctype and result.

-

Report Process Tracking

-

Each step of the query is logged by the reporter process. Each query is -given a unique id and regular system messages are given the id 0. The -stage column specifies what stage the query is in and these are shown in -table [table:stagetable]. An appropriate log message is also shown so -any problems can easily be diagnosed. The in memory table is flushed -every interval depending on the value of the flushqueryloginterval -variable in the reporter.q file found in the $KDBCONFIG/settings -directory.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Stage symbolExplanation
RThe query is currently running
EAn error has occurred during the query
CThe query has been completed with no errors
TThe query has exceeded the timeout interval
SSystem message e.g. “Reporter Process Initialised”
-
time                         | queryid stage message
------------------------------| ------------------------------------------------------------------------
-2014.10.20D22:20:06.597035000| 37 R "Received result"
-2014.10.20D22:20:06.600692000| 37 R "Running resulthandler"
-2014.10.20D22:20:06.604455000| 37 C "Finished report"
-2014.10.20D22:30:00.984572000| 38 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
-2014.10.20D22:30:00.991862000| 38 R "Received result"
-2014.10.20D22:30:00.995527000| 38 R "Running resulthandler"
-2014.10.20D22:30:00.999236000| 38 C "Finished report"
-2014.10.20D22:30:06.784419000| 39 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
-2014.10.20D22:30:06.796431000| 39 R "Received result"
-
-

Subscribing for Results

-

To publish the results of the report, the reporter process uses the pub -sub functionality of TorQ. This is done by using the using the inbuilt -result handler called publishresult. In order to subscribe to this feed, -connect to the reporter process and send the function shown below over -the handle. To subscribe to all reports use a backtick as the second -parameter and to subscribe to a specific reports results include the -reporter name as a symbol.

-
/- define a upd function
-upd:insert
-
-/- handle to reporter process
-h: hopen 20004
-
-/- Subscribe to all results that use the publishresult handler
-h(`.ps.subscribe;`reporterprocessresults;`)
-
-/- Subscribe to a specific report called testreport
-h(`.ps.subscribe;`reporterprocessresults;`testreport)
-
-

Example reports

-

The following are examples of reports that could be used in the reporter -process. The rdbtablecount report will run hourly and return the count -of all the tables in a rdb process. The memoryusage report will run -every 10 minutes against the gateway for multiple processes and will -return the .Q.w[] information. Both of these reports run between -9:30am to 4:00pm during the weekdays. The report onetimequery is an -example of a query that is run one time, in order to run a query once, -the period must be the same as the difference between the start and end -time.

-
name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
-rdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6
-memoryusage|.Q.w[]|writetofile["./output/";"memory.csv"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6
-onetimequery|10#.usage.usage|writetofile["./output/";"onetime.csv"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6
-
-

-

Monitor

-

The Monitor process is a simple process to monitor the health of the -other processes in the system. It connects to each process that it finds -(by default using the discovery service, though can use the static file -as well) and subscribes to both heartbeats and log messages. It -maintains a keyed table of heartbeats, and a table of all log messages -received.

-

Run it with:

-
aquaq $ q torq.q -load code/processes/monitor.q -p 20001
-
-

It is probably advisable to run the monitor process with the -trap flag, -as there may be some start up errors if the processes it is connecting -to do not have the necessary heartbeating or publish/subscribe code -loaded.

-
aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap
-
-

The current heartbeat statuses are tracked in .hb.hb, and the log -messages in logmsg

-
q)show .hb.hb                                                                                                                                                                                                                                                                 
-sym       procname    | time                          counter warning error
-----------------------| ---------------------------------------------------
-discovery discovery2  | 2014.01.07D13:24:31.848257000 893     0       0    
-hdb       hdb1        | 2014.01.07D13:24:31.866459000 955     0       0    
-rdb       rdb_europe_1| 2014.01.07D13:23:31.507203000 901     1       0    
-rdb       rdb1        | 2014.01.07D13:24:31.848259000 34      0       0
-
-q)show select from logmsg where loglevel=`ERR                                                                                                              
-time                          sym  host  loglevel id      message                               
--------------------------------------------------------------------------------------
-2014.01.07D12:25:17.457535000 hdb1 aquaq ERR      reload  "failed to reload database"           
-2014.01.07D13:29:28.784333000 rdb1 aquaq ERR      eodsave "failed to save tables : trade, quote"
-
-

HTML5 front end

-

A HTML5 front end has been built to display important process -information that is sent from the monitor process. It uses HTML5, -WebSockets and JavaScript on the front end and interacts with the -monitor process in the kdb+ side. The features of the front end include:

-
    -
  • -

    Heartbeat table with processes that have warnings highlighted in - orange and errors in red

    -
  • -
  • -

    Log message table displaying the last 30 errors

    -
  • -
  • -

    Log message error chart that is by default displayed in 5 minute - bins

    -
  • -
  • -

    Chart’s bin value can be changed on the fly

    -
  • -
  • -

    Responsive design so works on all main devices i.e. phones, tablets - and desktop

    -
  • -
-

It is accessible by going to the url http://HOST:PORT/.non?monitorui

-

-

Compression

-

The compression process is a thin wrapper around the compression utility -library. It allows periodic compression of whole or parts of databases -(e.g. data is written out uncompressed and then compressed after a -certain period of time). It uses four variables defined in -KDBCONFIG/settings/compression.q which specify

-
    -
  • -

    the compression configuration file to use

    -
  • -
  • -

    the database directory to compress

    -
  • -
  • -

    the maximum age of data to attempt to compress

    -
  • -
  • -

    whether the process should exit upon completion

    -
  • -
-

The process is run like other TorQ processes:

-
q torq.q -load code/processes/compression.q -p 20005
-
-

Modify the settings file or override variables from the command line as -appropriate.

-

-

Kill

-

The kill process is used to connect to and terminate currently running -processes. It kills the process by sending the exit command therefore -the kill process must have appropriate permissions to send the command, -and it must be able to create a connection (i.e. it will not be able to -kill a blocked process in the same way that the unix command kill -9 -would). By default, the kill process will connect to the discovery -service(s), and kill the processes of the specified types. The kill -process can be modified to not use the discovery service and instead use -the process.csv file via the configuration in the standard way.

-

If run without any command line parameters, kill.q will try to kill each -process it finds with type defined by its .servers.CONNECTIONS variable.

-
q torq.q -load code/processes/kill.q -p 20000
-
-

.servers.CONNECTIONS can optionally be overridden from the command line -(as can any other process variable):

-
q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant
-
-

The kill process can also be used to kill only specific named processes -within the process types:

-
q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2
-
-

-

Chained Tickerplant

-

In tick+ architecture the main tickerplant is the most important -component, as it is relied upon by all the real time subscribers. When -the tickerplant goes down data will be lost, compare this to an rdb -which can be recovered after it fails. The chained tickerplant process -is an additional tickerplant that is a real time subscriber to the main -tickerplant but replicates its behaviour. It will have its own real time -subscribers and can be recovered when it fails. This is the recommended -approach when users want to perform their own custom real time analysis.

-

The chained tickerplant can:

-
    -
  • -

    subscribe to specific tables and syms

    -
  • -
  • -

    batch publish at an interval or publish tick by tick

    -
  • -
  • -

    create a tickerplant log that its real time subscribers can replay

    -
  • -
  • -

    replay the source tickerplant log

    -
  • -
-

To launch the chained tickerplant

-
q torq.q -load code/processes/chainedtp.q -p 12009
-
-

Chained tickerplant settings are found in config/settings/chainedtp.q -and are under the .ctp namespace.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SettingExplanationDefault
tickerplantnamelist of tickerplant names to try and make a connection to`tickerplant1
pubintervalpublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick0D00:00:00
tpconnsleepnumber of seconds between attempts to connect to the source tickerplant10
createlogfilecreate a log file0b
logdirdirectory containing chained tickerplant logs`:hdb
subscribetosubscribe to these tables only (null for all)`
subscribesymssubscribe to these syms only (null for all)`
replayreplay the tickerplant log file0b
schemaretrieve schema from tickerplant1b
clearlogonsubscriptionclear log on subscription, only called if createlogfile is also enabled0b
-

-

Integration with kdb+tick

-

AquaQ TorQ can be fully integrated with kdb+tick. For further details, -use one of the AquaQ TorQ Starter packs to set up a production kdb+ data -capture system.

- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/site/assets/fonts/icon.eot b/site/assets/fonts/icon.eot deleted file mode 100755 index 8f81638c2de436e1b5cc77b6a2693b2b347a0151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2224 zcmaJDYiN^K^qhP1ZcHEMVbZM4%Vs7uwoQ|)E~(XOx7OBXnq))T&RAn>*Cw^Cqp}}H zWH6912NR|+2m5JcjIkeMjv=!Q9249yfx%!u#)^-T>W{&MHQBjeBBo>Pe4KmF^E>CB z@7#O8&r|?g2oV@;1cVDHB*W2-a$#G6b3^#>-#P#loPbHlK$=uKI0z}2f>SUHNmw9> z5fUU>fJL$rHa6%4A9RqW){j^bqzea^bdbuq5*;Zk-LE^Cdn?+_Wk$3IeMJy!S`Wh)UMyN+J zdS?0mGDhF6kI!%~<+qJq>2&vEpxeis4jnV-TbREq7%~}5A-CPp7U&N8yNm|C!pSZ= z>RMgx`%^o6Qv2I!?&%)eT36VWFT?1`lcUl3`6$Mm(PLi)Z77M4~2lu_KixyTMMWFbEgdpD<-HjI^xqTD%xRVN3f% z27EufM7BCq_F{-eA6ANNH2Jt&hXy?n=(b9Pj&yDA7Bp1}?(gblf$p{dxyryAvDrJc zt^F=*bbI@7kDasKZ>5j8H`V(+mJUPmWnFWsN4v+*4sUM2nLSNzr@QTW$GB0}ROgND*=9A% zw1)nnmfd#y?v|l`gH~p?ZtFkf)fup1^YGd6?&$gJGyIAekox zZ*nZ1`&86Qhw@P=Z(>&x;ARp0>8hS~9}KyeD>li(=rCx4^e?QEnx+3`oEyA6+GNZnmZ#7YHL z5IITs5QomaULXEb^rwKI?mhVE*tF(gTJylu*7C253QKlw|iZm6P z(d9W@r8&tvtF(;hi7G9p>(o@G6(o;TX$^Ek_QYf+{q!nMq!t!WWYV@yU&nvnzqQ7- z^ug5BsoCVh#%sLRU?7uTvQ4GZsfFZH>X_~5Y1`mrW+anI`(Qx2;FrKgKL9DZ>czF6 gge97fk?bg(rg2dERTv>l@iX9~idJf0Tk{R{Kaui$V*mgE diff --git a/site/assets/fonts/icon.svg b/site/assets/fonts/icon.svg deleted file mode 100755 index 86250e7b4..000000000 --- a/site/assets/fonts/icon.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/site/assets/fonts/icon.ttf b/site/assets/fonts/icon.ttf deleted file mode 100755 index b5ab5601bed7765790037c721c2ee1c7d444a7a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2072 zcmaJ>ZD^ZS6h7zPd^bx!mX9TkZNApHq|4go%g&_h)~(vEUF()a8EswGW$kL4bZsXc z{#b?xf`|$Z+`tL`T!ufyAL2xYE5gLVlqDbt{t(MPB;9@p4s7DNZ{D%&kLTsw`<$

vJhI<5Xe z^&QFMB)b;UtBYWSqa?48?8v4UGUKsFzmfbg(%Sf&xy$DPi zbfnwchv86wxm^ZkGPbc`Pb6wFS)yL2t0NqW1bfUTqsq-LxEk6$od+|!dou?+Y3~h9 zY;P#-DOO?Z^y#tj#l>+<>OGUe-8Hl1=4scviv7i!dF-^PzW_;|q^3}((HZq>k@AFj za`SOHRw-aIR%U7}ZV;|qiIO54r&n>b%tw?$r;Xb*d)E+ zLNcE$rBZdZYot1yCMT7`AXeUd%+%!=(zRk6$#NWpFMS^h;0NI)@-?8k52LgOu-0U= zCBVG~G#Lq?*De7A**d&!XpsRA_VlrEs3T0F3b4l=&MtlXfX6<*vvZ`^$=Tkwvd6qz z8iPJtmnr?Sp|w$G)EeJ75P4^Ki&gI)c_r2P(eIxe!uGI<-PJcMj4@A(P2KKs_Ky0u zY-`}I-b1@A;pd_gcHE*z#F6Dju3&7>Vf1w|G`p?(`K!fQwLxu;wu}Bk^=rD%Wq6eY zc~C6oNH~UGRY!LKyE`J?ZP;y&M5){Wr@4s+Fxq9d^dSupt=(pox{WSsVA7_dyGQ%T zkLHfS+_m?{LzCx6wl?A1z80_B+wr_>(yVA{@F(`|uv-;+)4*`sUZ-@(rOxUz_){IXb+m(ESuc#BROaaae4B#(WznI{#M;k znD=Nk8f^~`59wO>`-Z2YR;7NICpfCtZB^K&&Rt51V#M4rnyDoB(|4iA;f>}+;x z5otP{++V0d0sZLTyuwn%euOGiis-N8X;i3RN$~RmPl`F;uH@0}4XCtm2B;alSGl#i zTDf&^@W;=v^QH}3D}UNqE(z!PfayTO(nue&J!2t7nh~I_*9l`!Y*`4VjnRT zN2H^_cpFT>oA54t4&T6Sd;!12+jyTTn2qcrYZJUi-4XPpI!TZh1AHOZh9ZTG8Fll3 zj5+Cd%2+}8sEn2L{p)3{B7Lunbzp;&lo1tL(rCz1!wd{CB4bYaZW${GPsvybX0XUu zMf$jmbr6F5sp(u6PQf(fAe+i8EuYF|9o>O0NI?dcV3|y000$i$fUbJydVDxDb7nrh z1cxbT2F}1dq+zMvVKA3nam-}0nWgkf=7i(;S;x?HZZwz624GN1utF(jC^{>pO~VT9 cCrEc3&eA$0)i+9>qL=`6wATCjoC1DrZ;vj6}9 diff --git a/site/assets/fonts/icon.woff b/site/assets/fonts/icon.woff deleted file mode 100755 index ed0f20d5b80ab98072f3557225b3333e01b78670..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148 zcmaJ?U2M};6hG(Qeym;Bb)z4&t6RTVr5$BkzZkY-Fqm#^Y(iTNVUx0zjk&dB8w&A( z8e?KYjQT(#L^1J^5+8grk{BY32}Tk$w26s{CdP%2q=N?^NL=f=|NfEk;{E5G`#WF% zbMEQ+-@ZLQGz18=8fKtT+PBtZfuCRFM|SoCU;}B73uHeVHCj?Ez9{;wK zTUn*D_W$R{332`_ehf+gc8O7y@KJ5YhY&;!$@L2j^^(8?0P8LMM)d{^a3azm(bMIS zfRu%hoooWzi3=|~D5MA-b&3&2aI9i2uExtracIOW6c|0?H$$~W zZ9y!=*Vf_)tPsDs7NdhB6d}+3tSBZMy=t#;i_#gmKVB}!H#Q{BF2%~_Sb0P64eD(k z3OrBm<)9XEQD?aJn4IA}hfUH8DkSsCQYuwfJIy)O;WRm^6b7;K<`bqa$B>Q{+ent< zD0~4L6~GU|%jBy^bw5Ul2e8&;vn9a2dNdgcpw}(|J=r?F?P!q!5BB!6aHum(p$f3a z9nNlD$DqePv7>9W&&k=|ce2O5P0c}{t=p7-Mc>w}HEN7+9*Dd@(qz@SM_)~Kee(OK zhp;1TV)t|{3S-REYEyT3oPA^drmcrvRh&Z~^%oU97IgGw;hGw@_ zw{WdEr`D^@(GJmHsD4A|xdN||AP+eZdXI)&A~eej51Z$iVC(RU|96Bn+}^DBZUFQ1>X@m8%S;;ip%T zC`Qa3qnS!_KYb@^(9x;gEzTCV29c)2$^C^Y6wr_U&8sX$|R8 z@T8dYZAu>9)`&_AXLP3y-LKp}d$w}>{?LzKVAm}hwpISJ-KyNBN%K)miDJY&YUw3m zx5+}J)FAUE5{XIzOY|hKUAvk}<+<;l66GmTOp2rQJq25wUUv)C$xc41+%-H(AWe5A zm8g_hNz^3KLmYYUjpo?jVm`(C<=%tOpY8ImEbel;MWjV>(tSr4mRQ8ao9dULW~r$} z7|D5}0$p)g+KbO*$tLVVmn8BLQE{}iV1#!1Z+QzofG^=&xP!a!YrKOGn1b2JF0vZn zb?S~-Ppgvznd#vxxi%CjWX!0W2V~4izeC0f!bfGSr0-uRV-@N9WUK`noTQAX(2%Bq zEH%tP52G^Xr0R1(LwEqj{ug`Uae@E< diff --git a/site/assets/images/favicon-e565ddfa3b.ico b/site/assets/images/favicon-e565ddfa3b.ico deleted file mode 100644 index e85006a3ce1c6fd81faa6d5a13095519c4a6fc96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` diff --git a/site/assets/images/favicon.ico b/site/assets/images/favicon.ico deleted file mode 100644 index e85006a3ce1c6fd81faa6d5a13095519c4a6fc96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` diff --git a/site/assets/javascripts/application-997097ee0c.js b/site/assets/javascripts/application-997097ee0c.js deleted file mode 100644 index 1199f2e1d..000000000 --- a/site/assets/javascripts/application-997097ee0c.js +++ /dev/null @@ -1 +0,0 @@ -function pegasus(t,e){return e=new XMLHttpRequest,e.open("GET",t),t=[],e.onreadystatechange=e.then=function(n,o,i,r){if(n&&n.call&&(t=[,n,o]),4==e.readyState&&(i=t[0|e.status/200])){try{r=JSON.parse(e.responseText)}catch(s){r=null}i(r,e)}},e.send(),e}if("document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;o>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/application.js b/site/assets/javascripts/application.js deleted file mode 100644 index 1199f2e1d..000000000 --- a/site/assets/javascripts/application.js +++ /dev/null @@ -1 +0,0 @@ -function pegasus(t,e){return e=new XMLHttpRequest,e.open("GET",t),t=[],e.onreadystatechange=e.then=function(n,o,i,r){if(n&&n.call&&(t=[,n,o]),4==e.readyState&&(i=t[0|e.status/200])){try{r=JSON.parse(e.responseText)}catch(s){r=null}i(r,e)}},e.send(),e}if("document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;o>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/modernizr-4ab42b99fd.js b/site/assets/javascripts/modernizr-4ab42b99fd.js deleted file mode 100644 index e82c90988..000000000 --- a/site/assets/javascripts/modernizr-4ab42b99fd.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t,n){function r(e,t){return typeof e===t}function i(){var e,t,n,i,o,a,s;for(var l in x)if(x.hasOwnProperty(l)){if(e=[],t=x[l],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;tf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;tli:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/application.css b/site/assets/stylesheets/application.css deleted file mode 100644 index 965bbb3c8..000000000 --- a/site/assets/stylesheets/application.css +++ /dev/null @@ -1 +0,0 @@ -html{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}*,:after,:before{box-sizing:inherit;-moz-box-sizing:inherit;-webkit-box-sizing:inherit}html{font-size:62.5%;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0}main{display:block}ul{list-style:none}table{border-collapse:collapse;border-spacing:0}td{text-align:left;font-weight:400;vertical-align:middle}button{outline:0;padding:0;background:transparent;border:none;font-size:inherit}input{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;outline:none;border:none}a{text-decoration:none;color:inherit}a,button,input,label{-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-tap-highlight-color:transparent}h1,h2,h3,h4,h5,h6{font-weight:inherit}pre{background:rgba(0,0,0,.05)}pre,pre code{color:rgba(0,0,0,.87)}.c,.c1,.cm,.o{color:rgba(0,0,0,.54)}.k,.kn{color:#a71d5d}.kd,.kt{color:#0086b3}.n.f,.nf{color:#795da3}.nx{color:#0086b3}.s,.s1{color:#183691}.bp,.mi{color:#9575cd}.icon{font-family:Icon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-search:before{content:"\e600"}.icon-back:before{content:"\e601"}.icon-link:before{content:"\e602"}.icon-close:before{content:"\e603"}.icon-menu:before{content:"\e604"}.icon-forward:before{content:"\e605"}.icon-twitter:before{content:"\e606"}.icon-github:before{content:"\e607"}.icon-download:before{content:"\e608"}.icon-star:before{content:"\e609"}.icon-warning:before{content:"\e610"}.icon-note:before{content:"\e611"}a{-webkit-transition:color .25s;transition:color .25s}.overlay{-webkit-transition:opacity .25s,width 0s .25s,height 0s .25s;transition:opacity .25s,width 0s .25s,height 0s .25s}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{-webkit-transition:opacity .25s,width 0s,height 0s;transition:opacity .25s,width 0s,height 0s}.js .header{-webkit-transition:background .6s,color .6s;transition:background .6s,color .6s}.js .header:before{-webkit-transition:background .6s;transition:background .6s}.button .icon{-webkit-transition:background .25s;transition:background .25s}body{color:rgba(0,0,0,.87)}@supports (-webkit-appearance:none){body{background:#e84e40}}.ios body{background:#fff}hr{border:0;border-top:1px solid rgba(0,0,0,.12)}.toggle-button{cursor:pointer;color:inherit}.backdrop,.backdrop-paper:after{background:#fff}.overlay{background:rgba(0,0,0,.54);opacity:0}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{opacity:1}.header{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.ios.standalone .header:before{background:rgba(0,0,0,.12)}.bar .path{color:hsla(0,0%,100%,.7)}.button .icon{border-radius:100%}.button .icon:active{background:hsla(0,0%,100%,.12)}html{height:100%}body{position:relative;min-height:100%}hr{display:block;height:1px;padding:0;margin:0}.locked{height:100%;overflow:hidden}.scrollable{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.scrollable .wrapper{height:100%}.ios .scrollable .wrapper{margin-bottom:2px}.toggle{display:none}.toggle-button{display:block}.backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.backdrop-paper{max-width:1200px;height:100%;margin-left:auto;margin-right:auto}.backdrop-paper:after{content:" ";display:block;height:100%;margin-left:262px}.overlay{width:0;height:0;z-index:3}.header,.overlay{position:fixed;top:0}.header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;left:0;z-index:2;height:56px;padding:4px;overflow:hidden}.ios.standalone .header{position:absolute}.bar{display:table;max-width:1184px;margin-left:auto;margin-right:auto}.bar a{display:block}.no-js .bar .button-search{display:none}.bar .path .icon:before{vertical-align:-1.5px}.button{display:table-cell;vertical-align:top;width:1%}.button button{margin:0;padding:0}.button button:active:before{position:relative;top:0;left:0}.button .icon{display:inline-block;font-size:24px;padding:8px;margin:4px}.stretch{display:table;table-layout:fixed;width:100%}.header .stretch{padding:0 20px}.stretch .title{display:table-cell;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.header .stretch .title{font-size:18px;padding:13px 0}.main{max-width:1200px;margin-left:auto;margin-right:auto}body,input{font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.no-fontface body,.no-fontface input,body,input{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.no-fontface code,.no-fontface kbd,.no-fontface pre,code,kbd,pre{font-family:Courier New,Courier,monospace}#toggle-drawer:checked~.main .drawer,.toggle-drawer .drawer{-webkit-transform:translateZ(0);transform:translateZ(0)}.no-csstransforms3d #toggle-drawer:checked~.main .drawer,.no-csstransforms3d .toggle-drawer .drawer{display:block}.project{-webkit-transition:none;transition:none}.project .logo img{-webkit-transition:box-shadow .4s;transition:box-shadow .4s}.repo a{-webkit-transition:box-shadow .4s,opacity .4s;transition:box-shadow .4s,opacity .4s}.drawer .toc a.current,.drawer .toc a:focus,.drawer .toc a:hover{color:#e84e40}.drawer .anchor a{border-left:2px solid #e84e40}.drawer .section{color:rgba(0,0,0,.54)}.ios.standalone .project:before{background:rgba(0,0,0,.12)}.project .logo img{background:#fff;border-radius:100%}.project:focus .logo img,.project:hover .logo img{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05)}.repo a{background:#00bfa5;color:#fff;border-radius:3px}.repo a:focus,.repo a:hover{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);opacity:.8}.repo a .count{background:rgba(0,0,0,.26);color:#fff;border-radius:0 3px 3px 0}.repo a .count:before{border-width:15px 5px 15px 0;border-color:transparent rgba(0,0,0,.26);border-style:solid}.drawer{width:262px;font-size:13px;line-height:1em}.ios .drawer{overflow:scroll;-webkit-overflow-scrolling:touch}.drawer .toc li a{display:block;padding:14.5px 24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .toc li.anchor a{margin-left:12px;padding:10px 24px 10px 12px}.drawer .toc li ul{margin-left:12px}.drawer .current+ul{margin-bottom:9px}.drawer .section{display:block;padding:14.5px 24px}.drawer .scrollable{top:104px;z-index:-1}.drawer .scrollable .wrapper{height:auto;min-height:100%}.drawer .scrollable .wrapper hr{margin:12px 0;margin-right:auto}.drawer .scrollable .wrapper .toc{margin:12px 0}.project{display:block}.project .banner{display:table;width:100%;height:104px;padding:20px}.project .logo{display:table-cell;width:64px;padding-right:12px}.project .logo img{display:block;width:64px;height:64px}.project .name{display:table-cell;padding-left:4px;font-size:14px;line-height:1.25em;vertical-align:middle}.project .logo+.name{font-size:12px}.repo{margin:24px 0;text-align:center}.repo li{display:inline-block;padding-right:12px;white-space:nowrap}.repo li:last-child{padding-right:0}.repo a{display:inline-block;padding:0 10px 0 6px;font-size:12px;line-height:30px;height:30px}.repo a .icon{font-size:18px;vertical-align:-3px}.repo a .count{display:inline-block;position:relative;padding:0 8px 0 4px;margin:0 -10px 0 8px;font-size:12px}.repo a .count:before{content:" ";display:block;position:absolute;top:0;left:-5px}.no-js .repo a .count{display:none}.drawer .toc li a{font-weight:700}.drawer .toc li.anchor a{font-weight:400}.drawer .section,.repo a{font-weight:700}.repo a{text-transform:uppercase}.repo a .count{text-transform:none;font-weight:700}pre span{-webkit-transition:color .25s;transition:color .25s}.copyright a{-webkit-transition:color .25s;transition:color .25s}.ios.standalone .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.ios.standalone .article .wrapper{background:-webkit-linear-gradient(top,#fff 50%,#fff 0);background:linear-gradient(180deg,#fff 50%,#fff 0)}.article a,.article h1,.article h2{color:#e84e40}.article code{background:#eee}.article kbd{color:#555;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.article h1{border-bottom:1px solid rgba(0,0,0,.12)}.article a{border-bottom:1px dotted}.article a:focus,.article a:hover{color:#00bfa5}.article .headerlink{color:rgba(0,0,0,.26);border:none}.article table{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);border-radius:3px}.article table th{background:#ee7a70;color:#fff}.article table td{border-top:1px solid rgba(0,0,0,.05)}.article blockquote{border-left:2px solid rgba(0,0,0,.54);color:rgba(0,0,0,.54)}.footer{background:#e84e40;color:#fff}.footer a{border:none}.copyright{color:rgba(0,0,0,.54)}.pagination a .button,.pagination a .title{color:#fff}.pagination .direction{color:hsla(0,0%,100%,.7)}.admonition{background:#29b6f6;color:#fff}.admonition pre{background:hsla(0,0%,100%,.3)}.admonition.warning{background:#e84e40}.admonition a,.admonition a:hover{color:#fff}.article{font-size:14px;line-height:1.7em}.article:after{content:" ";display:block;clear:both}.article .wrapper{padding:116px 16px 92px}.ios.standalone .article{position:absolute;top:56px;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.ios.standalone .article .wrapper{position:relative;min-height:100%;padding-top:60px;margin-bottom:2px}.article h1{font-size:24px;line-height:1.333334em;padding:20px 0 42px}.article h2{font-size:20px;line-height:1.4em;padding-top:92px;margin-top:-56px}.ios.standalone .article h2{padding-top:36px;margin:0}.article h3,.article h4{font-size:14px;padding-top:76px;margin-top:-56px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article .headerlink{float:right;margin-left:20px;font-size:14px}h1 .article .headerlink{display:none}.article ol,.article p,.article ul{margin-top:1.5em}.article li,.article li ol,.article li ul{margin-top:.75em}.article li{margin-left:18px}.article li p{display:inline}.article ul>li:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes-05ab2406df.css b/site/assets/stylesheets/palettes-05ab2406df.css deleted file mode 100644 index ead0d849b..000000000 --- a/site/assets/stylesheets/palettes-05ab2406df.css +++ /dev/null @@ -1 +0,0 @@ -@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes.css b/site/assets/stylesheets/palettes.css deleted file mode 100644 index ead0d849b..000000000 --- a/site/assets/stylesheets/palettes.css +++ /dev/null @@ -1 +0,0 @@ -@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/conn/index.html b/site/conn/index.html deleted file mode 100644 index 5709ede76..000000000 --- a/site/conn/index.html +++ /dev/null @@ -1,612 +0,0 @@ - - - - - - - - - - - - Connection Management - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
-
- - - -
- -
-
- - -
-
- -

Connection Management

-

trackservers.q is used to register and maintain handles to external -servers. It is a heavily modified version of trackservers.q from -code.kx. All the options are described in the default config file. All -connections are tracked in the .servers.SERVERS table. When the handle -is used the count and last query time are updated.

-
q).servers.SERVERS 
-procname     proctype  hpup                            w  hits startp                        lastp                         endp                          attributes                   
----------------------------------------------------------------------------------
-discovery1   discovery :aquaq:9996    0                                  2014.01.08D11:13:10.583056000                               ()!()                        
-discovery2   discovery :aquaq:9995 6  0    2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000                               ()!()                        
-rdb_europe_1 rdb       :aquaq:9998 12 0    2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk
-rdb1         rdb       :aquaq:5011 7  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
-rdb_europe_1 hdb       :aquaq:9997    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
-hdb1         hdb       :aquaq:9999    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
-hdb2         hdb       :aquaq:5013 8  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
-hdb1         hdb       :aquaq:5012 9  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
-
-q)last .servers.SERVERS 
-procname  | `hdb2
-proctype  | `hdb
-hpup      | `:aquaq:5013
-w         | 8i
-hits      | 0i
-startp    | 2014.01.08D11:51:01.928045000
-lastp     | 2014.01.08D11:51:01.925078000
-endp      | 0Np
-attributes| `datacentre`country!`essex`uk
-
-

Connections

-

Processes locate other processes based on their process type. The -location is done either statically using the process.csv file or -dynamically using a discovery service. It is recommended to use the -discovery service as it allows the process to be notified as new -processes become available.

-

The main configuration variable is .servers.CONNECTIONS, which dictates -which process type(s) to create connections to. .servers.startup[] -must be called to initialise the connections. When connections are -closed, the connection table is automatically updated. The process can -be set to periodically retry connections.

-

Process Attributes

-

Each process can report a set of attributes. When process A connects to -process B, process A will try to retrieve the attributes of process B. -The attributes are defined by the result of the .proc.getattributes -function, which is by default an empty dictionary. Attributes are used -to retrieve more detail about the capabilities of each process, rather -than relying on the broad brush process type and process name -categorization. Attributes can be used for intelligent query routing. -Potential fields for attributes include:

-
    -
  • -

    range of data contained in the process;

    -
  • -
  • -

    available tables;

    -
  • -
  • -

    instrument universe;

    -
  • -
  • -

    physical location;

    -
  • -
  • -

    any other fields of relevance.

    -
  • -
-

Connection Passwords

-

The password used by a process to connect to external processes is -retrieved using the .servers.loadpassword function call. By default, -this will read the password from a txt file contained in -$KDBCONFIG/passwords. A default password can be used, which is -overridden by one for the process type, which is itself overridden by -one for the process name. For greater security, the -.servers.loadpassword function should be modified.

-

Retrieving and Using Handles

-

A function .servers.getservers is supplied to return a table of handle -information. .servers.getservers takes five parameters:

-
    -
  • -

    type-or-name: whether the lookup is to be done by type or name (can - be either proctype or procname);

    -
  • -
  • -

    types-or-names: the types or names to retrieve e.g. hdb;

    -
  • -
  • -

    required-attributes: the dictionary of attributes to match on;

    -
  • -
  • -

    open-dead-connections: whether to re-open dead connections;

    -
  • -
  • -

    only-one: whether we only require one handle. So for example if 3 - services of the supplied type are registered, and we have an open - handle to 1 of them, the open handle will be returned and the others - left closed irrespective of the open-dead-connections parameter.

    -
  • -
-

.servers.getservers will compare the required parameters with the -available parameters for each handle. The resulting table will have an -extra column called attribmatch which can be used to determine how good -a match the service is with the required attributes. attribmatch is a -dictionary of (required attribute key) ! (Boolean full match; -intersection of attributes).

-
q).servers.SERVERS 
-procname     proctype  hpup                            w hits startp                        lastp                         endp attributes                   
----------------------------------------------------------------------------------
-discovery1   discovery :aquaq:9996   0                                  2014.01.08D11:51:01.922390000      ()!()                        
-discovery2   discovery :aquaq:9995 6 0    2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000      ()!()                        
-rdb_europe_1 rdb       :aquaq:9998   0                                  2014.01.08D11:51:38.347598000      ()!()                        
-rdb_europe_2 rdb       :aquaq:9997   0                                  2014.01.08D11:51:38.347598000      ()!()                        
-rdb1         rdb       :aquaq:5011 7 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
-hdb3         hdb       :aquaq:5012 9 0    2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000      `datacentre`country!`essex`uk
-hdb2         hdb       :aquaq:5013 8 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
-
-/- pull back hdbs.  Leave the attributes empty
-q).servers.getservers[`proctype;`hdb;()!();1b;f0b] 
-procname proctype lastp                         w hpup        attributes                    attribmatch
--------------------------------------------------------------------------------
-hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!()      
-hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()
-
-/- supply some attributes
-q).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] 
-procname proctype lastp                         w hpup        attributes                    attribmatch           
--------------------------------------------------------------------------------
-hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
-hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
-q).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b]                                                                                                                                                                                                    
-procname proctype lastp                         w hpup        attributes                    attribmatch                                    
--------------------------------------------------------------------------------
-hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
-hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
-
-

.servers.getservers will try to automatically re-open connections if -required.

-
q).servers.getservers[`proctype;`rdb;()!();1b;0b] 
-2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998
-2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused
-2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997
-2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused
-procname proctype lastp                         w hpup         attributes                    attribmatch
--------------------------------------------------------------------------------
-rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
-
-/- If we only require one connection, and we have one open,then it doesn't retry connections
-q).servers.getservers[`proctype;`rdb;()!();1b;1b] 
-procname proctype lastp                         w hpup        attributes                    attribmatch
--------------------------------------------------------------------------------
-rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
-
-

There are two other functions supplied for retrieving server details, -both of which are based on .servers.getservers. .servers.gethandlebytype -returns a single handle value, .servers.gethpupbytype returns a single -host:port value. Both will re-open connections if there are not any -valid connections. Both take two parameters:

-
    -
  • -

    types: the type to retrieve e.g. hdb;

    -
  • -
  • -

    selection-algorithm: can be one of any, last or roundrobin.

    -
  • -
-

Connecting To Non-TorQ Processes

-

Connections to non-torq (external) processes can also be established. -This is useful if you wish to integrate TorQ with an existing -infrastructure. Any process can connect to external processes, or it can -be managed by the discovery service only. Every external process should -have a type and name in the same way as TorQ processes, to enable them -to be located and used as required.

-

Non-TorQ processes need to be listed by default in -$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format -as the standard process.csv file. The location of the non-TorQ process -file can be adjusted using the .servers.NONTORQPROCESSFILE variable. To -enable connections, set .servers.TRACKNONTORQPROCESS to 1b.

-

Example of nontorqprocess.csv file:

-
host,port,proctype,procname
-aquaq,5533,hdb,extproc01
-aquaq,5577,hdb,extproc02
-
-

Manually Adding And Using Connections

-

Connections can also be manually added and used. See .api.p“.servers.*” -for details.

-

IPC types

-

In version kdb+ v3.4, two new IPC connection types were added. These new -types are unix domain sockets and SSL/TLS (tcps). The incoming -connections to a proctype can be set by updating .servers.SOCKETTYPE.

-

In the settings example below, everything that connects to the -tickerplant will use unix domain sockets.

-
\d .servers 
-SOCKETTYPE:enlist[`tickerplant]!enlist `unix
-
-

Attempting to open a unix domain socket connection to a process which -has an older kdb+ version will fail. We allow for processes to fallback -to tcp if this happens by setting .servers.SOCKETFALLBACK to true. It -will not fallback if the connection error message returned is one of the -following : timeout, access. It will also not fallback for SSL/TLS -(tcps) due to security concerns.

-

At the time of writing, using unix domain sockets syntax on windows will -appear to work whilst it’s actually falling back to tcp in the -background. This can be misleading so we disabled using them on windows.

- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/site/gettingstarted/index.html b/site/gettingstarted/index.html deleted file mode 100644 index f0306b5c5..000000000 --- a/site/gettingstarted/index.html +++ /dev/null @@ -1,757 +0,0 @@ - - - - - - - - - - - - Getting Started - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- - -
-
- -

Getting Started

-

kdb+ is very customisable. Customisations are contained in q scripts (.q -files), which define functions and variables which modify the behaviour -of a process. Every q process can load a single q script, or a directory -containing q scripts and/or q data files. Hooks are provided to enable -the programmer to apply a custom function to each entry point of the -process (.z.p*), to be invoked on the timer (.z.ts) or when a variable -in the top level namespace is amended (.z.vs). By default none of these -hooks are implemented.

-

We provide a codebase and a single main script, torq.q. torq.q is -essentially a wrapper for bespoke functionality which can load other -scripts/directories, or can be sourced from other scripts. Whenever -possible, torq.q should be invoked directly and used to load other -scripts as required. torq.q will:

-
    -
  • -

    ensure the environment is set up correctly;

    -
  • -
  • -

    define some common utility functions (such as logging);

    -
  • -
  • -

    execute process management tasks, such as discovering the name and - type of the process, and re-directing output to log files;

    -
  • -
  • -

    load configuration;

    -
  • -
  • -

    load the shared code based;

    -
  • -
  • -

    set up the message handlers;

    -
  • -
  • -

    load any required bespoke scripts.

    -
  • -
-

The behavior of torq.q is modified by both command line parameters and -configuration. We have tried to keep as much as possible in -configuration files, but if the parameter either has a global effect on -the process or if it is required to be known before the configuration is -read, then it is a command line parameter.

-

-

Using torq.q

-

torq.q can be invoked directly from the command line and be set to -source a specified file or directory. torq.q requires the 5 environment -variables to be set (see section envvar). If using a unix -environment, this can be done with the setenv.sh script. To start a -process in the foreground without having to modify any other files (e.g. -process.csv) you need to specify the type and name of the process as -parameters. An example is below.

-
$ . setenv.sh
-$ q torq.q -debug -proctype testproc -procname test1
-
-

To load a file, do:

-
$ q torq.q -load myfile.q -debug -proctype testproc -procname test1
-
-

It can also be sourced from another script. If this is the case, some of -the variables can be overridden, and the usage information can be -modified or extended. Any variable that has a definition like below can -be overridden from the loading script.

-
myvar:@[value;`myvar;1 2 3]
-
-

The available command line parameters are:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cmd Line ParamDescription
-procname x -proctype yThe process name and process type
-procfile xThe name of the file to get the process information from
-load x [y..z]The files or database directory to load
-loaddir x [y..z]Load all .q, .k files in specified directories
-localtimeSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P
-trapAny errors encountered during initialization when loading external files will be caught and logged, processing will continue
-stopStop loading the file if an error is encountered but do not exit
-noredirectDo not redirect std out/std err to a file (useful for debugging)
-noredirectaliasDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)
-noconfigDo not load configuration
-nopiReset the definition of .z.pi to the initial value (useful for debugging)
-debugEquivalent to [-nopi -noredirect]
-usagePrint usage info and exit
-

In addition any process variable in a namespace (.*.*) can be -overridden from the command line. Any value supplied on the command line -will take priority over any other predefined value (.e.g. in a -configuration or wrapper). Variable names should be supplied with full -qualification e.g. -.servers.HOPENTIMEOUT 5000.

-

-

Environment Variables

-

Five environment variables are required:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Environment VariableDescription
KDBCONFIGThe base configuration directory
KDBCODEThe base code directory
KDBLOGSWhere standard out/error and usage logs are written
KDBHTMLContains HTML files
KDBLIBContains supporting library files
-

torq.q will check for these and exit if they are not set. If torq.q is -being sourced from another script, the required environment variables -can be extended by setting .proc.envvars before loading torq.q.

-

-

Process Identification

-

At the crux of AquaQ TorQ is how processes identify themselves. This is -defined by two variables - .proc.proctype and .proc.procname which are -the type and name of the process respectively. These two values -determine the code base and configuration loaded, and how they are -connected to by other processes. If both of these are not defined, the -TorQ will attempt to use the port number a process was started on to -determine the code base and configuration loaded.

-

The most important of these is the proctype. It is up to the user to -define at what level to specify a process type. For example, in a -production environment it would be valid to specify processes of type -“hdb” (historic database) and “rdb” (real time database). It would also -be valid to segregate a little more granularly based on approximate -functionality, for example “hdbEMEA” and “hdbAmericas”. The actual -functionality of a process can be defined more specifically, but this -will be discussed later. The procname value is used solely for -identification purposes. A process can determine its type and name in a -number of ways:

-
    -
  1. -

    From the process file in the default location of - $KDBCONFIG/process.csv;

    -
  2. -
  3. -

    From the process file defined using the command line parameter - -procfile;

    -
  4. -
  5. -

    From the port number it is started on, by referring to the process - file for further process details;

    -
  6. -
  7. -

    Using the command line parameters -proctype and -procname;

    -
  8. -
  9. -

    By defining .proc.proctype and .proc.procname in a script which - loads torq.q.

    -
  10. -
-

For options 4 and 5, both parameters must be defined using that method -or neither will be used (the values will be read from the process file).

-

For option 3, TorQ will check the process file for any entries where the -port matches the port number it has been started on, and deduce it’s -proctype and procname based on this port number and the corresponding -hostname entry.

-

The process file has format as below.

-
aquaq$ cat config/process.csv 
-host,port,proctype,procname
-aquaq,9997,rdb,rdb_europe_1
-aquaq,9998,hdb,hdb_europe_1
-aquaq,9999,hdb,hdb_europa_2
-
-

The process will read the file and try to identify itself based on the -host and port it is started on. The host can either be the value -returned by .z.h, or the ip address of the server. If the process can -not automatically identify itself it will exit, unless proctype and -procname were both passed in as command line parameters. If both of -these parameters are passed in then default configuration settings will -be used.

-

-

Logging

-

By default, each process will redirect output to a standard out log and -a standard error log, and create aliases for them. These will be rolled -at midnight on a daily basis. They are all written to the $KDBLOGS -directory. The log files created are:

- - - - - - - - - - - - - - - - - - - - - - - - - -
Log FileDescription
out_[procname]_[date].logTimestamped out log
err_[procname]_[date].logTimestamped error log
out_[procname].logAlias to current log log
err_[procname].logAlias to current error log
-

The date suffix can be overridden by modifying the .proc.logtimestamp -function and sourcing torq.q from another script. This could, for -example, change the suffixing to a full timestamp.

-

-

Configuration Loading

-

Default Configuration Loading

-

Default process configuration is contained in q scripts, and stored in -the $KDBCONFIG /settings directory. Each process tries to load all the -configuration it can find and will attempt to load three configuration -files in the below order:-

-
    -
  • -

    default.q: default configuration loaded by all processes. In a - standard installation this should contain the superset of - customisable configuration, including comments;

    -
  • -
  • -

    [[proctype]]{}.q: configuration for a specific process type;

    -
  • -
  • -

    [[procname]]{}.q: configuration for a specific named process.

    -
  • -
-

The only one which should always be present is default.q. Each of the -other scripts can contain a subset of the configuration variables, which -will override anything loaded previously.

-

Application Configuration Loading

-

Application specific configuration can be stored in a user defined -directory and made visible to TorQ by setting the $KDBAPPCONFIG -environment variable. If $KDBAPPCONFIG is set, then TorQ will search -the $KDBAPPCONFIG/settings directory and load all configuration it can -find. Application configuration will be loaded after all default -configuration in the following order:-

-
    -
  • -

    default.q: Application default configuration loaded by all - processes.

    -
  • -
  • -

    [[proctype]]{}.q: Application specific configuration for a - specific process type.

    -
  • -
  • -

    [[procname]]{}.q: Appliction specific configuration for a specific - named process.

    -
  • -
-

All loaded configuration will override anything loaded previously. None -of the above scripts are required to be present and can contain a subset -of the default configuration variables from the default configuration -directory.

-

All configuration is loaded before code.

-

-

Code Loading

-

Code is loaded from the $KDBCODE directory. There is also a common -codebase, a codebase for each process type, and a code base for each -process name, contained in the following directories and loaded in this -order:

-
    -
  • -

    $KDBCODE/common: shared codebase loaded by all processes;

    -
  • -
  • -

    $KDBCODE/[proctype]: code for a specific process type;

    -
  • -
  • -

    $KDBCODE/[procname]: code for a specific process name;

    -
  • -
-

For any directory loaded, the load order can be specified by adding -order.txt to the directory. order.txt dictates the order that files in -the directory are loaded. If a file is not in order.txt, it will still -be loaded but after all the files listed in order.txt have been loaded.

-

Additional directories can be loaded using the -loaddir command line -parameter.

-

-

Initialization Errors

-

Initialization errors can be handled in different ways. The default -action is any initialization error causes the process to exit. This is -to enable fail-fast type conditions, where it is better for a process to -fail entirely and immediately than to start up in an indeterminate -state. This can be overridden with the -trap or -stop command line -parameters. With -trap, the process will catch the error, log it, and -continue. This is useful if, for example, the error is encountered -loading a file of stored procedures which may not be invoked and can be -reloaded later. With -stop the process will halt at the point of the -error but will not exit. Both -stop and -trap are useful for debugging.

- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/site/graphics/AquaQ-TorQ-symbol.png b/site/graphics/AquaQ-TorQ-symbol.png deleted file mode 100755 index 312cfc403e2c0400dba7121adf42889e0700b83f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125149 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
= zNym0_D0bpn19V+CYNnFxW=NQ;T2}o)?ubKsXmN0 zxRbnf1cJX~G+4~hQtz!@db2_H-KshIPR|hTKpccwT#VbH#5Wu5qlz=10Ge}qbX&q( zih(?9DPXGyXe;;R0PQ(z>ctN;Wc^1?!5F^`hBaLb>{d}2@5iTdeClsXpOJ0K(k_^A z*Y_bs-lfqY3!qJtStBJsx@2MHcXjzqTr}Nxs_nvu`&Lq<7>s`L?SQ20*3mh398x%G zm}>I|!eo|LmM^I87ue$cKIV>P7!Op4hs!9c{|#| z`HPl%rJI}`iem}~tlzzpIGJjeb8w<+NL^UXK>j0p@+LCM@&Wo=e$KIvy*HvWwI572 z@(&Ira=^*9Y$^BJ|LOs-qo;e^CH3G1S;sdLYC}WP*znXYH zDz>edL9THthfNu_D758}>aEAdGQuDD;X-9U*V1jjHqG0XDqyQD@;61=cd)3@Qg%Sv zE63Bauiz3K8cvA3HP3Xmc}OtYm0VC^m*L|IGv|yYnw<>~T&isx#GAJ#%8_RXo?Dp;V71b4^?Xk7PhYi#2hKHNIPEL-5wkv!L8;;awqAjn{%KTWF zl{;SKdHTEL#-d(j{^ZQ_Cm*t)z`X;?^9ju|Hn<%*Iw^3bW#(&`tQ~2Oqp2rSr0Hx_ zhH{iWU%cKm`a4_c=JEv{b#atISNY2pL8}2_4NnWZ9VSo7KDEfjCUn(^+$XHWZhD@pIg_#yRuq^4us9*%nVWdf#0XGS#D;zurPDCTVqn5SWn z_eTJD@9I&048b(m1lZ{_Mq|+zE>ahjG)V=g_0RfL=bvHd0s!2cC?7lwvo;dB3cmL` z=hpk>e;XODb-wcl+Dt)fWGJ^fhksp6_`$>Qq~tdFWV%YDw&AUtZLB-ZktPSbjTlZ$Ymp57iUz+qJv&d zmhOIT5S9lAkM|v*7>ZcXt_>A)mDdhF_>yxy*bJeHq^U1^nz!hZoq=TKUB=wt{(*>O z<~u+5KzDnjR>Zk75xM!#bN%O+-gOPZ7DvX~8`3Eu-MN@Tj**)dA#3&r{gOc!6XI1| ztanVIytVqKxP6SL9vRxhbcv`yvDb37^`o-^7IhdzqT24@k6Vw9qfP2-$ zb`-A;01y1&sbFUrjvT!W^|{h>Z&*Eyt1Q~HrFH1hh5yP?qwQ467?Q;hCwgz7^5#l9 zBPNb6^F{CH{Q(Y2&E?`xPjj*F`iwkMe#L!Bg&~@LO7<3LSkMwu$c5Of$N;qoPTt3@ zJf>iZ@>}fzS*5Ny2E{fN-Fq>6i=ha_KsQRaI5@_fBU&y(Zn*B)6kbC z=5yzis&(1kJR9P?JY)(vq@psf6e+Kv=YD^3FZWGiGp(pFWdzG4$pSc^P9Mvj&6Yqwy&>Uu;p(((*N4D|0sTDH3CnDn4H7Es}KKnxpLbX6rytbYy z(_>yk=kcW?G}GF0I!8Hp0JlRu#w3uXf=9=g$L8qep2Vp5Zn9>H%B~zxRINFmpa%%l zUp3*iceq*c^BKwk?odpl9rg_gq1}s3h~IHf>ds6A+tNGt2KK|Cq0CS(axv>W)}YkC zRj*VrR|%{vb=hoV`w_s z))t%3>+bxo@!x~iW`3V^$}0oQIeMl+R|Ni$_C|DRKDJD-TCk_2XIA^oTxS=(+M`;&3~I43VIlwJ`{D;{m`X$1gOdU`3uSRw~Ek*qsdl zl@)c|6_u6E1lN4weP$`{_wT#nA2mC^1Oqk=r8)9Cg!t>4@^zC|mSz|!@@n*Kj?J=x zy7cYOe&GAJFE+KIPCA0!w!vs}1}YW5{D{MI_#?o8=HE259)D=CCb|_B*kt8fdwI8s?SLbT96WSi5%lCY>(Ml!8I|gYBv@@q}f8>Y=Iy2n3y~?G-vfe@MH1aI*^GP^r?B$i~ha+S?x~*RCXoMzqJN zv}`}A%2G>1i$F>xkIC3~CWn=;<;!Us%+x70XIkXP^mip%w9Xm#aN41JRPmk3#TJQ( zRu)x%>rhr=A+*H?dNxn6mQMPHMV3f#9W?7innik*$O87j_HyLtSNz@+5a9`)@gZ(G zJ6W^A%zHeNT)%cFK&pdfJ+nugEYBf<(~ZGHLlLg4`VYGTo+wE#44>UGdei3?Zbc4h zkNkz?4B=9n(Fj`m`8sRlq6Dj!fVJj?FsNoN24-Md!ZEX5WP3bJ$>!m29K$sI9pkXw zDn7IzSHm@$5{>w{O6w{q_Fl!`jil(Q zY7;Y?MPv*n3ppGyk!2<)Cer_^LSxY;iN@j&HJZ@*TC|C6q$3{^kbT9QP`RlX`<6{N zn8xWJ`?(-b{6BvqdF-qUg)JAJTL8$HAMsvt*2rC(m2VhGSC?>8vM!6}7pdH+Igbl8 z8u}-k)PDTlN6Pbe_XijRi(+uYS;?>|TRssNzn_5|e=LxfQ5cpY+dZrQ z;&Fqd(n-bPC6`Yok6g;&f(wqztOys0>`$>x`}m*RhXo{)*OuW|u3U*Jj>wbO8?EI0 zlb0`;O@2jj3%x3z?8YoIx_gDq&av;vzgD6(#K8J>!p2TJMi0!1D)B|PcG^%X+f+3og(kjC8&+xz(-*7@Q~jwZkOas@k-=}vMPgdR8jz(nJv+<@_BrDB?;>BzNUUx5+D&wsRu;D^?_@MMc~=1 zN1P5SejdFQxD(vDb!a1{ewQ`~ny86`c5D9}$F&c<;}E-t92CYnfk8S-3$ozfM`2lr zx<7n)Ba@xfcs#-_>!RY`T6-w-44tFh=t*OKj`&4bih77hdm$AUfcSJXpSYGs)h9czsoWE;z_bdS+uBrAA^4QQ zM_~GPXhG9N$RD;pW6ru&hTV*%CpC&eRih~r%tmYMwp^N9B%l#J0HsuJrN^4e`@jJ@ zNk24nQlH~p>uy{uEWn!(3vnHp(4PwpNva?bTO6lC2}WbH8ILWOjTU3A+eZm+Q?79; z@|~-F<&a*!Q8WZQ0UsIo`}bo;k0YCYzLn;Hw&M8#+AiPf_-PB#PR1Fn3Q3q<6IJ+> z?c(eZ?3Y6@-O;BoZS_`+`H8p`ejwX(?1xrtf*)NH{^k`D`aMQI;LB35*zA> zm+s=uI=c}4x>{Re&&w&m-G1uP1Q)&6Wv7x8vv+j!)7yiZ;$p^+pRO1|yt_iU-l`}V zbCn!Wz{Hhv&0af+(Es#sc%2h+>Z0lu&V2O636P8oPWIn2J!-DYsvzBsrlh|WIDxBG zgs5i#%)k9kZ{rs$9&@1$V|hRxsBt$Xsby_uuO%XSbSlbiTc1%r0%4)f|ACeG?~TQT zRuUMcvsm3>NXCcr^IgI6YT(RId-FXL0R>0I&fjy)YIJoR4wRuMfW~#66K7&$tN0bZ z*T#ly9W}tV8ZRy%^h&A{dbqxR2wWeX)IrLnSflw3eFnx=1wCuhQFR(Wglk;qy!eqagr1a)^Oklr5v z`yebkSM8ehAJ|(D8OQDT!BdFqB8af<3f%d0zwp`H)OQu()TZh!qJ`s9R5hP00L{4s znK>T#Zyu`%fvD#FsWr{}bDwYq(jwOuR;_c|-B&{@R^ifu&_Uq}Hox%coy|AGczMy3 zeDr0ZgRjcu0Z%M*3@5U?c>A^cgz-kL1opchk9DdnALwEHB2z$M+VbexGCMR2%;I*s z*9qdx9DIwLJbD{%17eqt|3BkauuuLw?HVMRc#m)=w&0)6g#Ge+6FB$43KRe%zqvG--FcMO?h&mf$1T6@Hnk&buhK>^s>oLldZts`cNT{^fGT7Kg8RW z560Her7qi03Qo8z0PX#?{Mu+&x}=j*tUJW@G@SPdFE1~gZw4Apikz}?2^s(CV~cBE zhJkuKhi34cqbCu=Go?O!TujQJWM|q!+APgPFNq3t36DRc1aL^J-6mQER&fyHOP8d& zV=LzjSI51RtqusR8%em?3O+)Fba-0|2ZD`-o6@(2Oa9^_`qEc!3_Dj!1vLFikA2JN zO-A7UqYPT^e|zfno&DTq>X41pzc=1I)8yi+w~m7}VfF8FbFaQS{4sYW_5{_9lU};? z>S5Xs`9y0K@`3_oF*tu*EadUyb>6(_K;oB<)TxcR3E-0(yH|+{PO|R*AJ7cs*?|-I zZRSA){3@SF`Mu8(~sgWmSVv~n+B;uQ+` zlMQ{&M$J%>=B1|-<8If0z~h*Hm7l^2#~_x;yb#Yo&f0dHKP@WwR1S9_HJr|A81{EmMAeUxaO{=&9n0?8-#*s%suLSY4JJP82dS^xT(K(-JGDfO)I1U-bUnRNgLL4^QAlYTnA-cu4ok3U52aNnh{}diT~V?LVpa zlTW#%hu->f&rQxH{hD2onfa+}FN?ZHH*dB~Avf>W;tP{V$?VXU0EcKR^C>sFkxfgd zj?vAtMp4(?;u(q4urx@tpS$H{Ed($QnyXJqMV^Ym?~B|A*~A>?ZmK+#c~tvYzJT2w zYY10Q_>Ykf_}yN4?b^pZOLO@b%EKAw4(@v2+#Q4MU?M0}CEwI6}_A`nisZ%<5`C%gY4lEubIGu9*?Uhef)1jLz&g zJt)+L@f?C}Y(Y`{S1(_J%Dkh_v>r2rELHP`SwPfppZ|xvIQi>3aCwb}?$ZVjV3$mlE7`Xmg*y?}Us z_X&D@f&WYKDs9Sd)5q*pbotmvf+T?+eWZB*EG}+hXXIkU!9iU z4{3aGy9H#dLG&y|Ac`}8-thQLY)Jy&eJLDG)vWK%phPTh@=Bwbu&80NuKh2^Q-OJa zoplv*ou&4Z>UC4E;XKjeG7l~ z@i%ApKH;Knems9$BpQ(LnU9r+y|1}?`kd0O9f92$>eOAD^*imE{Ox35k2!R)|;`*)+Sa4VieakF~yQD?RD`^4McnGH_?^8V-6*!8FR z9xuF%B*0k7_?yiY-Yx-W8<~y3bZ@An$-Zmv}aXL{#Li#sO^*7GN<*Zwy)++z8jI6D}=rZgn$T3L_=lp?& z_P(dlHTeqbBEa+&6t9;3DV{sxk5wes?E;rl-g8@lSH5m<^J%1L!or>J&r~b&=8Mlf zWgYrulUaGiHfx!Kl&!QepC4cBDACJ*lsT~^^f6|tF@uG9XnPB zgc$VWxHnbq47NwESY(XvkNpe-|9+Wc=iLFE-w53o9%C(EgV$5a)f3mZDV>HXasPe; zjkP$`JrDjDT5kva%?Ho1rR|uzksI4@*r6ZZ-suD0;LzWmptsC<0VGEr=2aK_rsw)& z(S*l~`J~d)Hm|>~`}V$0)+%QNFxq}@{jCq|kbE32IqH}}o3(ecz8zsuVq>QFTlQ zVq!O6M0QEww;bBR!{H#I{Q(RrjK?$l5`JRPVw@qzuqklO&4U|EO72qAwJU3k#htPJ zk6V29UpC~syZ72fM}pdL`@x2^R~!1f&=`DEX63m6u`&zw2qL#<=PutK=A`SuNl0eC z`V4(JR?}z@UByi2%xw;rx>gr?1fF^@EU7$nBkurzrGqJDBsd}9tdob~Y|ksCb6WlQ)WS2llJt!B|-cUeeV8xDW;wkdl3Js6SD zO%YsrXPzA}*!f1hL#Wp2U2Xj=vnxDuW|pQQSrG5$Gcov$n~}_U033e(E2! zU%aNBmoxCHXNz+~w(`qZ66)+_<(5JeTu?ZebUT_Z=Ia`K_^po0-voSkKN=V#AHaMQ!*8#;z}i=StWe zb6dm8h7%U&g8rItzx$h+8)ywm67Gm~4x7rB4X#vfmqu?W^~{%kt|Tt3ahy1f5gKjw zIYtPAhxAhv`hG#kJh}YN$WI|3r}mD-4+@ZI+t57#rP8^s-gR`6@gDfl2ygRx`3^nE zPClySDEnbY3;v2hqJ01p5BD2=g6qk^P-o%}vAKqL1?vzjXm689GvM)-vXtrTj0_;A zpxzg$e__>cCRKX;iFPt_n2ebi^HOjzj1Y17_OBn z%akP~OH@e6GInODtRcz1X3d_mP8ePc*|$)(VeGrH4ThQT?e%`VKc9c$`@_dC^LV(g z`&!O9*IAzDy04?m^)PAS`*z<-OX0FfwpC!g;+^s=T>n+9LSRq>&IcZJ0e7Fo?YM(B zjv=&Rlcp2Ka%98iV#TAIjQt}&C z0^;D*k*AR&WES$_36l*hqboS*Qo|^OxL0x#AEQ|x`PxXKFWPzifjy>%X~@1&I2zEt3MEzi$9S>dtPxWb?E>GwFK|l_}R5{cg0&} z@mxKDed`94wyL?dY45k0l{!8P9Yjv?c zO^Q$zeYA9!qiKCKq0qw?)>xrfd96@gQI`FrBP+mQJ$mMD7SE7q-=#kVbCeT?Cp?^= z6aL&fB$!TADRhwjj9ULN-lqC;D9ib3UXSihuW0 z(Q33Hw(tquV1IN~*-bEV!53fq*tLX!soZ0Qt#{|XP&nUbZ5D+=@+y-0Dq=9A z8Cgu2Y1Gq=@ct3Uk+d9R#An2+-*|!hv_MvOs6`M0ZhMWHRI5)WzVy1_nh;ES%iNf1 zmBhW51v8+27r^-O0ut}D>@UrMIEL}pE&GrsjR?#875P>T9c!5l=2a<4n_1TqH>^yX z^r*%;*?^wTv|6-r!=t8gn_+8LT?@{eT+9(b=$G@h_Ey93rwNa|EG4d+$nY0mIVx_J z55ZsUk)Sc#gt>NgfE7l}s>>d{s5elYN7ot(NJAG0OLMmh+tAnfA{@};qa8!j$CC}{ zannZWlBUP-P0z*?C1KfF&%c_;5D%An*9=iV%>? z0U>9RO9U>GkDXwn{(T1rV0^_B@2NclHN_7|g!YyD9aui@UA;pGNL`cSCkCw*p+;Xj z@!y&i(0lNKgM?e!x*vaT(S*vTycjs>8S5dfre8Cw=vpB8ajBX|^09`Q64wa#ghtl9 zdl{~T!%P&;;fI$NPV1j$q@f=t7~R)i-CaXNyNW(CC8QOnld4zD0LNH8>yMY_ZRGYvRlHqLmZ zT|~SIJIUE2IE1>3k%Txrx*Pd(v*C8atey!Ak6Iv8ObLL#W=b@ymMWZExIP_!Tb!c5 z6?oZ~qQLK3p4XsQw`wSK{Kd!H|oAl-rFMW)!8|*;kDfx?`b)XXf-<70^2RCN(}L z#9T4bw@FP0^f_T&mCbn@gIq10%ImmNwku#yzmKmM`!yknDnapDPQjg9TCvk{HB}S;_|b#jsAuxOSE24ThfF{Z(T`8NZJNIj z&`)_M51v{&)#zgzCq5wtZVvX!qliKHUGFDS9~_I;0#+v3A$`9~4C^HcS<0+7Bl>7R z-TDj_D|F#F&)eM+_tQ+S2Oqr{12T*=r%hdOuv3Dzp z$d6qs(IZU(5={=g<+t;PF>#m0BGLZyV;Jm7Z#SlCEOwOmQ>>f@bYLhkfmwCpBl^M* zvQCcBepQDE^g-LbF+#r=mfTv|Hv(T6mcLk%4D$^VLX;FEqIO9Nh8EU~u|cKM%DkWORd2p? zamm}vQz6Tgo=J^+HYWSUQ*9*|YpQc@76;ZX*igA6pH+`bR^N{a^ zoDU8`pC_A)7xNnRUzEx`?ieQP-0yaQo&=+`ctGz>S81QT&&glv)cZN{gt$4CC>+cb z<$_kAo9VPh&kG*+JOfOMCJh8)ovC_9hKYZyorT{CJY{<0C5?P|ZZhGT0?Yf9ighg}t#pUR~laagJl5xXOFW;zcvr9e*m&V7NXpHnn-$ zdT}hg;j_(WM$T-;MfOAcxy@rlfm4%TmX}Y|zf(Jk1u+l~&NN!mE-FtIs@bZ-$Ug9E z>-~k_OEV}57|kZD3@pix{I?Mp!tZcwmG|k`_wP}BEgoL*RLU^j&{3uzDnI@ZY*)lP z@i4K3w+&Pa_pN6?%s^ecYZD;kIM3+=fvsyzwEl23k*MNkS3E3f zGLvZy2l$Bg=kReNU)LTPh$U86>CBQZH3G$RBNjAG2I6F8yyG`c)&2anTQoJk@l6j* zu0o5SYpQTzPQ0~_z`G4|eU^#nYng#w*7$Dg#yA7JDx9Jl!E!9WtW7AM4MHZHP?MlR zxCFocg(x`LF0)+cCvG7c6H4P+;Z)TdGEsAC-ejp(xg?-hqdWM%G^nd5xB2gm5t_Iu z$wTzEGTqAWHEhjeNT>0KyfbItNC*xLqOjhOBL8lsHvGl61zSp}-pjm`d43;nT-sF` z{ahVxdjvN+v=-ydVd*gZGCjI=9Xga!GzQ)Puc4So%E%W`K3K!q_iswpK%1_^ckSJA zimaW;k8G5SEH>|&jy8(roqLwale?{H%|FC9_Ld`l9;FGCJ5_;L*N=vstP_39SBc4c zuBX`4J?6S^vN~o{b+KjCLH;Je#GaCI(~XKQ){rCwwLe5JDc7&u3NS%h@l~J=jBRN8}t62EL}s9(7wdyKS|7}1M-ovWsb85kenYuhx~QZ<-{qT1WA%&X8si& zz<6@-OU*l|*t#g>q}bS{o3e--wr(UBf=8vtcFb0xr#ano1R2(|rsxHk+K6`6yruoc zu>vaYIX;Vp{*eNt<%A2{=z}M6^;ANLYfN@<==2DY^@EOG4&1yKKO^`b!v_jgzuw!UkN0zStA3!bViC(&i z-@i+hJaS<#tTimQP?BMI#MIKUWJ^i`jK3sYR z)@-zHfgAg5v+({5a>XA9_IAsLCezrodT$jw0lgnTK}^dGCVUp$S{XWKjEE=Cp~k^M zOa~>J&ATsJl~D^?&Eyk$V&s&+@G>^3FHEO90=fF+(G_ZkP}*a$OWRqFSo@%KQIb>f zK4_*S5cRA3>O_gsTF}2x4O@XUn|lS$e$n!hKX2-Sa813ylD(2c|7P5(QIU~{w#d8L z(qs#0q*|0BP=x=jDeQ)=OEB>T{q!LnHLetq%ctg2KGKJZm(#eF-SH@A9Sa+bq&vkq zBA#mVpG?zVwrJXNZ+nMueeK^=E(c@iXk0BJjLMCJNa+t=)F~$>t@bphT&};sHSnsw z3dO)V1tAulkozq2DeW`_xVdLzw5rPdLX~iKtV`YC)&4oRFRsEjJ}z-bIH~i$YRivu zdhk>i$IY&WFsitIgO%V!Ab%~F8(uBM8tEzTXZ~vf-y|yG?;H6;G`9sjAjvE&%W0E` z{W`%#Cbv36Bvv^eaOY*`Fo;N*1gRfP(l5E*$#PO&=j~yBpoVyxS*Mo9AWH52&l^<7 z;ENL%?|Top62}Sy_`1|c9z{t5^Bw!vdR0H|))DNcb6t8}Q;eWvU?idZo!pf5yL!
(*uikYDa}7ws%^7|K6#ReKtPYN}t0^7m_aFP(r)7%YJHV9hl2- zOz;ve@|nrZ;&7d+DghURqCvENpXB>CBVThW{bV@ZNCdDoL4uc7J(Qsr2bw1tndBnh zHOo=z1h?2d`>pf#Lc>@qQk`nw(SrJDc4_6X(j7FQ5h%gh>a>#?$=Yg(fDK4tg@DW7u$B=<>KUee5~wP zvWAeq4~8gl39sF?ZnmWZ;EOFNY5?f1C6GF}l^3mDCtRMGxz48JIGa|`dv3F@cihFn zYD-tg%k`N^9t?tqTi{LZQm=Yjw_F2~vMz67|1KY$2XB$rOp^nfaBPqq$iw<9H4gDlo34S7R#fK20|}ef;EI zSzN`v!pK^Afve?*3ya29+c75>!MU-ppEi=VpeE^0;p>ymf2kW1Hzv*Wlmj))b4oPt z_xv3Xt1b9@kft<8ihzej$=5V~v;u&E3xg`rHLr~B@j%Cko@pSEanUk(RAq;>_v(AC z%cR^X1%T9X(wLAPKSYtdv;O0!BdLI-=YKclR;pihz*k0|(`^17Ty}X3I`Y>1Ipfa< z%VTe=Oo>67Uqp1O;i{jLi~V4?8iTfAL+`GGL~?P&p+jr6bCq3jXp&jgQ7X**98&k< zt@RG4&ZZHJ#a3YT^n_Ajchp8iwCjcIR;c1>jfo5ckKYu{3lJ?)T;8A=_E}70krgdIdqYAH-oe3KKK0CN`qVrzrt2%$_2F2jZ(y zqk5(;=z6mz4-GIe#sIOIe!N*%V^&l6*Df^Xbzr{FTKg275dgFfyk3a?PABmi zwa(l}uMDMIN;(wYdIIJmET3OAbw$^g%bAw;`mLh^SHKKz(&}O2+p-mN?u}iC!eLi7 zupmWbQca%eFy`D{t3()V>D-b>10cCCQXyuCp$Y5@WPl1pw^3*;(K zhfddj2m=#*!v$_yzHmSXRIySb<5AAZcBWM|143fSl=?nmUk>|!s;tn>*`I7 zgLKU^(pQJKX@{}5K=0VyIn`4n@lC`C1YFs}D%QD?&@13&+!JkxbkJ7?3z%<@jy@NN z1-Zh(=>-7om&Zc~wLX}}-}Ap~HFyx}5eL}39#!^qauO9(@ad1i{ecr#!Dn_k9^k5c9r?aSlA~!4>U5Un6wLjQ! z%_m^7nKY^K--At|^RS3X6(I zjHPPV7$l`hxBv>Q;ArxEbz3QWuQaxye-cCMK@dI1ee}CzN_X9*su#js;Pr7*<36sg zD#=#P1BugBvY#aEfHgSG71eHpn0-{;tlS+LYb;0G-sWnt? zyazRys>Qvua{U&x4mp__Jn`^i{~*m`IAP`2sOb~<50C{l4&7h_$()SWL(oMH3Zzzq zj^2Ohd#iH_BLb$5#;=UKI&+Wyt?|0qD*|#20F(tGs&f*G4Gm`GW+ndFvERCJuk6Z-^Cx_6*v1_}%3lLja9 znhmH@=NVH5VO$`&wB{W7t+Q1NG#6Z!lcxOFI>DLHHpV| zydr=@eo-MdL+X<=>fr;BBppyimzyO^B-9S72ij6S% z?R!*r3u2dimN-(3dq-LVyp3Rk7paT9ICkRj_A6BEWKK{?D;0ufUO- zm$eW;OKAL_GvBpK8-or>>g*DAFD6V4#$GJv-KH77ZZ&RLIvw<*($;Rfuh zCKO{NLLTV;>VXAp<>HfgLRu3k$q9GMuNPznd0(THF%NSgzHocK)@RH=vJY)j7G!J5 zJh958CCwEfxE2VG##H30mK^=DfF1B;ir=%NzG(5>$#$t1g`64JVj79nwzGpT9B&Fs z>F)swo=eh0!X6?_$3rre#O?>mwXtsr{$pN0{z1U#YS_9Pz@&_qPIM^J9ek>eld8T9P9@c(kePHi3%PEgt{wnM=+Mx9rydlU?c3LO4H< zsfraNqm225=H+{A2hl&RlO4W87sJenGi9OgEH$ezIr^h7LlEPd6iBOX`E*byC*Md( zaU=A(wH+3~!c8gtT~fI=q)d7zVrz1?q}Ig$h5 z05liRqCo+wL@9lyV-1UPLI~#Cq3hZ)>1_bi@j4yAHE`K1(OUbxU?%i~bqek+}OZHF_;P}kGb!>2KpXz5dLt+d<{oFkb> zAgKIKKzBE|*V#^nulNDY=REVpR6TF44<)xcJoJ1<@kN(|@gs+{rHRB;W5G1#fMi@< z&|14?hW|K1=!l;W^?7-ttMSP;Z0tVJe6NjtQK|b)8vI4iGg%RoOz=Q}#KaF#M#hh{ z07{sGTsPL#cx2O9Xzf0O-uz-QT(dDoD4#4b-K@JU`Ip{O7^L&ZEKSW=WR25qa;ww_ zA>M-Y9`pJ+)MyYanAAlWy=>uqP_8|O(HywcVn5*^t+uNJG+zNLqH(&sa$f7Z2xGD3 zb;v@!vno!$`er0%E%JKTR#`m-7>=wR4emS%s$)2|JGr~WNmw--ER-DEa}a>fs$@)P zhaga(HkW#2`U$}A)iLf;Xi~b78~c3}Wwr6APn$g6=2Hc0ML79VowA+~d}+t>BmLnF z^bR}KN=;doDM=khh+|doeGL)FcvGTtxXlgji~4*{Tz2Z0568?J0^%6LGa-xgfT&RU z9P6RLPZ#UPFx`=Pe|Xa7a0ud99emX&Ni?^ceNxu3;R~MB`XU^Vk#e*C-HSL(m6cYV z%+=uB9Cm}P|0B`~)=~mwm=)+)P#K)}~*R1Z~W~GmzU#3p%d03{N>xidq)~dM{ga zWHR=H=|d?!k>AvK<(N!h@Uo2|EFS3$tXRDijsNHvT=S>OF|E%j+S%mt!O~nZLyKV4?mFoqi zV;ajDuM4$Y1qFu%E>6edPGR$Tj`2*2clHVJXq|34Bq($b{DjcSy{UDFd zA+$~f4Ih>oTM3PF^4O!MZDn|M`R{PP6#3au{8e>!a1!C3l5{Nc-9AGy*el`g8aYnU zkt*R?5RG%$6F5|96oNSKwDaxLer1pKUfzr=Ge+*SH{lVj7R!m#BXc7V2Q$Wn&!)6Rw#A zN`__7wdAUl5`_pKS`dGY+OBNM?Po^a8b$vUhOk5+9p1$FKYlecG!H;28n}i9_S#o7 zbu)MbMdy^a2aC&wszn}(Xtv80-Kc8$Z)S!ckfFwVUU^Kj{G^spukEsn?TOeJs5CpJei!PTk2;h_-g)>k2^{G~r zkb8S9PXZ*Sj2Jm?SOXtmPrWbCK%0)To!-P^6gvCpFctWPb9NdxqsmLg651(x+$UV&++P-O4oGbz|nR>7KBv{KVj|MoRTP zmheJ1(F=Jn-1sN<=*;cd$4xbwg1+SoxPK$o+y?Do3Ae29`GzZ`nISW37I0(wsWJl& z;mdu0G5Hh|S2M4*bx{kUf~~?cfjM?d4^Ub54f88XmWylGZ2ra|7;v5Bqs-$h@lXWj z!_nqoFAHHMdAtA3jXF;@U_fy2+cNGN#5svl`|cH34zC5=Ld5m_-HVR>pjAiEL)uDiw3+;rVTCL6(5ih>seDD|DM(7;cHTZ~DpI_QAXDTs{=v(t z!ZvsG&fgzS*>?32UhZcn$`$$hhycQ@%?q8a^&bdfgW!}CBR1c+^H`yLLI&pL-rC() zr8<|%+Y1ZGstwq%gEOYu6P6G&$I7s{w&-Sb=hQz_CDQsqU9QduE--?3_~P)8w{Gha zEPClGH@ma>tvhTG1-duS*9@XNx^1L@)NAb|9s&2Ptm5Y4E+LXv|-IoZ25pKR~U5}oD1fN{d? zj$Metnx$~Z7G9xPd_7y4kJ&LD8Rk3aHSQb0FiQoEr?wTxd{*-M`A*iH2uYKz&)1+(#tJ9&k z@Q9D`RX1v&nN;4VC_dcy)RIC#PB$WRK_Hpotuwe!vuXAKWK3jXYhVheU8JN^x#Wg1=ogHKuFO5IK>_#` z>$6jV?hk()Rk#pEJ@2@pD+qJy4K68V6{yu@PCdUk z!nkE6QuCcV!7Juc^Cam2HN-7BadQFK$(Yi2IEtYPgmz>kLr@MjdVV`!9FXlsi0J;s zR~k2M=4xvl(}!r|%%;G=A6^D}k{c{z;Q4WxPA3<=Z`_@}jXT+mA^`G--mA`L-cn5b zxnK)_%{Rks5mfR@Z^Ev8b$C}-@GtwFzwg}Hpxx8Qjj6abW@x%L9@bZu3V4FWp5GYM z%d2u}$08j*v>TCUI@SH}QOsD~~WS7|@Y#oWvl@-l)aur!yy!snA>mzJHZ#Hg~5)A3z7nQ_S=gYrN1mF4=6lM?0f zrc$?maG{ez$S&c;=aaYQrWGFGci9Lau2Uzk;SFLJoE(-UTP3*CIj({ftq&0-RGzq{ zCe|EYCDrmg!rB{UH;eG8v30d;2h1Q`efE~J4F@puy{&Weli9u-|_&Fbx#oE(W%gh+WdwO(Q*8zADh!^`uhrSYyg7zU%G$jP{uELvm(J@ z6Zypg1WWw%$0Mr4hUrD~>7WSxLrbb`FkcIBq0V)17LMg%G|m3gi#2-?C*({s0HIQe z36bCvhCjaV&nLh0e#}><8$bLGdk;ue13T?gY}|Y9*OHfBFMAEp`vkJ#GW%LAY^XD# zV~Ae##Sjz`PvWD>HU|e;F7-KHrIU!CUt&gzg2h5@o`c}4MUrT@CQ?tGJ!tbH51G07 z>;gu`t$9UV$ju=A!+Hy!03Az;|J=&Bd=7l3)xKjVV;)2U;Q}$K=3f#@m3313qZ4V& zqgS}HL{BE=7Q9)IFF&63ev!}0Dha8xeV4WwR5Bo_E#A_Bm!w%``_K<2Lso}Coes#{ z2iFky#3#VbPYs)%xqTBEv<2LWKU+rid~@+$Y970jB;~I|{o^Hp#tXSml%`{qEz zN4rGo=K8b6UW|&>yDjMJzuSVM%9UTqs?{MkLC#bt@Zr7KCm9v`4`iAd5Q+r2qV9!N zeASJ&bG+UDg$`=3djK1`0-SmG&1SOCw06KOkqIx>{o9@Dz2}WIp<+QbI1Z?N{7W#| z(D$N6a-zu{B}Li%OVg%mYZx|K-5DiBcf-IBB*$*Id?JB47}aD(WO{v?=r=)k#4a&715b- zM|yr0jjE7>G&7vNQE;6O8P!P_%+eX61hEyNN#yGD^oIrXl# zk*YvT5LOfk7J!|3sz*V4rZ=)_0Ko1C!DB)a;~m;!1sUO`9NBSxOZ>4c$AX&lu-VoL z`UTtl!M?_n@BCqq*`B{}HTXMzVgk%o^qleMwH3K1-qBVr)c#GK+U+~Ov-RoM>t(Dt z>DzYi5O3{Q`jft5-X*M|{k1JAk(bW6)C;PEt7qPSIVATRE?*Lp8U}t00VF?TI$OIs zEI)YmSG)m5bIKVH(~?;QxFpf`K>Gh`M{vG};bQSJuY&r4vlI!?E}B?Rsnxx830S%e za`#W$CwQ~Nkuv2>0NBNuqjJ_$2}u6mS8V>A1VP>ioy{Ww-zlRQga+zZ&boMYcF2Q{ zs|J++RWMDgf5yQl#Zfmu^qhIw|NT$or7ljs8UqCeixVqz2!NzNQvvG*nN44$AgwsU zd1TbT|9IR`g^7Q_m2(&viM{@x0Yq&?DNm4~j+emXK>5wl1n{b#hxG#Xzt)5AAwpOrAg4p2x#fYa-Kkj%H@$C$PN|diwz$fF22Q_C0pnIgH&fuGh1GmA|~;gnNS})71|$I zqwJ%FZUPMNsQ{pC2L!goSy@D=9e&(;dwNwGgtS%81FfK8QWevrn3)IB?1`d|<}bL6 zgbu?HKvXh>cuzYqX`)Cr6ybLI9BUK^w4c$tFG^F@fc8F<%z1@h6?HCSw=C{l&mr@~Sy3AzPY^ZisO zqFBmoB1myD z$-lSvF70y2-bj(*`o{c(#cquN8>#L}Sy~NY23kRt11Kki$@GMYZ2$xO|BF9?!l}x< v{NH5MnXH02ssH==KN9?ZBn26!7s${#pT0!4~bTvI4+ z=iVU=zr9C?tOGiE1BNbrtQ5ccD;F+ zBjQo|yyOuH5k1QPafK$aj5n7!4h+5nVI}?_moQidgp~RJdK*8zG@3N!WB!kdU?%DR z_XWI(^8daGSeO615dR5{|DP9PydHP=8%NSV@tVRG>VMdxaM*U#+1}u|*xFFpx?53u zwfk`hc#7v^Wv%j3^AkKot7rLwTOZ!>g2&kRrsW{cI@_@{sr$<@_wB;y>BmFEC2hxp zoEr@@rXCvyOC4|!{||CzvsVhDDKyOY;+CPXm=q8!nk!DqF8xs}gbCODEU zl>R$GY6)*NTabHcZ26r69sBu`ziTCKoy|y0Zu;)`Xjl*%@KM3Wrv-L}|J`LJ*`Rb# zNn0R7^q*ZB`iKzG>{e*(f6&11xvkk#8OZnIc>TNk{q6Zct;1aH`^PTB`7;zGdH;KZ zFzG*~(pt}H$-*86rC5-IW&CRA{lq6Dp=k3zYyHQkGiEq8m38PE{98Kf?y0Y_Z>gBg0{%q)-TombIBSk-|Fc4ut0TAD5aka;vrrnZwB+SFaZhcu#M!Kz zVZ9v#+sB_+FA03^ZZ41Su8)R*+jEH>wb!YT-wC~3lfV2ssbSp{hF1IMD|K6K#Oh`I zz+39A!>-LNM{G$FA~rPeWT{%R+3l|W-4Ujj=;eCy;xdAL>T{`=@5zWzZhy-AuFK8r z_bTZ;-h-}0^r2kD(ov z?f$@;p#22XFT3KmMZ8@%69Wz5eNd@|fkmI?Kt>Y>0_TRGdUwB|Qa39_6%FBCrONT! z8|h~8uTFP2s_>{Df2;LaE;}-G{Iv0#T1fYqykfS7sozGbVlL~~iBIjvgFoh7yJ%@W z$7SwXuR!0@(LN_jJ7BHMHFcp~)A7GhbQm%+L-R-WU|1PX{VMNt8My|+Xo?SoM{8;+ zPxhZ6*Svz5(-I6)ySA@tu&QRz?^U%`oml4og@zcMvF7>8HZHw#?AaHA)SYO5Q1_y{ z4`g{&pbYk*tve#1y=gPJm{b=V8Tr;0+jSESAD(h;*+@H{Hgb)Wsj>RfmlQc;7A)Z{ z;m7a2kC+1@1R`*%6zX%w-8d_&Gna_#?sawG8qB$s>th-T->;ukKc2JA@2@(EfYd&t-|0i$2wsgOe=(TCZtxL%NabPpXoLme0(#Xr`G4k;=ml1) zJ9X3a|4M1w%zaZC4+P`8WOY$?o89;x9`xD7R6RqbQSlR1B@WVf;WbPj+VEGHX>>P7 z!S@~m7aH7<^$e@{m*GKeudN|sht0*q8GL;_{hj%NX9hp!&So2oS@q2Vz0e{dYclpI zT@XzsX{sjED;{&VDFX>JyG z4w3+Lar)2{;t*(pCZSz_WY`hx{vtZ}IQyUc5(5eZrRaFn^8b6dUSei=NaGA}3CgSe zemY`uP@Chs_QrkDYv!`y#x~b0&DiUwF3(LkRMKs4%Yxf&BUN8?D-0^}H&FxUJ<9Y? zIh(OOZgOL{P-q{ncq3Q6*L{N2U2~aV7fy74HxPte1GGLl39cAOjDjIF$VLb$I0Z^8 z=3Q@o|JD~%Y%9m(#qH@#`e?3L8+>^G9@u(^6m7)a>_t3Kw=JP1-{S3BP$(K?9ay}! zo8|l4e6g?bScO{Py`qJ#U=5g`!V! zs&S>wG*i2YFw>qa2b{d!c4zp&)VBY+F=2!=p z`}>*kS)ALQ4FLwW-ro`DU-ekUe=;C38U^v`6mb9lK(I0a@XtRe1@T9gj)pa(bVaCs z!L)n#r%xsIOdCjE|J@iF_%Y`RyIYIpz1q9Nq3yUnY?Isvj;Gkj9rM2ERcW(r#=w@- zmxA+70x-HOkaVZd!pmqV4pbHfx+0?5iS?k^kMHweH=NITVdv-6x>MTeRMyo=F>oAZ z2B!7B5dMoo(ASrYOF#iP4+#$X8EWf!HfMY7akIF?^T^K;C7=F7-YbWa@F4_Mi8h*v z=he;!1yRkvI|<^)-w@&#*gG@o4;+&JLr6jmw0K-=WHJq8T7E^P;7JKd7r8ebZ2{@nghfIV$mdiC*$ zHy%j;hydLe@_V0}Ou62^H+$Jn%GeMV(?9S=)HSX@7#Kz|wM%o)a^J-H&Lk_a*Y0!~ zI!r(wv;hOhwe{CWUBM;cp0T@KKaYn76ks_dUXS+r-pvG_FOtU=Vb3X&HoSA8q>hbl z-qzOrLsG6KoEF8(q^Sz72aR_L{+s`$cZfsIZ#CibU`mNs^<9;`FWhhb3|xDNb$box z$ap5YrgPrnpFEYX>>J3s(u60!00)DvP|YkFaRlTl2&(P;x-4j`zfw7V>3tX6Jhcj> z#1CEh`?@s5VV4!Io7l|l?G_aD2>nD|`URp&it&XyWL zNxRN4KNF>lhu^4e9b<)cqUy<4D~7x$JhU&0QJ!<{x_vQSY2f`m*y@b>Hc9k41;8j8 zt=JVcCuyQ-?uU({K2JhMyH5bAZZW}r0H1U|i$aTZNrm_B_@hW0wg<^dA?zd4A=zZ8(%3Bi$5l>VU;xTuDh=&9+(?r(Te@6P(V-j@Uu#=Z_hgR$*2 zE_xe<&WWS1Hp+t}6;@`Xeehl?!N>b2irkRUI$yTa6(jjiG{)k8Ny`+z^&h@*#l7=C zKje0Jx_-ru8?VNWog8?f`t3tm`*u;RJN})83$#Cs`+09*L4l4V=tD@re$Bu_5+<7v zPdiffxg+Wv09^?`g_$Fv`790_D`~P4=L;T73>;U}L%dzabb)`L=c{uQS%wF5<^S>+ zlgOQu+O5#T;o%`EoRt+!Kkl>DdmFAm=f@;?5sj)RZ1_|P55}drBwaw?D}a6v2LO{G zfcRq6QZE0+fF()N6LaY!RbIPO-_x6bffw22--*x2Fzh+K;~6GL#YK=s)Va4Dk3N}4 z#R-vR(r>TE{f3%%eSNy8Z|{wYf$v$Tjv#gp#~yyRkyMhzs83_c7+O!*?Lm8WI~#B^ z(gDV++sg=zGNp>p08Q zrOk4ANMiFagSCL#lTooYnXXgv)`Kz+NrykrU9>^n$87b_!uqsN?7{C*Y0`d~lMjv= z>nVOCKaGf#zCJrxbY3AK)gxwc?Yy)xMFSy1P|({DMy^4qn)nyQd@=?j7+6&nJ|wu? z@8~vU=T7jxSiDEuh(6uZtS{i5d=KWicEccHqr1Bpkox6pl3!+2*6Q8&6!)vw_bB}+ zb9#Jc91?mrjkp+qtkZ-iw;lo2G7m@lvwwk>7Q_WWN3(IX zrm`ajX2SGeyQOE|k-a~(==AmLSEV0*wWqy;NdWW5`l>2v^BbFR_-u|JbZV<#Z)#Jv{eo6uA)yIKgPTzM*n;XNkbL9P{;w2E@LSOGyOK=(h?c8^FIB`X|-Mb zmhPK#)8gi58Fq`I;+v-uv;IdNw=1xj!fnjd2!>=hZM?!DRQhnUmHcMj9!v_3$=uKT1|k_|F#>Sk#-rml-^#mU>HRL}}ZE6=IOj`^bm)HuLJj|xFfU?dx7 zG)571+V%Q3Vwrv$hD=uVkkA=zu0AD!WuTEivgmxBZ=8>9joLU@7f|!Hfrp6;W7ykb z35Gq5XGDo~W*MZ2$mrIPo(Nkj|B!dgJ3yAO%#?@*RuVWL-^D6KMIiHHP&=u3s8*Ym}Cq3y&}$Dq2@|CUAPl5*OPCo%?j?wgitR#nTQSC7A8Mh zV-F>sNTqMgFOr5C{h;g6Na?aKYNg+Gqhza?^J%$Mx=%1ZV%G1$?vNNwlel@gntnQp zOF$e%5*46H7nbl7LHBZyy*MK_u*Ct<{Tu-;G_vG}1#?gZ?KwFQv9>2h)k&tYPbXH8 zJBWFWwj;G%c#AW>_oewG(y=BHYy>Ot;dP;|%eS<8S8v7nvR`{u5@h7`))NcpQfT%q zkP3vbtPbaxaDHui#dsd>bE?h_l-z9}r3RzZH4x$%S|Hx`v$jz3ALGwS(S_aC8y;%0 zM!EL27|xjI;+rzyQ)Q6NnPx<$`NyVg*UmZhMIoEP5eIaEHTe7zfCmC-oX+2TLKcYQ zpb0d&MMXn%upZH+VMNrOR)ed%yfP|_#Wh%3NJCMP1dA%{4WjqmHJ z?uVvQdvnh;aeH9)jSEHJDIIfvQZ|j2MI9nbA{t#`?MvEXAf7@|>2k+9eA^fi5tCy4 z5~m~TJ(_0e?kG%qiV=|~)ws>?0rYr8 zFFq-izHnoxpSH8;-Qy|BCC$Ffrg2X$ybUW#V6mz4q^nSZ5gZvsy;#~8T9M=qzFS`n zwTFo;-0*=E&_gxtMxV&3?u(}aH4VP?`jGN;>7hJaV2um6%BZjmbTq-7er#p4Y$IWD z7o(wNjvsKo=yN>;?~3Gy2owJv9zIOI(@NC$J%X$0o|nf7 zkl?$WVK6_wdcpP@D82O=RM;@hpKJZBGhkrgO_WA~G(!qNiuUng4f3;%=$qxfSU4E> zY(h5KNLh@L1GD?9naBF?2Ww@-;-4VS%K1?kA6SiUUI>yXp3+&kX7JSgE%#sZuvipl zo}LwoI==6jy~Z#59DTn>+PVrK46;(l)2mNB7BaiZG9I8Z%V6$%uE!HPoME?l_&-h%`Z3&{gOAdQ-@7ok6g|g2d)`i7JB!`vi(2Or| zBomH)$)>4D;&69Ftos`z=9LjK3Ob;wq+ZGYB02l4S`v~*zPf++AwMYVq)`ynHFPzJ zrA=?~=mlNN;oCEOzexMuT*CtKkW**2NVcbie>)Ca_i~Ogl6^GEe)~MCuTYc}Tb1xt z1vfBAYNxrMrOcT$&42AAr@}^l9Xc% z#z@zskcEGf6Xn{Gq07MgI?T5YRO}u@7Vzo;3~Y%TiJovVrktnV)spAN)*p(-rsqHqXbUE(<}f-=L{d(L|42&=NtJjm1xj22_yQDoLDO>_GR ztJ$helDKjQI&(UIx*Jry+}~D z>$?0JhxOeig5Z|#O8>&98)Hy!pTt7dEf^91gFJ+A-RB3U9mccoY$$=DeV-HV?Y2nm zF{pOBr6%whweVh)*i=f=ygc1_T-@;Xk;xjtM->~+-mv8VA9+Xbo>k*%EHzssyOxKuI5-x&%#b?_r7KfhGONS8EbO$`uT zWcgvHkk?9D2CYNQ?Kywx*^+1y@AGR@eSi^1A zKNXwR@FuphIzqjt9;bc-)!8>5;M6A(Cd~Id6%YB(&0ija23oO)~iPz9G z3p{lYX%3Bc8LqH+h9{ssUd4iD-SET>Q{aTVS|$@fdwagjlNKgqgHfVAufPJ zKG`R~#694LY=oD>&J`Bna(3;;5j6JEFUFo9&&m7>=(Ka+7;LtmhA8re}^B%$utu`JMaTm zt0*Q$t`J;ubGqm~&pk29tL32?tOk?)@G~-slnkpy9%Jbp{;ZXKqB=$k;o-;dABfr# zG*Erb_%}wii|2I)A0nZ|a>dkNLrYC*8J~$(d(E5Ye3aWw+MA>*7d`o!cp=A z$NoGTpVo49^{7%kLVkCDWI%(?yiqvrGwQG+t9;Ur1wUslP$J3_b?YE^?Ioq{YrbbIH)KLkaoo%VRD=^c5??i#!H%j64#u8zas5q7q8W91d9#A)&id zt8RoD>I{dGKbj3w#t4+;Xis8kY6|lv+cRfChFk-TP^(p?*(40ZC$2$fmWS0dZ4DfB z3B7jyZCcoU!d?|!H(?dqO+uWLB3 zn|3lUd7PISGTnU7fm`k3E#*t$JCUpH;#+IPi-KVmw_&?9a_^DOntlSBd2_OENS3Qz zYK`P){+?E&%2XVQ2}_CmEZWu=6(BblLt^1QQsXTkl( z2kipXvoEm3D)`HevFUEHQKO-GCDND0*S7kcuPw?4%RfQRWZKl&4r@aJ~oy7llgdni+-($vFJi3YNk{m(Lm`I z==;dag*Z0LxR12zGd4FUkqqV)LR5}Q{6VSF@$7AF)=FpLG|ev)yEWZ%f*q)QrQ~kI zuOwY0N=SP{U&7R?dWpKW<=!`fQYj`$=Ls-OYC~a6Fj0S&n9i?~M3zI7IwET65?warbr9?b+Hjz~O%iVo{ZO zsDhu+hdg0R!6go{N=0HY&G4yaz+Xowz0&er%+mOr<**g;Wi4XUo&p}dX`zG`GP-HR ze;&B-a^N!HISX#L8XSo?^yWHa+psl*NczbnnT`xf0iA)>2CZa(FP9nh6k~V^7<3+8 zOqOBYvlCN=;&C1-N5e@?LcH5DzYN1@B~64Xv=_&V4o0(*g5XDCME#IWOA2$NJA|l3 zm@mLxd*P(359f*rX{ps~;PgXsq_d`;p@g_2GLwcdl30>0jOIEn)&8mG0rgvx0;N6H zA`EPEel{O_{+OqZGY)12Fey`c(pConY?Lf;K+yBMSdGr@>j?N6!YH<{hNI2lBt(R* zdZ}g}Pm+~bF8C{KAx*F)XU_nVF%?aemHk^ZXEYJs%=;y zu`KL4v|2X?KkJrRpsf~Xvw2{&&o#rVhl>v1dSxBI)E?f|Yud$fysP5;e?fcA}VD!Ob>c52;f<#}5rx_#zf6N-5MT zxaM@29*?;qL&|9-FV9dv>!M_2{8NF4Kn5c~X>67%A{n{aWoYK9qoLe9T@N|8pb=6A zD&y`UDT&5-zAqEgpdyOHvpdf8fi(bky}FUsu~GF5P+(`JwR8Jh=)d62@LEV{Nj_(N zN!osEwL%edKv5vd*`znxTg}78js#uboQ$@@jDqc*jHq;3 zhn;#Mnry;gJH|w&11odW>CC?^NA$I1dA>qkR;!Od@@#|_J+;M7myzqS60g*HAA5gd zS)LseBe@6*;YY)UEu2iK@On8%c|{|BKV$eGZv-1Yit1?r^mySp*O&kzKyYX zFl49=cynk--PU^yMt|C>UQ}#$rnPzL#ohIp+9r)}(%I6epdC;ZM+vd3tj6t)77*=7 zv7K2aTopR2c?l;eJFqS56H+GwVr4J%4{kikB*K5Nn0Hja_9o4&=CG#gM639^A{f^{ zs`wrSoR8?H4OZ<0^(@(|Q9!X{09jD8S{FZOFUM!e&jS8G=UWJ*LTM#Y4*wk>;uufW zb@;<3H^Ti`MJqC&6hDAeX&Fcs8A0NJ+!{X7sg(knO z+wI~6f_|Jdlx|Kb2n@bD501I}Q)+6vtyH!1xgw!ak#j>y4$ zl__%BeRqBnuIlb&ctXJWQ@z!WzQ?+YrTnA2!{gl1no?M!j0XUEVQ=L&=TZ?DOE>Y( zoNovj0$JMm{;M_uiXHLz!6J72(CddoL6iI;aBwP4Q?`EUn;p!AT1m&wof_}`wXlI& zhv41RkSepm-|I(v72#hjSaYFjZuv+mTW{V=YK3C#k}f+thkf#(Z)wE;^2^((G^Ext zRx%@hrlIUZU=#Y7>PZc=Di2l@VQ-^IOXIKasa3U(NT@l#<22Wn0E0142)v%R5sx2h zvOB4dNyK-+i_NQo=%g*gnyQSkQ9U9d+|8&LpgOXHKo#KcND34LZO<}V-jHPL6J0M7 z{hGM{&gh?sID-GYGyha)g?_38+N)EmhH{dCTOg>xTo~}4yoy3|Zt=7HCq48>z@g~< zfub5p$^RuR=9sqXdSFGXsrSu>KY+alpUfElmPCwd!oq_|K+{;W&>08~i$ zyz?F1qifOttS>|)zO_H~jQTB20hy%6BS)H$2s;NevmjTsI^D&Ny+91}8}KPEJvFX~ z0O>atFk!04dxXNwy;_NhN*S(PjCqOD(jes$fY+N5VeMZgO?h!))Kg1=;H33if5&G= zFEgP^yLN;viP%pr@2#u;&*3c%wpI!u15vtoA%vR|_T({NdI-uS|`t8~k0K8KL;!bME+&=5;P4Q%;UZ@lfTn#^+^y!I>IS z&mjY2+Q-i-9+xHR`GCJsnx&&%G`F@F$kIH?KVM~wewB9q(v3G)H$HNU<0HO1V}lcN z$J32YWr3mzp--F3wpgSUx~ z)oZ}lK${|OWys9!__}1KR3pwS!2H7L zM2t!7xW7Vh1+K22-6hGF%uF){hBcp%_dB5OWF7F^O|u zvTdn6zfDS83-B@-^6ATI1KUeC;q)(!`TyGBLZes-421;)>=9rf#kW2h$J~u?9n86$ z=0(Z<{Bo3mUbTI70pIABSpvzb676+g_~x9_HfI&R^}Da|JuuY`z}w>{ z18BVEaQaBf>QS=mlG$fG3%#RY__u)q@=FUis0&@whH2&tqvUkso@x{GY3Y?WN&-Jc zhB@UIKzTk?Up0W8^YsLZdTyJ45b3g5ihY7)qs|CpM&FrrW@tfU;199)usdt-L8sPn z8^jF8ZH%WA<1{z%)FR_HWCDCK?QOg{e|kz_=lv_N_$v-ah4r`m-JY;P(3A&qrN>1? zW_uW_jLy}9iKhN*Wf|lZIVs2{y7Ic(tShKUk1%Wz%*LciiNe-j-3bFfg(%Cp4m?1qe;GARaPf?W2CI?edDXrLtNIG|0j&`0u+5Y9UiHq06_;2=quvtiUIS zVs0zlIm!wpk!Dn1!s(A*bVb6y@YQ(Ndt84Ni0Gs^Mbnrf4Rn-ai~gi~!vZKW=1MGS zYnjp_hM8f@Ypc{pDABau8C?-UUQLVMCtLmEA?`3@%x(SZb!d>`xa(>l!4N&4LHJ!W zBFx&Xampjxx$%uNU)(bK-%tWB>o0n52!zWUm&tN|-`4Z6lqLG`$#bs;+{b%=(bC7p zDv1f{tkzWQCiDe#6ib#?Q6q(aOdOhUlm@0hftbVBUei*xhFmf|S}50L8zHemzDVAv5yRVwB`u5TuZ4cR&47Orlu7%;Z zGY0;7`(8$rtF0%{3r?ky4s6Kqb;a9K9mUVQRqr^2EbWtrlDd^|-^wE#!u=~I#}ENr z*GfDaGU5RMEoFhFrIj?43NVk1x{q|erIRbtb3>*? z1pag#2& zi->utlCCg2P~pyy_F29D;`nA$sOygf+s9OlWry;ez6sxgL1i;jU6Kzquer1{iC2g~ z2TFqme=mJ(+A>6-YA;t`@XYLMi_}>z0$7xT6{JE+JdCv5#H^cB3MIv>MBBF#3y;88 z{vl+c$H9&`ei24lV4U`}I-c)L4<9u?Mz))1Rtn&?7#s24;NYck@3ml{akXR- z&tJ)No6SsVJ8b@hn z@h?E(3c+GA{k7UaU7E`RaMZ1||2m1VAAw+m2vN%i-(ySquxZCDEY(M=(J!XTo|74` zQn$rNlrAcvfzZ2Gt4Kum%ow1?<8$uMaX^%h?Gn2O`n~6!$z!A4fjI3#k3>OFwn@VG z(C5kzl`R59VM)5QX`RLs43cuhq37Bg)>dl)8}|fU+Ni8TQgn(a96wZYoSqt0t} z&(iTs$Zzb%r)aEP5+MfVnVXj5ao16&$~Lb<(Hn7pQc65$Ep;)7=nqYZ0(@tq>Wk;h z>Bf&%Cm6Uyx+S`?Rfbdx>_h;~`=EY$S#+Kq7Jv*L!WhEPoB^C^y_XE3mt9yXEVF|t zvS53r5Nm$TyE#_1WR4HH-dU>If+JRaMC@!BKV@p$&we?oueJc1)Ro)KTbS3>^Sc}j z0M}5mYHpGdSexCJWM)c^jxts5_Ygeb=eL;KLsde7^1(@a#n_>W81D#GCz6WRIg>M9TI6+aD5U!bbzfqjWG2o_JP zs+yz%@=TM|TUzalzV>XkwVTd228SSXeU?PDR3a2Hx_*3lL%ithd0RGyI`k;1jfKf4 z>_@sMXPyyRNWeky9rO_`{MwD{B#g2v(rPCHYb{a*O|!{u2cjD0HDr)arUIEVi(yW1 zsDpqus`;7Ip=G=om^57CPMpCWbcxbWu*^lU^6an6WVzE&N4asAl>mk^ay}{JMc#L2 zPKS>5e5+i~H`bW}LUqibZDNIHa~%N;mRZr_tA{VwiR;&VXiW<2#NttJO>OZo@!w z`HHx>sbJlR#q{GpTSOrNBz_XykQKK#T3;c^VnLu%ZhF6%X`4s6v$SBWZ}4>t^`knt zpB{@*}C))hlc3$L zgh%Z429EXUq=wW%pz^j>{5Q!<)9z0+{~kZp)EsF@Qxfdy;^;BafVhkm362{v-H(jq zDPtI*D?Ya0vK!f=;$Ac32{P{NAUINItEa}jtk_ft>HP-#hIb*J!mAaqJe-t9Oz>9< z-K0bm4MlTY7}i|uj?dwx^<4<_q=BW=Vf`s}&7Tc1pE@w7wZ9jO?tKART@!u|494(F z0In>N$-;ym)|w(swf#pqhI+b+`k7$R7*Wvmz6ZceZ0R!Te9ItLEKr1G?e=M~TY=#- zKPlVzS-LBLLXsrATLy!c>B1ZXuad9d1qL4)$U4?s*`eB8M?}343pSru4)i11X9E8S zZQCAh76^snLXJ0y5FTccY3kuiUWFZ>=Fh`)aF>h0cF^o45N0^6}XQWvz(w@N7FMtT;i1PZo4 z1Ev7@qcgjM7K&gAT~zhlob1P&y!i4&IAj?m<59NxcXUYvegW_9s2NI{ZNv}(7eG)H zut2Jfu<~q;Vqu4t5jRdsF&l3ey`9n-=AZZVuHcmL_wXfI%Fe_xiU2 zEO6>TndERcRC<3F^`0JK2}!t(#PmLa%a|D$0Gmx}wKm&LiR6lAN|&@K&19cirLDV92@?;Pifvd2wMfK^VO7GG3-28Dk1D$sN48j(lsg8G943Hqyq|H+wJI%s<;5bs3P`m$@Ns*5ZlM9*i!-H@6G+< z(Qm{KZA&kGFNc{|@p&?sacwa?`gzw4w`*v^aoZ8B>CX!ST%+~;=#Q_o|74Z zbgb{p6h++od)!f}Zy0Gzub-Rl*Mob^8wh%qo!GW*9UoEXNZnohmSk^?7wlQ~{{}&I zI89!${l#tS+-ZSj5gxpb%E`=ygLzpz76owDU-==#`+8PjPAKlE+W3sD$eTNynAqwg zt$U0hWWojfb^urMI69;MwHVf2AJNB;Rjq?YD&4|^K);X}O;!svuaElMWP=kN#qf)~}-!Ck$>MtMhX+DI7tDIuf z4yn_Y#EABLz_@JTC)0=$QQ=T8@UXmEw*}CU;=SAXTyK~u%bbjBN2R;B;>1~!k_)d9 zQw5uZ0bsXkv3`A*mpC8bLaQDXq!CAm2lTC>hI3r6^v_i)03w2p&?F^47B@j}0N{oA z$sE#^Jsz-ZbEbw8!mPIIHffEsOrxp1dWn-7h2S+MPx{Ln<{uFwS*KaHyQIXt^uUAa zCgrSFBg4Y*$)Jd=_xRF_hL=INS6G0V=(FPJm#57cL(4MFo3N&8W+jT@;>vIgsJEo< zxNFZ0?o}Y0)_xPS0hfyFOy35yIf~m6=%`bHAZ6}TRHjy)D(}NJB9}V+w_*kXsnqo$ z5xAE5F+LDHY|dbcdaD9E$5RXSSObdo$G;;n!u5q?CKsRGR0`TOTO8+;7*EoI7dG5( z4}gZ1BlPI+7Y!m!q0GnKs#IxgD~167g2wB*8e8zH(c_@6cfi6Q}9By!cy$Tr7p{6ZVMRq1lXET!?2e~o97+JMeyt)Rh zKMU$bHZ!bpz6;p=mi>s9uLxZUM**x}b114FK)Xet(DfTzw9)q79<*Md#ODJ0s*e~i z4Bw3K(W7Uqb`#evtb(ZO{(5a>5TWjste*_MizCmARz@|BcCRW83l*@LO;%P~kCqX- zifv6Y&arSNGmMYikj+P7j^QT697_FMY0;H%(eMXKymSP3=-h8Pu7LXYF$v%#rHTj!KiBXH!3plO*#OLIs*tA8od0ln?&r;RELmNiG7U61HhU@-!X% zNB@4u`~GfPSaN6JwO)07HJnYtN#f7NpWll-1ekpx1JmPcGy-myHj4!6457P3m>AZG zrLfL!l0;3AImkI&l?}63#>Otlbn$vxKj4Bj=nJk`RbhU_>6e`k`FWf}MaDR}DTYzoj;b$TJ8l-}H2HdV@#)zjUUeH{ zwGEjYprxQ{sASuQihT#!)^4y8%;hf8x>K_1WV$?Xs(8|NF=TQ2^%HD zc9SzQ!GrBdbtD4~%Gx>8@~_*H2KnYG)XNo91l`&7^8HfaN~C|!ePP8l+CwG6nodHjbHvneG3pPq|_2yvb(W}dV7 z%#&2v8RX34dpK>HO;1fZH*Ie%w{WS-XqZ{>?P<-T{`dec&?II}YIxF(0?TQQvQ*dZ zbL%%KUs`6C(6vC0vl?=55dDbVmE<6uF!ZaQ!LfoP|0Cgl!p+t@K+D~pXR zt|HLQk!Q{I)Z)V3`T6IA#>YFEfM!FJ%RS+7nR=*pWEE5!t)RCL>2EHy~(F+MSGsz>v(PvhQXx-(1uSnV| zsd}3x-#XR(L7N%4D_U$<6*g)x?YS0nE%Y~l!C6r%KNLT>^d8^~2jpb#@YigS@cTTj9iceU})wp>j?erZKaG-@4)_ghc z4)ml9RWY5x2IWS2pZ7}OT$-;?Dc8Dulk>Sl`t7K;Nj=NBQbvA{Ed*&w;nv*riI(-J zXk*Xf6(W=x^{uUShwxQ)Q}|o=RF?c#JDVQ}rOn9|`h1|oOEX0Ma;(A;Wl8xb0OiqgHPw%gDO(%B3GzSJXHsraMYR@5k zOF*(Ydz2yMi|T0&$;zWeZnREQ)ym4*KWHjHWwCsOWDGN|tlr4;^whF*eULUHd*s`g zWK>bnFF))f!*B`5$C^r$W@ICC$i|xdkL^yH57RvOVEva%yVGu*HeanR-NSe_nNgnf zrvqHm=s;iVOI#kcmH8LDQ{{&wo$T&_xJ7m9mf&~MrTA)IAqQyP(*MHRIn67i?=q`?=7*YaB*RQ8=&KD5u*=$p%^Og1!yH|k`1QW z1WLi#X&0d3Y!rq)7}9X!mPnokJ8eV}JB;L3V_0nU^5~T3(pdj64Lu}LHyhE%nT>Ef ztr=l!yp_vby@7U8tR$c<-Hu#$ZP+hAuvyyp4C~4}|MOb_^gK6(1(irEa6c#oWRBlc zuyligFsvsI3SYrM!@pUHg`9@U^}lGN#|t3Ikdt+SmJgwEah}sILCIH!>kCt4YQp}M zIALm{XbP&0#QcM>uduo)$!xTd{ODU+ZlY+mA-+BD{}aCd1o2cn(1+9TdtmB6kpZmf ze=ndtDM#zOyg*Ij|33HM7d6FzKKH43nD&2dk^g&JX%=7%iEnHy8UEwQ`q#q$@81IN z2hEpOs+8q_WTpT8(ST4@0=uj?TD6IIvY`2@xVtNAN-^&o)ytO^!#N__P2~pLP0IF( zvVTgw)Im$rM)h`wjhwsF4Y4j}lPc2)XWfqJqS2!f>O^Tt@P5MaJNARU{RHKwZfhjg#30w5a`(5NGd=D@=S#H&K-051BzID;A5=I;;V-Dxu zCC3Hq;ADygR@Lj|gD_ytpMl=4;v^E>N1?lf=D|7=rW-Wbx6ehIf&}-}H*5swKXodr zZP*09+YBrNv7OkiD0m(EjNL*%dUT;pv}ouXIJTioG}|Zhf9T!Se`db3#(cb?!uaBs zkCZ5LH(@j_m&s29`bda_O33YVXRI`{S7!KbKFUD!DnVrPxA2sqatHX&CM z*M*SPS5^DPmbY2AP&dbW0R$dd3kqhp1|*MCT+BBL$pt_{L15v3Mw$A3unyK) zI>$etxHg|>)TZ}P+FL~weN80XA3gA?1WE*4R}0 z<;f5=x}%vhu!t3JYc-QfU~@02oSaij>S5KOTkb75*TwGkJAY@A2S@%k zJx^0s+^|VAhWaY<7Uo6+Yk2bJ+ou(u|NI6BTZn8Yae7rn>~kx)5v zvTotw^1mgjw*8t{c-0|xq!$C(H>kD!NV4}$^nE@kHG9XkxH2_yaHO&U@oGo~P5RY* z>8P@x7t}@Z8U|GAj4Bbx?5`B1d$6C=4fH2>bm_22*Ll zJB~Ut^bH#YH7#oDEPp=9Wh$(F7|m8!1d>wPeBoEP_JM2GgPjxT-d+SL!qJL>bpRu@oxIpziSu0?;9duM$l@`$A68j7r89PywLp~4WJl| zYN;69Ws%-XQvit@)qnFMgNMy+oYH(eyUbCuD&<_Gq^5FrxSnc;?K$%J7qANm^y!n{ z14)}ps~*JYAORV>% zfT&MW*N^X$9i{tI?-76+P+v<<8%kX55`5+hj zRW~dFe=V=iH*GR%lF0n|M;}H-K^FrbB|$4~W!V`LWw9?S>OjkwOllNb_eyV=EZ72Oc8srmM6o?tq2CTIA>R1+E{9{vP+^Py$Uf@)TtSBW*MUN%X!BMOjM#BA?GR4BN(emwl_LLvATwLR(a6{dV>Ou`Y z@iRjGy_RWe$EVN>n+UUn#1AA26+YaVJ3ry-Vfcy}!&B_FT@aFs--UiLg&#sm$ESh$ z!2gtVXFV)(vYA8;?1MAeX;K_LpK;P@x3SMaX;vh+_VV+_r5Ha#jB0O{AV!%dI-f#( z*iHIlC)4KgXPzK6mqKtICNC6)A>QQ2{mU~+TpsD3cZXB7G&rG=#z0V(&$~a@biNdS z-k0H0k_u!=+?l?aH4vDao9zWVRG_EzbK<%AJ5M3I2PAWmdILhHkBW|;gs|QLdmq@(IzDt<7K7hu34?(R^ZZZKazpdY zBp(w~wgv`Oe7pXQsP&@fS1A41<^?c``S{?l*s?Ab%3<2HHSKc9tuj=>p=Cxf{Z zH=f>hQZv33cS1@~S4{z9ocPcQ&jaLd5*!M1PBiG&FUxr2AOe9+LUjP;IJ*rcUY$RNkk`x6wO>c_u%)84SMxK`y0W7%Qv*_JJ@(yaWy~(V~K7BsqW*l@u*~ z6^8|~=AZbV6LMeP*%d?5+?}ka{f`gdh_w z%nPkqAQnCBT^5$baF|L+??4!**0)e#AbleY5pw_nK;k5z)OJNgwVrAqCAT(~K_eb% zx}wr(CHntQ3lK!#$jtn9Lz+WlNu-Ha(DC)%>Td*6IO@rc!rcFIeO5?v{mCxF(^*h3sN@J|5nNU4^v-) z57>~Siy{mp|D%cjIMg8J=m%-)!+{~M$WLyKMHcFAnwpQ|GU!vGmxvG)Fy3fxG8)Du zlsdy5IO{b2kN*-3Zp~ioo1VDWi>uX)z}cupm5)zD zpDxP0Ru;Rp9_KpU7nNrWoy?DV?b6nx{6?P}nvlQ->((CL_d7}$9~%rRj4(r)+V3;8 z+=8I=Rh2iAOwx70{mHb0@nLFR`H%wQzY{&33zhqYX|v)V9 zV75C_^eP&gNl+}A(}IfKJC*6KgztSkQ+T^sx!0BK{0+8lGpQ9{r9;?G8QNr76`Fiisvje7ZM@I@`6d0ZVFNt!pg@7J^S1l z{%bd~)!E~SG8b}fekso;XL_qjQk&bbMiRjzuH(LXljgkKAa9oBd?I%hws^F&?KV%y@V{>x&}wGlwyeN2X`8k2@{70Qo; zz&>EunlxRI6b?jz2tNBoG2G-bq?WWifs5ih!*0@3@Z{DLQj|CM?6CF;6XdeW?ypFm z;+ci++k=|!*HPJQ4*AU|a^q4t?_cAe-Kd`a)sDD!tVLig@PC?r3dGQ~+c;!fj}(}9 z4kT&1@#BAxo*tJJ>b+xbDbn}2t>uSiDZGHXkZK867sa9x2Ld_Xu%Kd)vNQ~AH&3ij z;+ck1a%F6?4;>6oaXwG-@!MDsaGL1*F60-P!W}h*B%Ur1y6r@R>ka#7eFRqN)jihU zS>yRlWw`MGcmNmNL=LZ9!s&*<+a+Tcj0EpwJfnnwtKm`?qu#)t!~24v51(L`C60x# zXh=Xedh?3Z6|rcjq1{lls3@kyqz0lO6>;d3u-;(*OxdSOtEI`bBl}_E@;`zNwQE!Z z$@Ohd{%&W+{did$Oc$t_z4sYgA$e{Qb7qV3J`cU+w#rnkpCKrLUzfsNq@P>)z)v zL%z>~w?Ih4bloSFyW{7?c7tRL)#z_4i<|B6tF*Is3>4Si{c1MmAG2hVz&_730y>2* zDc490oN8DwCIl8&30UI~zzkxuIA&0)X-9P#iqk6Fdg7NKv~yT6D1xbK$O0;LeJJ4d2qIRxLD~yi;|flOPxLO<(}wj zJExRj#@wnsK3hBw@gZrtOlKxRSkd-ybl9rVb~dy;_L)BV9$n-@#9)E0A?=+kAbz=9 z6CiKe409jEkC@SPXJ>ib(&L=cwIJU`B%AFPuv2o8Iqlaj{U__^Jpxj|P*9lAnujto%g ziUU@t5Ee5)GV?DqVzK%>b#gcSdYN7Kt?Ol%%zes}mn@Yh-=OZ%a8A~~o2a|uCdH}q2nQ+u+<|1|YKUbK)e{&01y|ioyT$qf-cszdGhFUGe?qH< zU$59Y9vRhrGThgemwsrX|Afs^hCJ?UxHMzY|f#{(Vfz=KK*CT|@ozPvfn zBw1nlm#2aP1D@);Gu%LEHI^8vex`B@UmzPrfmK$wCr5sO=- zo9}itZ}jht)XQDV9QS7>-AhJPF9mlYGu|0#Id*G~dvTjUq%sjWSKD;_@pj2Btmtw7 zPtE2G)WRk_`1=WT3QS3C3hEYfERIIW$1|D4XlU&N5YrHN7T3fKh_~;fYd_EF>e`U< zm$%^T_z!j2c#~e~c!k_=M5W~PNomvnmF^3A6PnOXIMlov$_}>jJuB3J8-7FZXtT-%Ihe_h7z<R-jN7k^sk6xn zov)YSVE_L7Ve|n^EiE}@V>76QM_O)vjq7yNp`_>UQ750Y^ve+{4JH-T&a7%4wOqMJ zR`C3Y& z%KFX26bVh5>i+5(3dZqIjOT3GP7R!+jbaWiVU?)f>C8=c7ja^!xOEoSC87!6NAndZ ze7*-{_}r@F_NTP$CnGrRk4h%LwW8BRpPB3uU95w5N z11do(g=@TlCMK`+)^tB5?`FDB*HL$?W_a)T^STsp=lfhNG52Qp`26Zm<)nyz4Y!AC za~Fd)@47JUl-TOUcWU8saIeYaAoZn1*DaL&>)c&8TgM@r37u-){4(*$%lL2 z<#c54sA0`JU^2R;>Du?6-?Vst!UvJ$D4OqyA>e9uBx7wkF7I)xm)GL9fBJ%Hp`rH& zHCkMNw};w3uiT>dic{U{dZ_U%h8=s2wSY?OnRT7gX&@G+e1%TDVMV zq#+shl@VwEbyPA!5EZE&N%M$o8->4?EiCc{y?f)(=-OtWnt(fypl%*3)1ekM4lI_+ zMoBO((-*{LLMZ0P-1J}#wH7}qSu=sRX82gBHAU$7i;-b?VG5C}*reequ8IZXQ_6f! z9`o$$>0q2Stu%SW5D#BX`&`d@@Y3ic#`LQ#upJXG5VgXyuZm|lrKX74Ed2^-Kx2P6 zi{RJRgH4bo1|CCMo6zd{{+u*|b>;l$<+LZpvv+zsOFkP!NBoFs8{h9R$}$_5mLeYI z4jVR)1RE<3O(41mrI<*3^K(p13f{oZ>ETmFD90Q9;?;6=W(+CZQErQ*-kv))_1mDov4J z14eyrw~GmtmG2jG=Npe^H;xQzzxTwmqYM7>&w0~sS-z1&o!(_GiSnON{3lus$XldK z%Y~N~izS}R?mYTeSw@TV#&81Tkbp}J9j_@b+eKhF&qz&8VhB9EQa8R>tX+p^-<5Ve z05?ikLxengOR|KP6Lo(b`3j`E2_f__^WPTkU!??S&#(Is+SDZ7Z(?-y?ZQn(QVqll z)bo*4rU;Y4+?@UyN`w8O-DMmwTr*C&WMt^1Wfox95Wjc#o&Ir`=s<61A!WP`{pIsW z=EWzO?{gbdhp!%C1U(-FW;QYxlws^cpZu)nnv3|)7qLgnC(0k(F?d#{%9nUWwH|)d zJsb&T#Q%{K9NkcmdKySCm$4fwvgpVm$x)J@%z=hJpfj%6{eRCmjH31Iy1#67rP`02 z!Xjx(M5|`MyTYa((j#ozLh<6Bc!BTJs!$XB@$T4XUU-g5lbGbBak}ACA|jP$v_TBx zWpPkXeAXcUq&WSgQQxwFi!Gc7171~_Cy4tEfrxI;$u_ZAS=hI`K3c1>5*AJQKm-m0E2HYGflE7!n?=OY9za+%QYeMykf z!Y2yOiSwo9V!grqCR?rN{N!@?n!@99PKSx-Q0qpA2t6d)qWswr9ksT5{rqFgT~mxv ziY4+`a95&b-A2n*H|p9_v|=%T-!uL4j=xlz`;BTbjCopi@w`co74!G~+VNE>uiK4K zDZyMmrFk{J_Br`=`0x@vos4s4RZePO2-v)Z?+8nI`yMq2N+FF-&Pc+jo}Ck0J?4Lg zM&2DErNQ{<3i@1O->eT{7!4NkG?RzoF~);9fFiN$6|(tcW70i~_sk&Vi|tdDOYg(f z!p7RFo_T52!1_syfxdJ3tS^WC=SDuqLz)!pmby7+JUjj5>Oaj5-LDpsZD*N1)>pe6 z_ZF%v3QxV)#7CT2g|p*Si?|azE<=9QrolR9=*0LeTt@QW*3=>h+;+SpUcG0r{wcSs7Z76G@gZ>_}9aQX{j`y|Pn{_a#VB?FjqVz7N)7WolN>>gwIX533*yUyH$d zk`8wE29>I)n>=<6dqXlhHAQsxH*)4|CRZc^E>fa*G~`7g_Q?TRxZ@;F-Gq zZmm-`I$_=|6!)g7@6S;yij_uBV}`f$w-DA0pEo~XA$wgYQF7V|N#~kc+_Ar;W-Be| zt!Ar6IGp?5PS{%4jx5WbQT^fkmP6@~_e2>Z4sJjNX9C-G?NTu+@=-5kS}_7Zr}jn~Jaw~Ov9 zHsqb9Vpws;!bFPIE4K2c6ykk|xe*$Q5v#X^z_Oq2qIkl#y7jYT2yR6GEYxkR>1QRK zT(+sT(uY%A4=6HS_QE|q=r%TXroJWVb?g4%(Zl}`tY@`A)6dQ*+wRnofjQb%*=(jGwETT?B3GVp_zlJ%*Y2S|@!b z6zD8#FYJxmr0bgx$6N%RH+;>X)?5Tu8PG}}(Meo4f?6p`da_*j_wO;Lc^Yqs%TIKg zy;biI4N!Z}T|mAdiud}-ty2rscVvMgivpRckf0%Sur_`1+GRo-kNxFB8iW4gGjH^I zWn~Qb@2Bnzj->R9=u#}pTsdd_k&*8T%bbOFK;+NsRO7ftwpz`9R<2r2u#QUe z62CNNf7F!z%1vU4kZk2|4ES*2xM`F3!RtZgprzh8#YcPDh*6;6l6EHs3)s2_^#m1frS$4v;T~` zZ*QoX9K=u$Q=bu+bvzDcc`IrY9G?)9TsvLa@;a0b=1;xnoOUK>S23{Ng_BUAJ?4d{{kC}2?0&pEd^1qR2&x82 z{>grn4E9TLvggF6Ny1DUn=@Qmlm*3Ao-CRZMxpAO2Ia;LO)jSaCNkBp8^&I+In1Jk znAPYWyfIz+_<)SusF+k`Y(=eE>O=w`!+7_&NviHLb}_#mPRpg8`G_Z1omd4bFj(3u z>ghO06D@g6w*E9dquzb&YSGBm+W z26X3n8wm!J4DSM|mUk8%#mY|Qr@srjB@@yPYjEG+G~XYGPA~g3F>=MC+C0S!{jR!& z)Gkl`dg7B>^QcinPLoC&%%ZoVmjW!ybI@!wmn z+1dwXz$|!AQKZ@AigM16VLXPi&iLO=IhS`7vRjpJB&MM!z#$$`ai#fGDGym;6UkLO z?$t%3R`kRhx(JHMEgW(4=nWTpAL~lRFjDAT_qW*Cm3Ii?^3%WquJ9!Nsmp$aS1&eFyi*7+c zZ&7ULm*&CqVWMZ>1)hv{X0tRI@V(Kj=mpU>3!)b=<}{%}Kk+%02iWy!D%q6nYTp1a z%*lt4@~2YKd0`@tU2k@SN|_8cS&%iLD|oIo_V9|xYqHFpIOBx4@&=*U+Xdq(}O|q+rn&Ejoo?LCPRrib4b-#`z9arh1r{x;wTt3i$0n~yN6!w9x&H?YxLG5GOU9Y7Y6&dKNAV1)(E^$^^86rLSMD&K5T61(U zIY&{D4kDGusE&=5kL%|!c8PVol9U8S@k@#boi4u) zwVw#`bcNB7%8#8_5%9aA(Ac9`J;IgwQgfO#hi;7?$c3@UU5t&&dZ5@<7J$dq-eOs)3(|5XA_bOOhyU&hWj zc~YC`GQpP?k-!f=fW8s|YwWjZs2wUaWsWHorZ@!+?_0EQBnZW&K+Eq6K%E(_bs4x? zQ#UI65T2eJ5V#~d9#WKOs?qIgv1VMLKuE_SLb6itJ*eqf75RwupH2yQH>{3{ih&xtrC<5 zu`@D89oT~!gM&-@yirA%NWV$q#)HYxIz{mtVB_F_^_w51fy*&@F(wRw7Op_MhhS5o zOz^FP%?O$;LF3Ya!%KTmfa8MLWF$bd6(cO5=n(|lk-m+5f?n2BdMmmSWVYCtwBK^1 zQ*Yf6Btyuj{Gss}pAm*myz}E5UlIy_dRLR<{bl_2iuYuGv!GB`iO_u`CH_I-rrJy8 zGbr#>(V+9%$hK$qvTDatmdlJve&)biXaC_BavHZ?H2?XKxbfrtv(ev%&^l6x`BD|(N7XC9M3x1o@>)f3clQRk_n{o9bgRj#&DWE%{4dS%`RAA4m;Xa?{NE}0colDudMyy> z%i#oDOj>%XIUN+lq?0+Ay#itAw`f-y3r-_H#ZFHPY`X7AJl9`0kX2kR@JZw;^GY{Z zA1LDwOC?vE(S@hj28kC5=kcFF>j6&uJJ@V4huA!N8QPjFDyRk=bAoH0!a21-v6T(& zK=R1G(1vW%&MGhv9M5oyj`t(J1xMrO_=42~g(ENV{CWpoa-oN+U;<%_(jGe~Q3~sN zcHpwn7nNni>Vha?N-^Q^EBW`YRgH(cx}ryxJ9#p{TXL|unk7uP1VOFPm@SeRi1<_x&|lO1qmnvYXt>2^dG;^F{uS&4 zaz7(Zpai~y;cwiKf$ zH@?TQAoHUFucysrE9`UiOZh{U45)8qgkj@Bj`SUd^~HFnfV7Ng9?mg|S(p?sRyUF* zK8BJ>W0Zsp0?JMxTJ)QVwG#;SZWKSm?>rx@TOOR-xTrPDM?W)ABWH&~7XIcH2(W1q z^jGU2W3+J%{=0uMj0v920q?X3aN0AAk%jBr0D5TM+&o~K@^|>hMxvAe0{*|H!%pZi zkxb_pB2^$C{Grz~K*i^Sg4gI~6Bxj5jPJnXoPhZ=J<4kUNeHBIB_tmRzX3_oRI3W4 zN>~=Gdys(vEM7qM#Bd&of$!+Tx6k-AP!~bM;GwvEzeU0E-W@iWM}a>M2qekW`h+4R z13-F$AU5?Uv5WtIe{TYBKk%q2mukuSuV*x|V0nY04H{A4=~ApJy49cbc~Aag z=Q!<6`rAN3PTZjh3Y)o7BQWwRXer{sH7f^rKNXS&>2y0TB!CCJF=}-O)pNgP-cfTX zlN-Q;^pggVwo1~zGIAjMDh15BSLAf2l5--$NbBgZ z1QGUII{DP#g(ETSP9SGc#fC?>aV-XS6R@r#jS+n)s!T6d2XDA#~yw&~zs!VW7- z;I+AV-_0$3VAWF9vJ-ouRmP+MzOE%EyrxjRh<_msUN~Zs*17e(Nl>%0vf`caA|lX) zvTEULj((8A2@3$Cr&h=UBS7+di#hBXiy-lv z96nHZk&M)y{m43rmjT`$9p=VxYo4)Z3HWmK1K8KIn6M(5gfE6& z$HSNR#zjcQF}aT#&-Q06N~*Bs`A2GXkVGh?6A=KA5i>)e^e6|CU+M?Y1do@;c-`TL z~zSY9^7NM8cgN!?y>p` zCVEB;G@{-*#RGQTWfEgWKih}U@b^fd|D^DNzTgZ0rePC_#g0q>A}4rbbT^jqINs*8e5qOj~kr?3#f_^j?@YPj~>|6NerTT4Vl z^S>MY-%rS_z@*v5gwzuj0hT2d1qFQ!!Rt%`0AE%O;7n%0!kcAy-2ebH8>Z3rKja{#H?G@u5IL3diO+e)t>dDs?r2CP%g z`9wqv@T1VJSTBJiClIb37$Ga6Ro?p)8(?*8+>75s>7phK(Z)lWn_pRl#DPic z^9Cdhw*zz54FiuCB|bB782oyG*{SI{2>{!ev*z;vEDfR;W<9)6vbZ71QoyZr=fJE{ zNi(~oP7j4+QdU(ZOo;Bse8pv*>SLWhUsO3NRXrql_bOxTJCdm8B)G0U2f&v2M#H`z zn82@>jW-j51M20P^SkJT28WK$f*F>eVKy{zcZ&~}oagKT9rxYSiimRMCsoxg0z$$R z?I*w-wVWBqMK7PH2jxF2X*~T_!s~HqIRyn}G#||l6a}n<_90quhXCrq;p5qJC- z<#DPyGh|(U0i#DlRU;n=Z`OWFrB$|DbYz4biBfZ@D-9eIe}Bc=u8;B>%*_&yYs|IB zY>BQABHlq*8H9EN%0pQ*`?;VlLD!pS&Dl}!iu~B;>B`3%s6eYp#Y_tyE^Atxl$Djg zOG|cPzT$H(EEmhu2Y(fQIM(Ps%nR6hptkK@FUjg1Wz z0Ei}hHe3$C8Y1S*^U~r!rVk=uBTr6F&c0YaOg*%M{ z4@1@XC&4^X75Tu`;TG1Ab+Fy z!)R$Hb7!<}CPe=}*)-k>{aI-jKdY(I+gBDTV!_X#og5_-Vv;!%T}V zEOY2L)L65(08Q(Gqut>z{R8y!DRoMuP5YE+G|yCv&(jx7Bt)U}VbSj^lrQW1Pi&Cf zXgtkO|HxjWvCBLorfx=mx&e^EuNw*Hfv}L5e_v`S;Z7F;9 zbM+4izJc)_UxY`nA*ShWxvG^=xE1sTA8$;XiUCf+#|$3Gs!;7_O*br?5CoAd8iuSn zgXl*`{36o*^pA~rlCiU`p@`c=bQs|d)UOCxhLzDmNGymQz{Fj}A)y;hLSj4@4MsZ| z`pEqVfSAlSaYRIXhpe^o9Tk!=M5G^pa3kV;z(Pi$*a(M*w42X^>&0;&Lx@>VYMtEC z^d`dtdH1Q~MBVEoMn#2*rFT}cHPQlnJF^Dc6pFa>%B1Dr(ZScJ%%gclkGvuMVf=&Q z<2XDd&ROIA3+aiKyD)}5bh``Mxtr5IX6+K4Ch{o@EZEBO&Y(b;h1@j}d;b9Pg_4*U z&m2*R-Xz3EA&Y~Fsj|{w5)y(Bx7wjGLPZJw7>yAgi}xNu`V^FLt7NoVd0agJku_>~9*Vv8 zs<@p6ck*UW_i5KO94StMAc{NlBG`U_V~RVt7@iEKHSx))%`yH3j4*kal?0nOSdb*c zJPJNUm~ip50K>AXpJfHphpyh*07~Y*UU%23>jjMltgl^xMB8@Whb;fJ`%rnfZtgAm z;@Y2Ll}YzuDi4$J>Y85d?2|t(Ua~*C-l@5qvk|&lBYB#pMp>`)?Geebj8j&TWV$@5 zp@fNklMd&5=bANds6<$nzxWy>$AynQ zn8-_Y6&jLdo0k48?2oBIuF;R5@@&4vw`9#i<79Rn^Ek23Ij36%fVZTdFa$G<3)5=e zu?-`PB{k{|j0nnzoJ%2&B%&WDH0<+^N}u81I-BoHJs7Q<{E`@)Z)Dz8-Xi~433eMM z9VO$#YSL&@D&0)Dpf_P{hUAb2Hl3!@eZcVTP$Qhu&+Ts+QYVJmgC}WpaD3WTiggwh z49dDm;=UE=$El2I^yiFYZ?Fe}mBYvM=0Mz6iidrj8WmfD?S-C4;EbQ9G(@sJRPvsN zk{HT-7r6Ng!tzTuHP#(iDqe+xF$lm?Ab%Gn-v#GOz04s9a2}DjRuM8BWP)Z2wVuf$ zbsN%-@X@7hiL5E`(o|`QuSIoc#b6mp4A?|!&A%6Rlw4nV;v*QX$N)K(6QGUxBrU;aLMA7VCJ;xXqTMA$suSJ zH@as8EUK%+N3^+RH1xk`fU-^2zd_J6R4>(Ax_#$9UfX#_ML>W`E_IuZo}Qw71)ye} zojfTW;?s%1u5=RGSURH!CZMJ1dw;9VmWB+U1>YcUYYW4!iVNLFVFV#BBAswnHN(TW zF)+4~FK~p5?~upUr*~$J*XCDx0ZZ#MiO$YAZe0?(l-1OW9@^-NgS>28i!YGwHjh3d z|F9#|LT7#jJ#^=)<%V%0W(_&fKkIJy1F1X}_?>7ci2@$Z6{jCT9VBr(R&Pu~f2TZG zEh!qd{{0hRh2Bg=C5?kpuM7H!oeBomX7AGX;giQO>Zns zBJTagE-W<4pbh_)c;m21VF>D@a)X1%_x*>484=72Na)EA4~zxFNd1L|n?i7ossR!1 zt4&=SqIU;4|2*CQ?UaJ}1uXQZFz-1==wQhqkRjk}dY51n-akSOJ>=l;_@;rdZ40$w^=BL&H>Fh)xDpGDju??&mB_P$$v|1IC@9 z>0(mz5*+x2M9MFQFJmwz<4H45%#d+4uwm=`f%B_XhrJsD+~bZgVFeEe%i1>3(KZ0Y zvBnCx&$Jl zL(h3q|4*J4@O;M;lFTJK%YD47q@Pbn6_Qs$F!IF zVd5LK3qiuH18#|)MgPbIsZuNfU{~n?Pd}@6FqniZPvFt{90Kd5HjsDT_t{{Y=V=e} z1~ec6%;tyJBB=BKkjMc#Tgb70KDs^nHJdA8EmRKbyK{8in7M$n66n6-3-u1s$&mHg z_3MC5+3@&q*8oh4rGu8I#}UE7i$P~M?@L4QJZFHzVqMw7uKIW!BE&5txmwHcvS*UR zj#yV_Y?b9g`dkwbmJ@B=ECNe*0nlE3q`}N^DR0#A$l3in=Z*pVEc0^nu^Hq+J z!;a<3IwaaNuW&ia9MClC<&(YLq7}T zv72!$O^x!t3<=ZotNSt$NNKv+#bdiI;56KTpo((|8WS&E>A+D8+}6p_&~S@n2TOp%O}f+ z4M&1C=cCem{j>x&I(v+ykwtin84XZbG^1|u`SU#J$sx;ms%ma- zb@IHg=o~ivz!)RE-K%g^wMOvRsbm?#LLb|P-mYCu+cjfzCVHxu`j z)bG*-gal~2t^^_EEV*Co8UsAt5^aFF)XAgz#)`rg_*@=ZJ{JYLRoZpfpOsWp2x7Sj zSq%dHvUdV;C*J=cg+vc?f2e#}{CAHZ#QQAIw@17`U|T!Pud=5yka(R(r2!C80XH~v`_Y5g@c{1h7>KMMDA zAfLur02PAn96Mw+?F2$96ownCH}VyBBqw^d6KiB3rr@R>1*!(K|3h)uwC51t}GL~OiaMm0;whXS1SAb_(;C709X!k>-a$S55 zaL2EmVYNDRnZXXnS@-*zX z)4Ilje$^T&;8^MqfVUbb=E{6krM-39B!8DLU%*XT_;(3NzK8Lt6n0a&-oKgmuCD@Z%BTAi9@KV2%wz*3zjDB4Jw|;ODDMA+>2=(OD9X`NSW<98hzs zO9&FKed9V+Up=HPYaLt=^Utj+BLi+#s}y~aQ7Uf7d z2L!sqNH*S??a1O%m8^zbgB3k=8KDbSQ$Lc8)T*gE01=m2&5`ImTX)gFFXjMFcZ`cU zA0pR-&F?8@0sGn?$v%rNc=_aIaj>Mm2j5SQOY;xkWOlx<)A2c7TLJhK-O zovr8h{Kk>dzOC4A#61XDs3%*|J(N5Y2yyIzvC|;#VHqKCnMjuL-citfco^&5&m9oA zEIDGo`x+U)J+oRN{mD0-KGis2>@)e{poGXXvORfu9QWDCL~{L7KtFVc&%Nq}auMo8 z8c?Y z>tHWgoQY>`e&x8B>m8c%D=n0V~%3u1rdu zSqCYImFyQTc0ViEyYklLeL6Zi&-S);uh~Na_*W5~T3AS3U%X2f`Di)?UH(=K2@*Q3 zLn)WP!oH&uGuDFAVi7SMHKXaE6lZ5slG#A8|Fi|owz==_9VfN7ZnA9TEPa21OR!wR zi1*{RC;jo7;rN73FyWcuaMF^0`#hFsr)zqxuZ(SC`XJuP&7XdRlZEeJX_J`Y0t1=F zxxeuN-w1oxHb9b{xpvv#WTQi)^`1;7dm^3%c^d@n)(fiM>U227AJ4$hCbHpU3HH7| zL;1+9!|EeZ?wftWL(hHqOrN9}sKU}D`y_rHI|hWF@j|9ML>tB~ZUaeYkiN)1q2ZHP zQ7j;6cN~FpKwo(|=_&f%O+zOz@xl?U;Av885wcS@ExAxfa%^F(Pfy(;Y`@ z$oG!tP*(!c(~HnQ5G-Ldm$-SI2$mIR+rFUri~;GK9kU|vnMMx8nE9+BS9b(;7bbgg zRMgt0-q~~7EMx}>F{Q>3Mto)dN&hy_G3yPxdU5mZXOCq+#OTlztFet_>m|prfxizK z&!O{#yn?Vod3}AwgKS0????jc8Elq@A=LOfY=r_%cEte~{#&!l3^P4Fs+hN=i>=01 zrtcm9v&z-610mNcU(91-IL8Kzc4vImGzO?^c7>qFlh+t%Z_-cw0&lbYx<}sI04l$g zWNPfvshKJl$FTj{ZQ+Y4+9F(VOlN#y;5=JSqE~ZIZoh*BLksZ}HIEimbIGfz4X8J4 zDR>1v490smqtiKM^qNB|9<#=e1i=o$B!6Dq9GpR;ejeOxs(3-^(c^H3wQJ~x-i*P> zEUynsd>#s(;`NEV3s@_ImbB0|Hp=?V11J|438S58`in#(q&8n=UNP>Krvd7wF+G|S zr_4sem$pZ;JvLOqui5#}euNOS1y7Aoyp@O`76>DAM2lPF;uob>OGwXn8SGw;{sk_J zi}ehF)iY)(;k-JV1>=?IUSa`SMaa$30Ja==+t#K25@m;Zd0qU|1kV}N)vl6+R|LuDT{+@Zmfm5!royQdB=X*B@N zHRIi~6{(Z_5|Dh0xU#;U+^W~FC9C-RB1uK1UH#nUI{fPNpziu7{zVL5cOsHHN@7_@ zQH&KW4=z&b;`kB6Z)kp8)e4LjvZ9{WwP71`PoUVhHStHNj?$NZB@;OEl3Rf-J^j1O!DMLSvx3q-6IG43fQ># z=PEhFcx>IZn17U*-)e?7Qy82I6qP#bFp2l2Cy&^AD%OVL5S(CRb_&qhsac3wIm^FQ zmPKbiVwIyP=MD|z5NK}TVqOBrJ3;0L&~_U2(A)%B*Z@0Vlh^BI_RTsck?sI7<+z&V z)wrhb&n+@1r}mFiX5q-3xzuv#S&8Dx;p)=^DkR|}vR|tO|-x$MpLctjy&Rp?I4(eR%BlVljJpAI* zS>wLqd!SwHetplM_APv$6hqH+a?^PJ0?*g3ELIYL8VCD0)JHG_ca%2-zeuis=pUa<9|W=9V^2RAU7>1)ZQV){n}_wADL-JdYOeig8LJVycCasWJfuivEbFf2u?S zZvSTEmNQPU_2>0}r}r>e`;GhZ)I!NjYips%=Yy1+W9om69orM2t%gIIt2=EpQExuT8HJm;`>t-3sp=rg3s^rL6z(7*)<7~7~vY7_ev6YQsHq5G!!}N4p9X0HxeXAkp2OoBhO$*%s zwlSd!CN!0HoCei6=Ayi@+2wYp;O_a3zI%S{<*QY%!s}k{Z)ZK9bj*qZY0{#!)^Ung zWf2i`X|b++BgU~Jun9UOJtN12h6Q|o8aE49V8@8pYlY@tUwW2bmm-v+E5j*MR$a6q4#g2PH%6g8&yd7UrDZ?nnER^RydF(Q)H3n;v}(Gx%eVzqvI^ zopKAr(FGO6FAXc+_r~3=b}M!qTc46d+1S`TL?Es1u4&v03~OWk<+|0OS|zx4O4vHWuKh}D<6VQbM!sL%{DlU-cBX-+jD&z~>Jz$-m3fuhVE0i$ z{--1KJ?A@G7?p7dW3KUWqB~MMjF`~Y*yh~M)T=}*FlEtBuYfgX3(G;6Y{__rZ zZUy}kfC^Vb^waN92?oKCgr4aYb)JNKaR8~`xOJ?yO?u+Xe1C7Srs|@IRwrqub+t4L zu5o2Z_XR{-MmlBjt#rz9E&f1tXo^l?JVrAe&_g6(8)pcgL7^wgbKjL{KueF2Ab1CY zY`!F?KaOukTDd56UIWPo%U8Y38lvJVRx1ak0*@$eG%gujAq=(p(I35vx1+uUV%phW ztqe+E%}YwFBeQWi_t6#N3PdV!=dCDyx#QD`^gD&Ki#Uvg^|s2e(O+7&b8Q~zf}<0| z1TL4k<9Q8j-`ya^ODjW;w@*Z&aw+_N)MGu&$T+m5?otYGEd~YjUrnp~SRH;M{UdKk ztCE${rda?mF_=h#5qlXKNz@)z*)u=!JIPF-f_wTS1~tZ2X6`N^*o zdm<%K{xWlc=dQmY-_Y5tVQ}B&!KCMx`74<=JRtWlL*Wb!WPiFn+$D|?5D-LRLWbg& zt6y`KC7-N?mUG=B_yc^v4!{Vn6?0d%0FXe(nm)K`pCLi;P4&w8ZVYQHlPm*qE*q&nNIp`!9_*8 zISH$$Mi}LL&Mn*z>ZWh$sB8PPLH}`*y7Zr7FifuuP?Blnb9Mt6-n&Iv)GO60h-V9T z>&*J{p-^^OXe|B6tuY{?Gyeh6OL!W7b8Gs!wkd6{K5n#3lPm885zRO`c!;B1as{Dg z!gw7{%s4Or(>yp(2x3~ub;eNR;%uz+Yy6W}5yqL#{MAwbm7sV@SPV2@Q*xx`P?!&> zIT|vCOCy;dgt{&O>N5*N2lZ^L!Z0X>8i(!a!7y$U+7sI*1NT#S!FZu$wEggUCw}n$ zAWR{kWP1fE!^8YNlf?fql|kSXI7os)gCM4em>=J5X%W%z;JhHc zhkF1XiZX<#MdhP7dGHhmvJCq<_p-s7QB5ip! z5F?|u!|0^JG$dNF15{40NZ&S&NP6zW>ht-*^=n&7iSOtGX)tK=5{&nBZ=#7G8{%E^ zO&nEFpTGGCK{Azl4#zZxiI(64_)oLEQLWqw!I9rP*by6?0fp)OF8M8B#t!)=oEth3 z`#EwH8SgI)GMIXM%Gpsk>Q}`nbcqQO-A>mq$EuH+R^eGfM`2Y zzfMmo$+?Ctm0RIy&j|sM*_o0mRt#{+awZvxu3fe-x1==p*Gk;5HobOPcjZ?(WZItUc435cSi)8p>}lj7*; z6j|To{9B5sDH|l_syZ1EPk;uK>({oeQfYJ!fmLu2m%+&bgHFklTFu3f)Bx2tMo(lT zsDN_6^z>jfWc5O!K%qrP5pHI`2_5+eNWM_b)tIJVdEf*##P=+8$E=%F$Kg}2e5A|& z&7P2aOzzBDR-5od0jOluHB!_bm|RTh>+7F1IK^w+Coted>eU{QmpH-nP!8D#3|DI) z=04AZMK8P)+RBoZ8YNKUxd8+^uHbz&glHw|xs1N~2ax8&I0fpaul0g~fGEKXERgsQ zdN1wNt&NUcw|$uUylzX8ZTgQDJ||3YX?%P+PH`B9&SBQT@%0)CG!jYGy`OyosQR~q z%HTBk1=vUsUO5;pC`}2Mi^*30vF+_OpA1S6nXtEO;p!@4C)Lxn3`~$BbGORcWfn+@ zBCEd5X<_2qU^Ji@8$%V8u>S&T`td5}DkY2Pd^N{Z^4a^<-cOiv4F3RMM&yQgXxvVj z%{X$sj6J{g!N%tM!xI>hdha5G`yMbJXOiRKSUM~miKY;o616$MoiPr+e`hd{9tjXD+~)!oPNa`mhJYru!h?@^W`__LFrwnHPSF^NfyzHpJgnr*s(X?P|>g$ZkCwhD=llT z`boM~|MW1_&b!dIc_$z9)7RF|{GzGg81nPz!Qhp=h&$`ni}W&}gO5AvY*6AzH8**Z zlT?-c@w=NmlnxaY+r08><@JK4pGd<;1N2GqHYeGvIAUtK;E^lJ4pU4^Qe+!Cs; zY9(J?CZp-th=;{Y&8mxsWoeqA5irvs%M}tbLJC_8(0D&mbrKgI#@twxz8lLDrbwDH zO*ZHGipGZe9WZCC!C^zM);bq~D6%k$)peGE{~U;i?wn1V7QOfACro5f=6%5MN8BMf zp}sbCTzB?G>RHJWk!&N~1Fx}QGLJ%K!H#r3;D7MUyzurQ4Lwz;E;*ar*4W-m$(@Fk;}352Irntg;(^KRiyy3(}Le07>+^nX;sFVM_q0 zQPfhtnmZ6O%G`B>-WE{WT4~7mzh*E8H^!+!9g(Ze*t(lz4H3fjU41GcEZLk=Ar?{h z>-&Fs)oCvk-^!xf)#rH}EgEudRHxEUBJ&a)0>2}#ry_qEE`#on1g;n^1kAG26&Gg6 ze96rGo=~?tH1_0294a!sU0kavChBJ9vWu)5wf214S#Z^IQD_#+Ia*E}1h@yyX>go| z*%~DKMii?4z7>?3cY+V33Q)XHB=_$e>SZ;)1bUWcof*hp98+O=dCYE=;%bIaa>ifJ ziSv}46WKLYk?2pLwr|&?<;CNYf7AbSoA$fH>bq}c=7_H`sHHzq4^}&(9;S8^Ze8)*m?=Fy zlYr&$qip8hrTO4z=+CJL9^U2DW@ID6W_~+(IL&MU<;U|lZEJKvS z-q$BV@1kh$+`D719#00SV&|4!lH^yfzFgJk-TgG<`VROg`AJ3fexLp-+9uJ3%_SsU z6lphZ0{|Voa)yD3b@#630kQq%F($qs-MaDMS^AVPfpV-zxfu5QZ77t~8JVQuJO(|A z+5fA(KPz%BJ2sK$6Y1Vbx-dKEL>>RZG7y!%M>#uhhId2vmv~rb6y*wals@_iM3X~6 zM2fuDNKTZMawNA)C>Ce-@|N9{Wa(`1xA`C(LGcVsemux*k?~4MXW8NdCkkl?&T97& zr>Uf02t0?nXtdWg61p4Cw-12ab?2sF-k*LIfQ=1@-J(^QbH^_be=`?nu!M#7v4KbX zLmO^S(_fv4U~M}ILOapa{i*@Veo<#S^w*7-dZ)`cf>PZqu@N>kH2k{aUZ+T+%lv#a zJ6~yL)3t87Hc;Dm?_0m+K7v!)=HtzkD5kGtF3&m^Cmn;W>g@9Y_kP?@|Lz0(Epkz~ zWcp2G{bb6Sb*jWog_rD$d2WK2A27O!l&gQRD3m9*M(?=cqLfrp8Pa9d<_62=I!ilK zCpiPz-J=vij8Z#$@(Z6_W%`#}0|>bBq^O;a0c&nt1gf9u#9Jw=ugL~PO-Jbm`jSJ}=tYkc zpS?@TiHpW#bCmd{Ts?RCV3}?8&>(;KytK8{FRn> zzF!%JpVen4td`TjQ|~;2S-*4P{I$Y3m4N*A?tA7mX!t4jl!B;Hlx#Jx%`|uxzI8I0 z5+ZgTkM6NkIcqDo3MqdIw>=rXtip0qhWA(RXeLKMffiWyn#>{abkA#n zkb-U_UQB2G?PW9_F=~Dzb@@`Fh7(rc^<(9)tvEyyOZH>YS3@rq=+#w?sX%p({#=YeVkpQbHer+|l!so5g1lnnR7_r&B;%>Z#f-aP{{> zRAXK!hMnKZL^uIl>o(~`!gypAn|>0{ob`*N$9Xm3q=x8DKsc|kB?0(m{0;g$cv91O zKWjPbbV40nc|DgZOt<-#A7s4wBCZ;z6pkXkpk=LIJ7PNs10EJ&SgXTUtu_4K~;utoH6`}bmTRGo#`Cr7k54)hbu z>v^CWyE)8n=ZTh4Y6M5^gYUXRQGdB_(>sIdF&Kz}X72i4TpR!xlGZxxC_n|nxrR*t z>Ni=^kZYKx9o^0u`_v94Ud2Ew?)ikVzTjHjc3IaM_hXg`RVLdxd2Y3GcjOAocj@Tr zqIU(id``Oa@wVgH3BC9Rm2&ertgU`)IiX9N`y#2^+Qx@=C6qVi6_oSXd)^qz# zjQ0X$I14_1IC(n(^UXo^tJ_TOqsbJ4Ajt0@{7ioZ09ue91KcIZHXFq)$u+ zzxG#+)Uuv)^OZ?<^~rvO|HiNyOnT?*rOACz&|j_?&pNUuYu_J@ndz70^c}s;Y{2M^Q4o@C&u@M8q^l4w zkXXGg=@0eB_l{86&Wd^eqoD{PqsFsbja zc6$c2%ZiIcSH`lpsUsEXqA%5G#Au zb+xG{O!(5CFeody9qVW02P}q&y53wnVd|}8q2>B0u0*hlK=;bj0uRy_W^dCQEH-CO_#Gs zt%@d&g(%SU>GJ{eICwA%u%EYIK)w(MKmSWAkn8bh69oTmsfoDc4NV*xK!tvYOIe6R zP%>J({u%*120;To-bhsYSB@JsR8viK-&0$jP z*)EMT09}szp?qA}7uk2)T$Kc&<^*0!9Skk}|73rIsECsGo4s}_jFE^ye)!DuI~ggd z?ZP!G&*L5{kHxNfI=@*mTX7LrvH}`aP;s&R-rs^)49eHz$$IWT%BoKzr&>IYx;q>V zOx^-5I}@XWLW&#U3RA?&@IYMr=g^Zy2Os>t>kCy9@E}<`wBFPM{}gh)g`AH?ASX5_u!-y@PzQao;( zCXMZBI<0b%7Ab2i$EpB|H>YJbu*Ulfh~@lbrgePS=1uPGN}G#W8U)H0@t=b~jkc-j zek~5(9@aA?0M$3oEgP~>0#)b2AI*A>#-${}E4@&ecZDvunj z^fQ620jg@}iVRQ7+k$YhAXG3o`k&7H7OW3hs*;QneuqcjyRm;)v$aPBda=77=Iy2_ zOfHQ0w{D9tH;~{(?>T!Yeb=3U;O^@cgzq@;!S=c`&*i(zuGAvAtQxdz4F8P4DvN}y0%n(Nu)6~$B7=~Ej9IbSE{{cQVGg~O6i8>w4M z33g#cMMDG>-uJOj3kAKX{spGsAkz8Kl19O_7aFid$vpEmtMSz#jjeuO`Sl1N1eZHn zl+@pkgQMS?CcXS}Ew;o?Z_y%a&#*-9QIvHWacGKQ}efiBoG~k81^#FMM)8Uwgn3 zspe=Wx6zPYckfibdV|RWEJp0`_uGp;WB*KUjD`XxT5spJU9mKTX~v&}yBnoe6%&NP zhnSV>b;CHG>s5^DLTvGhHP^{HPgzR2!BuO9am^uo`PheD3!qn z!}hqrB*Az~QNo~T|Hr-*zXJpJxvtc4C0fL}&rl1Cyo0Jc_D5Kx*wt)}ym!DW=0H?j zi>D0!1>2{rate6_$l&7BGo!7Y>KL7C8V^0%4a&ePYcT_LN|qH~3Pn>?SyTT9uPGll z-V|(NF4M+Z`%RWO@DIpp z2Y4$wn?VS5+FSD)#te?yBN`Rh>f{)8xt_OeB6~VpM1~<*8oi!P8N$ux{!9uflh`Y;e@KQK4^g z;B>Wl;l6$D#7Oy=sB)Ku)nh(P2!QL3L{u=KN zZw_q2c>kgUQ34O!5f1pC)_=b9J+P38u^v#(eCGznBf0}+_dM9O7fZX8MQ(a!pWknA z1XRJk!QQ-0yEj>)RpXt8F9cB9EbHYe*3!!015oUxz5Z^dD`uRAqcrx{<6VBennFt` z6qW$Jrlc3a$*cjTl8d7{YuXEN;JNI(nh%4W$CiZbV8)?I}+NdQqZlJ+4hRUC8Fr@j{a;<-RY> z-gD_MX*HHsQ-Luo@*q6GOYIM-IAJ0yEFQh2rgna}Zt0Vi;<^{Pph(0#xrc`M1tEu3 z*bJ3kX?K3-2)Z6=?j^dC{my8+=zYP z3XiI5<}dYp~&S}nw2+LD0fz-IPc7E2k&Z~_R}O5%?z3+vOcxk{@FPvBmw!W97Z!JE1zWna(v5ucL`^ywSHfBqx`@#7 z#WeEm=?s3CePDY0=>5v~+OY*3=w+p)FImu85s;o&0=?gSI0o5ffcj$^9Ve{)Mjb$G z`nQmct2-&&XS!e&AK5GOk9KvFnwMZkt>okrsDI`FP_$p(au_+3<#(xLRKMhZ2c&{D zpDKZnpY*O0G+Cbk5-6nbQRB;H7Dp1e%nT^jm)FORidpQ#u{6 z>a8XxCsirD)aYLPI4}iX^WO=A75~=(kQoj2?D)K(7+pFzI?-6G!Qx!Q7Fye(fD`zQ z;U^vnMKR`>xyS~xsgr6q6sqGb0MbAHHZ@?H zRTahdU-s0ue&K~m+Zn|7aTmn=p{fBkqALGgL>K>@mWIX#lvwg^ZQuday3s>GVtc-w zy6zHj0LZo1#R0%%z%UU}0IiK>ZGChkPXQfLq`Dt%?Lw_s^$tq@bxTkSal=-q+vQ)1 ztg>JBS_i10djratkyf-_jn$ZYsw%VhRnN>SA-n#Jsg^_Ag(k9@!nqHCOYwGtU%JW8 z?Hen8oLj$=l#}~34?0UwB=E~ztlS;}7^^At>}vaWPs%~dQM;;ec`Hz%+Gn~=$yp~Z zDRHhh0>wLT@$eC|A=cQy5_3TY?!np+5}7Ub!8{nxi+9)|Sro72gol?^{&iVcqy5G82i+Fdta^=IsJ7uZ)b6IV#jl=X)uHBECp-@cVG69$_rcn59F!r`9B3~kI z+f#6c``r6QJWg9ij9X=gnkGS*6!@R_Fk)3?@QbK}Lj8#HE+S33g~ z!XBQlJiptfCvD~Y#kcl6J2sMAjeZ!2oe%EM#;)#q+5z;)`2qZrX#L6BK!kz+Pi*x| z`i#9m1WehP3Je;RZ4_4nPOsb-I)T$E_gxstjk6lvYDY%mqwYC@ksd0`X~qmFJ&@H% zZh|YIh@UtDn+A+Yqm3NEoE+4KOato7cB_ z$t4cvX2y6~+lLBaIrhB?461iDtemO`-H5WaBjiPs9C3+gl;LJp3o%&sR_>pR!YJ$e z&#@FU0Z$Krq&-4^T6q(9zWgTeA?DW=_&-v)IBIb8nQPlg6G{r!(jrD;gZu)R0FJAs z>51Urf12r8k?N(^f}T7cmuSL01SF9pQEVBS{KR^cUhDDOdY}6VNm<36x77Oy54U(H zKyk3wkrrGP_A?h5^eyN}3=VohtS9@t*4%cbfso$744uH&KbC99m2+x*raP_hTDbo) z9v`KPd9RYt`olMdd817!&rOPiD6W~Bn^qoJc zG8b?fW{GcPc)`O2Cmo{!*Us`G^B zp1dqD6||Wu^(5$cdm6}Ps(!nsrlYg7wm|ZIk}_9HxO|zrU!-@o;6sGwB{iUOC?V?I zJvTdWosGP|LKHN!*dN(&AQ`{n-cdgSVh2r0Mq#!0I9Of0FH1WPC3pM{TN)%sCIs|| z2?C8Rg#LKeuD>7uiakgPayz^#f~K^O5%r-^8ft3z9PC5W@OfZRA*`?IY!=3XTG?$3p-@oK04!>tt8wc=Na6u@BsV-+_p zR+P~TniDYRS_T!e1BZ>fRQaTs+H?H|ZEcRv&IJ4ICt|I~qS_ZWK3~{J(y4s!mrE(BN6Qnt6r$5wR>T1oOhzpdvYTp>%*caKi zW_)_&B#7Zce@P#Tz_}hIFVaJ<9Wm>awiYM}7nX$(HHsxZ{XlISyMiIM8pS`HQ1Mw3 z?F_y00Gy}49&e{RZuKFh3chj)vH;uA27bC1FtaXF8ER0s7<4^AO0p9O3mA&F+PLat{|?X zT|Yh3?eMv*er`xPdI85wfiHlwetfR}IrM;v7F$dLr&- zF~slm^Iz4EuO-r&eU1=&LV*L>Cqx*fj27B=snv0-p&oH^nz5CIwht6bM{JuJuNaty zKnH|RyWs?fvFQIU_}Qon&evWCjWkk)awGIw6y+sH^1MH=D(nP3VRnZ3N}zm8z+t&u z@Xt)P8?=`>#M|a7&wj{D686Us;w$%!AVOMu3PF4o$e|~%qocz;7IE#yg}?mOru?J{ zf$xE)fGJAh)Xj;i2NE2r1Mhvg|DH|7-~QSg-~B0_2WeEjS}|I$ z$v0h;W?;>6wi{Cny_rp@V*lCJjDCAa-5fJPYqxak=I^{0Xq=Y0SYtJg#fw4c!ak7J zd95rWKF~^B6Zi}p?06XKf*nxID=*OSweg(ln2(PrVukq`7!-4Ki%H> zIN13<{P}^i*O>4X9r-YZDRxDV8?hd_kW~8QsC!U4q< z2FV@QBH57D6i>Eb?clVGjE)K?x)TnK#XQu%g>-fw#J%XG;mV@=SX2x1lwiJF;%~f^ z893%kzz~xa>8w7C(^!HjtvYOtO|V)XPC@;3!9m+j+)W)z2j(`|HMjxy^;_|O*GNJn zzM@`l=?-0v@jtrvXuO;ocmRS^vs#Y!;Kl%6=XKct!}fcyHB%suA!>n!Nd6CdMlyEC z&-$y)`9UL-?;#0xsim#Y0F9B{`mV=W^X&B5UtkQvHVXXLXAny*xjWO;*F^uX7XS{ifNSB&w4upMVHaf3 zh8RCzkPh!<=OuVr{|Mbun$WQ=aqMiQz|nCIV4g1@6aO>E(<7du!ZFZbdL=DSIUGBm zdqrP+P~_uVw&%cvlCu_ECyPMqXQyT0mZSt)aV6_ml8Dwh7N+hJADU6Zhf-e~6{fes z4$jvXC+j~G{ru@Y1Eu}s%c<(qDn50n!}ml)Qwj@AmWRG#klBp&bSz%KR+MX(adomqLISACwu1SLbDMeQCAHr)6{>Ryyo4CLQE ze;ZAT>)6_tP>`~}jsN~_m zjn1dZMu8HR_qFn@HUjR3(QigF9BSILY+V?9ZSt~XxUWX(?k>|EZ2Ql5j!W3M9%aNn zYyNAfz@T{Z=eDf1bh6_0pIft8t8Hir>G*W1GL=nd)1GQa405CNo~oKXy<4s< zoE9D+2KBJc3w;lBG>D;4cO2``1f?XRTYmhTe5x_+u7E~_$bc75XM&?c3d3!Y2C90d z7fTPufBT~weo_UP{1qXys_73f`o*?fauX5}Y5h=7fPvctULP<1+HSwiO6ezY~y zd$iba^F(I$hN*;fWi8sOj|4mJMq%%W953mAHh(ZkcKKj2 z2yyvB{A4S319R%~mG1E#S*iV>*LRy`SO+CrMpZ{k4}%}9#<&^^k-R;cF4!w7A1f!` zp&KD`z-h&pEpr7v(L7R>L!BJX@8nl*{t^wu>s2;gX!2BaZTejWjgmj)`l((9PF|GP zx0kRvupZP#m(|{cPnoU%(R>FNi-3)`p#p5S4xRj-!P3N!L@xM`)u2!W%TsbWT z7_?!_5`oNdhc?gqe?)}}Hp&<8QL1K<^KI|qyYX)(W-<)6`i7|cmw6VJpLcC{3ykJw ztcmX!OFuA3`KtPrc?@uDRGqU!6J1LU9-j|B&H5?dfJ2nCNmGYle)5@o>^tg>!tC061d3KfGTnbh{* z*#W@>qeK2k2U7Lii-%_&<@}g_QQnTvb(Q2;!BJM$!0h1n!QtOsr62Dt#U7VW)&-pK zI6|_&^}dKQl)n{W+Y2kb-Q#b8R2JcrbH&Wsce1_5z4Xt0Y6eH8&CEXoMG5hte{m(@ zBrr(DAf1CpYj-7L(DU$=&S2)6{k^-a+NvuNs}NqD=_!%T0v_9%y3rs`>R}atlnCB; zOF%*QNFc#)Dzbv@9 zdN+!vAy1_?u|GA81eL`B3-$-EVG0}KTm;z9E?4sA{ue26M=0ZNSyV%DuNn`gM^nv= zgzl>SPP1j~9*NdUL7RA0WRgqYeSd_hVH`*0H!V09HYS#9hdBp-^Rm^9>OJ$`bFVDv zw%XbF$-PTp$Aw$b%Zx{S{>-{lK2z(l3X74oho2Ry_*!#HC)Utn%0?`D)bHBD=QN4e zuJ6IUE;>edus9sknie7nPq$nKO8F50+rHdvsjwk}w}bTrv5Qid_+K124L|k7fIcbSRy(K#>u9<)~v7W%5QyY@^d|U!SgKbro?Kj!9UtUQ%lX^LL*}r z%jtIF(TS3ZGVt<)7@CS|0oX|H$2`ocOsRe))!Oc&v53!DJZ_hh#S~0-P#(PcL^RCe z2%j;;(uvFGiRH-B9cFQ%`LCwC*b&a?pMQrR_a@u?`gr!NbBnzLJySu1ICCn(Tb;q< zP__GEIe1tz4}4U3;&MrQ!k=wZ7HC0WC@Fjn!t#y^h-VnPDT0_oB@rJ!r4Y@Jo6OE0 zi3chDTZ^9TR`Zp_<>0K~$tru{B#w=ox2xD&UAu2ES5w$J@Z#w2wB<;;oeO7Qc6wc> z-W`SMdHlc_5%iC!k|8`Q#l@SMJjYUHOk#nbZA`|E5KR?SRD|5&X_Jy4 zKe~{pWuOO)M)T-fhL$A(k9l^kGjN*WKZ4$l=habwX}0ijs*=xvL5aTh^o0A!8gFrOh9tAAFyL-2R;lmQ$eG>%~WL0G_dn0Je!xwJwc9$XD* z{j`=os00jk0nV^qO1>j;@d7PJ_t9XX9Qy% z9yzXTMZBiRM$oT_FnUniE45Z|s6_f0Qk^egJt*c>9)j+NAYbf#RcWGUXNw@sW>(Qc zW;gZO!30fYX350l$UQffBLV-5>0Dr59AoG1?!leMVncy{K(3w7uOc4n8Y-ISkc~QO zG|r10Se1G&7HF0XyUd%j-r|Crk6;!0w%Y90fIAS+8N|ua)kBh+ky(@=u@9{_itU!Z z*9w;O`?wt8Y!u_B-b?fb<0{&hO~Db z4YM_t^Mh|RD^=&825(;qE@&?KSov&~piW(nPUMF-licCzbD$C@bZuOpkougL*Gu6s z&Z2j8%+&LpNs?9V5o&6oCgi}qBd_i#>@|aT`a7DE^A|lRLyG!7+O?rd3RbFSJiJgH zIHd#+*((6u4er0>$y5?T=ufwIwsQ&^ANCHWcxj|mycvgFL{F(8+dO`gE=g+`-yHpF z=8`irc4JaM8NfZT%Q#vy`_5{v^gXxj@BJ`M-j4oVBATC+bIcVbH5|85Rik?!><;{R zs>Ez6OoX*a-*Yo6g^6PXcPZnH`=ug33lr9c#3Ei6keka^d{}>$Dm-o2e*9sc6!lre zK`XyD?ua1-H*iRiLt()DiF+FZH0Z8^uJ)1`UqjWRq@;5uyL!| zvwd8rvR%BYTo2$KwtSnqoAS3K-IP23(f9)0ruB0Gv)QvZxL+2-6m_(pz^D5sPy(0 zr4G#X{YCC`@uy=Jv(s{%Jv}EQ9(@rjN3f+BG@GM|BLr8Anm9OGOG&7K3r|7=(yJFU zu5qwX0m2eS_>ARp%EXN%nvr&ePs;miD{*$d6!iJQ7Nb(%r7Hv}rj!@1j6 zEIS)L@Ycc=Wv-f^6>r0LE{1X*v~r`^Pcg152rss@lC&}AvP3On-i(Nsc4F7GOCZf* zB_&y&eQ=yLer}p}VH|R0@tk`(E58lpt#J!J`}UZ^i5w!o!c_vHbtZ?Dfo2dw@X|oQ z(8-zIs^^q4ecm7(l=KHCKNg<_bpiUz9Rmw`(UGbv_Q&)x-oliNB}cYe^gkgKs2FUA zy2U&i3?N0kqNR4mlVBLA#*I(^cSpCo9|lXg#oKC{*;2+ z@wO*bK1`lDfwpR8&Ar|skU|#bhOlT1KFpg7G5jx_JCI+{J#XPb#E7-jq#Vit>K4eC zL$&+QXRG8EGg>jX1dcyB;J8){PFaT@yfP)&n2v=g->CMBtWkS1LmjS?{Q_v1lnD(< z0x~XgFb9rBwLUjKIb*;0%Q)YHf;_W2R8wl3WKs5f8qwMlO~MzeWySDOkLRAJRaYui>m7~8Wu`q%?D5W6XlzqXe@j>_zBvFaWB z^;snrgPcbs$005OsLq7v{Q~e9<4@9h>L&Hr5B=~%f`VV=35`(P!`>tyEwJ>x4mxYU z={LMRQ>tH+>fq(g;mD+1zJR_$)NuScga$1I;6w`cG8Lo$f6MWYSy4MaK5RMey6>9) z?`#Qyv_9poC(jICNYD0*&d-UoZ&}proMB@bZ5Zs>k2or?T5dEJ_?=&YfqZM!rNc6_*?Vf;VKDXXN7(xc-p&8Zq>->af(#<{6`@4Ns%*gJh?xv1M!IY@LZp@8V#GwHGxdK|FXVJn{d6x#N%%*7m z*GnyzI{{R6buq%7ABMy@0u`xW?P{ zahma{gX*7`H~3<_;ExY}l(w4=S=E?({m_s1JR42Z2Y;=Ms&}%Z>vq2i?1eQ3eK`OA z9L*Qwlz=meS~ihUV&;PvDn&PovD7{W(#pd;RV`denRQS7Z11k|Wku%*>Ih}vbyzal zI3-w>&CdWeYu5uL4F6?lwV`0eCda8Z{cnp}e+jQ{G>r4}XmowtRpC~1E>hHR0O`5j zoMFc!Njm4|yFFBT5j+!eQF2HrPUQ7H)iPXQ>TSX<%U;vthx(Dr^qFEkTT|h1tP4w5 zhJPgze$uO2tG?>ZMOxqasuy^5=F@SXeqVqwnmR;(JbJPBe69`aSKrRh@K&^%P%WIL zj^19QzgDr-u-KTwAFXVBwOgP7sXU0RM*D#a{nj&kwm;diV0u^DoX})~P=-Shf2bS^ z0E9eKJXarVEpt+yY~XKR#)-apyI=4&I3a)3S5Y| zn2e$5ua`4)E48ohI0%;{rgZN6`##{IcA9OU9}9gX|f?<;%Mo9H=MQwd!+M*A$2 z*rf7JUiBDRT62!lN8R&`aScE}VMwla?HDQ5Dj)jKOx^UEY{m@-a?@6Gh^-zaI|lTK zz}oX~lY%WKKLSX=&K=d*fI=_mx;n{WZ=Xyzh_?S6oV0b^6MmLWfqebx1>}w96^PZ(Q&e2Wh&o(%l0S!Ta2+VIwA-z zWM#`rQFgL$2)J`!U=LRC(M%|#KR7x)#WC$PEFlGfJ7^#ZItOfmzK;aQK!Cpd> z=fxF0`iSIvoSnCbKd6}>9D8UY_C5#DaquI#ke7z_5Co)#P4bDM$*FFNY{*mddbDrq z>piSXlv<_*)#v!DekmZRo1+g}a795N``BAV|M}6Q5UeTfor^&35bDBL#%=&)f(T6EEU&^QU&LMjO0G z{8f$$=xmEDl3bk8MO0_i6!A!3*NHnT%jK1~qeCfML9^~PHsDN;}d+(v$ z{T)}*%{5j%vwB3Za?KY;6jOz4CdmA?XzgV03uE-$XBeCn7l!VQcDE(pZBZ;qQ}q@< z`XWSEmcP-pV@3(&5lN7Hr5;>cINphxxv`A`c;2J z#7sDzYAD&5^Ngh;n^igb4k!`v7Bes|sb53I#v&YbtWXFq%I=j`+B6rhms zrhOde11_4s&E1L3->_?y60G)hOTt(?Xo~9fF&yRn)$gza5GN0RV)-k%vD`wX!O@TV z{M?f-^IlmV#gxX-b@?&uZ2DxftPrkz^|skh-29`m_lBV-)<8w1+?gQE(s)NQAO7jG zx3)x}#19AtP0<3O_LBjd9Dyuqsq?!AQC83S$v&s7(z7`^SJC~1sM@c*e#FGq%Vaoy zzLKV_m3Y&?Lg8MaE^Q!2a_ay!ABWm=w^1P$PIx-2aNc0mUwXTKexa3e+{7uY?E7ie zoO*@Wn(y&sFz4PYbmyw9<_nhn$F%FBKxMw+Z0{db`5b=$tK=CqOxvG7jkWX9S2jf(10@bg6LCH0$6#jQ% zgAYzBxI!<3es)E+uyCoTV;Zk5rUgy~7fH{<8GJJ-6#}h>Ti*a8Y7K+e=1<-_QR?d* zIPVw+dXeAnFKNxC9VhW;2GcX=vXg=Jo(I5c?}8HZD?W`AfDyzFSZPHydjCazBgQsP zWEA!OgCg7g3m3bUlt0DY-xcZPiL60%BPBD@`mLtZ6YX@%;iv~v;QG){f7)mwBPE_0;e~9W zkA4*Bz{><*p)3Bz;B{E{-N7j`)+%E!3S9e?tw>NP#HnT1Ic3~Qmj?rO=B7SikdgDd zvn(nW9M2(NTk#{0`rHPAjRB;*F>q}97isSzx4u445w;H-ytIuxv){z|ApYb;!%P07 z?_+6I?N+J>->AmJL2OsVOwqOz<*7bz1IQb7mvL;($}gG7zn$s6lQTeV%GkP>;j*4O zZgp#haJ|>L-0EGf^7_+gsTVR8a8la!#VJ$gz4F2PWN_vUe|#p*)N}xE__v)hD|8{< zrW|uEZosxENU(wJ)ErImvsd{g!N|0NbJZIBYO--c)}B!k_wyIQ4!gznHGiCjnc3L1 zCZ6Q^VhixEu2u81Oa=w*NYlKY>=i1!(a5K)wRVIbi-jj`fEu%^IN5nhe;n{0qaO-!{25GszOWc} zP}RaE`$dKa^P-NCU=zmH@u+b7Xn}|@Sc9~(#oO|Ra|a##&DH4(R9P#BYgfarXuml) z;e2mKv1pbVScpj=%wTiow;@WpPXSiO&c1s8sQ&+g3?W!^V&_}$P{xz)Rv!l%X*3gz z?_s+o&&zS02wN#aCNnYh+rM2VzKPndOgEc+*CnMb(HuR@5%A-xwHdNEm5?}>dWBbP z@Bb-dxH0r`mHz8~U(lg~$>c5O>!l8(wc7n*cYz%&=7$LVd;3<50`-&eyfITRcNOqY zJDAVpBG5xmtcS6j##|P(?0SCgeE06Zyh1;X1`ts1-$8Y;n69-Z_7CEb2NIZJ+W(1= zND`YQZi-N?ZK!^=J84aQORlxngG~_UPQBjbVRndNDg4G*yaRpP>KThw0B?{~5kVD~ z>gSC~;y)LB|3pVE3lblfLW2_ zS(h}UKRnI`n`7obw>@GcW{{aOn0Rhq+bS>_e8sv0?KF&vQDKGPVg<&pKE9W(z5J(a zAmQEVO1DYehRU&4-25u`hWK}}2H`P(*B|bJuyq~U)4&}e(^d;nSP)E`s7Rie?3G=UK97?0>I{e(d!6SI2 zbhgzK^6GYuh+<#vlUwaC=V04qeWv0H%6OA6ElG=>!gCb|66ZhdRA-3ZwN}r1;n^M@ z_s^(zV(BvF_Wltv*J&CWOnx$GbhX2!EqP691Nl7)I`PX$U%Pc_X(cqmAy4+J=l27V zIwznt9n)&n4sg%WpTnaQp8N{vdv4<8ICzgijT1YhyS3>f*Bzo$^e=ratwI14{fOW6 z&cJ`*$OcwhwlSZW9(cdhDL^-K7)w0D=S30!uCawl$GtD{1uic&?VqhTFRR*%23Fp;0 zealtRc=;tI^8Vo0OiwH=7-jQFdI^`8O%#Gnf@9BM$##Mm7~n2CodPmYa%SPX5NJ2a zG8L0EDHU)9<+3xIA_R&Dl(1N$QIP||7d?O-`;5!HNq&Q=7`32r(}aY0CMExZ3GWhe zm-)K4xp^!7M7ux3M0RH2Nd$UUA!jrZrryj1tXS_s%y5#KGY-tNaxM3zo+&fG&v-o| zmds{q^}+AUKP+zvIA)%0Nw!(@{%L<5^I+{6EQ^In%^QcEICjw@J*Z+F$S3w8U|nF3&&4NPrt}L zyRBzm$WWC>a(VS#S~sLj71xsZ)JD5O2yx(MM0Z&}(| zquDIjFEpszM;0!Y__X>Y>OtFjm05%=epj3*)l!00K-E*o^F0n`uFWN$mA)u95&!CX%n=t(wAVCf@+Rgaj?Sb?MFpS4RqTg$`FC_| zBp{D1M5ld`wy_l5=x46Gc`wi_jX)tY)HUfGR{$f+13W9x*3vUlBn zNYM#=^!zrvx!=RQ_+nX3(BcZr)~x@EXlF6GoRRj``>>f}Y_uRXHz<1kezp41;OVyH zpeoO1MVzr)toRz8u?Kc&$FYpP za{bpgDYP?BdXy`@Whdk4g=A_;NkXTe<r}@pZ1AW@nP5`R`Q!^z(dU%$8LYB?63ge1d2lB6!PmMO5=RJ4 zprE{orNiPi9aVYrjV#{7mv%YVk$5IrDP%C#-6L0F94%dgz8vyZ2?v+N!HWGZm+al# z&g?J8*A%|UxD8Xa@>t#~PXDxCn8sKS9wR43#_=-)=atynozhRWTVIW5(RCIq{fHJE zl5hPKiM~|W%k8V0IrrJq%NZ$a^9WqfsmH)qE>epzG07$Ax#Zw7aj1{wDJPd%y8-+e z`I#_e;zWq(*s8&H;Lsibij=P%A6FdN2!qF?+YXlyoNQfLpHq&?wdIV<0) zQk9L@#94jZqB;EwN|tM$JpURILb|tja5L?`;GK6Sd6Q4DKb!SR;a$Sd#p=rV<#a9V zkGVg+_00LAT z5SIcN#VP;Bl#S%wbm2bx;_iQ^yG0T~h9Rl0CiaLGLHbKaRJ3Z61EZd)-drgIB2V{xxAA-BZw?l7BV2}pZ3saS7b+Y1K(%)`oV5Go&VIigO^%8zHSosXF?1S z*#e>&uM{e@R_)jVSuD z>UHCi{5IXUCrKh`UhR*3936RMKwY0d^+Q;5jbHszn?KoN(I%>X#ssE+xL4iIrK5-P zBhokTt<>iWRE!%suN1!CF&ds6Lv04XRT;?m*2 zIfu#9Z>#I)hb}N+Xilm9yyjQD&x|-HocWO_4e?Fvc{g}Nsu23$`}i_7{#hNvd{bWwDijmc0(hCRapKueg+4%rNM+X zr(+tNb<3VR`t{RMVyLGEuxmEKXT*9J&DO{yTepP@t>FPZ7e++LzB?f#O+2wiWuL4TTSK z=Cdy1Cd(|xj7Ig?#@aoMB4Mafe-gAlFE~9%=+_u;f^9?;x5UjGbV}&KW$xlEbcx#u zT@l5y{#_<*r-CbS?mU3NwrS~m7rdqvJ-Tw}s#~|wCe&^C)ll%fdB0?BFD6~<(04m{ zEJoLBjX*UAMNKfi0^dOZ_wT=075NXVHqkdIZIte?s()@j?H^V(kZf-5mp5RY-tLY#<}5MVx$~^Sx<1Wb|Im;+l&qCcA*5Td<<#eH57ij#glHmY-lX z0!@iB%oXA;!-24hrH*uop`Nw7vYVO#it0Gw%TtNTP3jy-5y?6k-wnk48l4%}t6owB|yNgUj2$$S_367Kyf#=%a} z@zg;64b-$7U9j4(ioCWcTJaz$vQm&m_L@%f{*P2nmUV+dja*bJ^K0T6ITO6)zl;14 zn7&+F+I;G7tYMxh?K{}euA39xxkELm4Sh^($6}Rfl!OcUw0)h~m|jlj1EWs)cGau_ zovott&;)xuv|X5Ml6dVAi9yW;s}k2P)j5(V{Y*>6_M@RI&OLha+t`k!x~}iyM7n~; zzG?C?7>vAQm0>-y#8~L+$7|fLHr3(ZFk(`3L@>z@RDZk>u?wZmLG66u_kBG?%&tk$ z=vavQgIz5K=0krb3d2ybx5h^IW)U*D1(f_ilP9WVUn{4bET7CYxFR#p5mnv>Q#OlXDU0^-iP5$>RiQMRgkzHE%?z6$Jxd5Am&M02$~GW z<(&QNHv>4$xj$L4hn$`Hv;1|Kgt`p%lZq1>OEggKz@=^1-BI0X3ycP7=3eCyfJ<~b zfY;dqp)J_N{OG($_|EA7NQwpiI_^HSQ_EbG82aL&R_>^6Fpke|zr?Zho6l@IXpblK za){>{@B-w8#2=-2D5nV=;a6?O<_&JsK0dpl3~6ZAbkjaM2^O_osud-_bZk@a^Cu3# z?q&d)juM+UMPBmAEvf4tsUA$ZLpKUDoY7gcMeWq$HlnVIWXW79$^x9*A*ucUMW}zh zH$Upv75N-K;Js&e!+bpcz8FgaNcE6-UMEE{1zOCYeqLgws9Ic&Gg-WEPr&_qgfB+- zK94n_e*2yG*b&XPMYWbcr|m_w)T@Uv77y#Dg1Se$XC_}nQscU!Ayt=-rCvD>}LM&i^9X+Jed5K)bs*L4GG}SpN?W1GQ;9y))L%S8RuYzehZ} zq|}JeDM)bPzph!C`$1h;*aC&98Lx0X`He~_cebYBJZxndz_X)D@8B zJJJ0`+Y3XK!CakNbYm>JaLlND0a(j;Bu6PN?wIaI?MO}w?@(jn3i4}1!>HDEj0~sIfjpMnQL&K!FjzXr&^%ch1W0Lej~dnPcyVfmDIB{NeQ>4*%DlF=aCARg@nG zG}Io4xFx2`(0ocQXo^44SAWf*%66Fc%P^;FXFjD)-oCNBw&z~v2n)Ywn$d`b z0>^E8BTSb;EvN7^(QNC>tsK2~_)tA058Lg7R+T@JY~0^>)J4A`$AT{mmJ$zir`l-c zF6j0IxCM+KBXQm6k3mA9`3I*jf)lXghtNyjjWTRUa-#p5Qqy?J8hETh~UAFlW zk~;6|>@pDk1MeAFL)N4^xs$92xNiABM7pML1NMlIjzb=o=($Ns)!SBrRX&d-A~D

LIZ#-@03v?`g)?XW~@e`@j0&Ml$xv^XD)7F|-8fvW1kpPCM@jzCNdV2>)HOW|ncFu0RTJ{3lEMbOw zfdLm|ckvjI$*_??19ieg4eHHfANme#m%ojM`2?CFbib91@jsrnx*D}O>HK!^M4x%; z$yKnBUHOvV!BpZLA3YdqCJP~}LDk>0#4sd%@cTPAm$6sDIBsr|_AJ}YUf!#NXr97b z1!2{Tov#R6$2kJQ>MNA((DGvWXS!a3w@(A>)L21hIx0lguceT*>Wyu$8>d8wp3SN+ z^#7upAn#S#`+FgQeGAd#*4S=5wBug9!5rGj7DC*6ZTnVshj!;9jOfJ0mFf4V-{L;%%^xkWG^T1ge4n)*I9My=0g7mALwfI_4-t zm*3Km@oej$am~J;XfeN#YGm_UwCoogz`?_A2-qjIs?%KYj;*VjG$~NUU}?(bMK-U zVCa^wAm$!oE8CmPA*KDN=5{lGv}Y@`h${V&ly5NT&ss9UN8uoEHkFZBhR}LCO$^T; zr1-=dw;zYLR6Gn&Og?)_#!W`aX!|uCtqg3#>+<%Fm0o`E1C1M9mTS4wVM1xb)>XNO;0bw5 z8GYPrNjwZ*<@cb~ra;_7mt{@CJO61|d;!;~o}U_uv4Lxq{$7xo?5s$VgwYmi(h7c^ ziwmA$Py%IBLF_JX!^HoB+`yxM?>25Y#kdGboWCbF?XT+@{hy6}#Xw^#%`WVuk<558 z6D06que^%ZBKpQYZtX&D@|&v%P;^r-BW1@K9ta79!5sQ+30JWtX|AO`jJ9Rab|Z~q%g5akNDIlE3w;`L zymb^yhQrQtnAonVlNXe_w7J>`Bo2wCj<^L2zldj2trC6z4o%6PC4Ez_MiryfQC57g zSXAONl{Q)88lKpv$M9igi8&}}$}{u9rgSJYAcFA~9IW#D`g*}7(~aBb^K8wdA4;t0 zA;)FsWWoU^NVQkVC|AfVB=F6#O(KOsy~sORBUs%F=ab*Y^DITo&q-nv-w?Ac682Sn z#j@hfu88^dXoj~MYJbdxzIn{SdoS5oei zb+#9yq`6PBlj;+3#wj^o>|xi#sa|Zn`uLp^)kOaL4-}F&2HB4*YR59wX;!5lXsNl8 z^}9vP)66<$?9E*o_9w=sjARQB6*F|MKIT^LFjW9)eolc{Xq`x-Iw&W8IGh79!d?`R zH0|9&JW>Cm0)0sKX3^eiz3SjW?Suu58PTFw#sV_Upje4t8l#P;@6b2;N(|RM+;>}; zs712u1&=nEEf#D=-a|mB*PZ(Dj62;SS@^Qg#yNFJFZ|}fZn!gX$vcI>7FDu_uumF; zcU3k>?NFt%&>=$4r|FB14GWbtwh15qc$ztlo!gX6X?jfkxMp`m{^+99_o<@I7}ps1 zdq9|lYfIFvyzPOXklt- ztFB43NHb5(k47EIZrj^8fi$ccCWs&PU}@AA_JA1pBi{92;$T417s$P&?sBh&@kQ0Y z9$Fs<%~i|1SKs_CpOwN_+lxqy+S_8%-ERhh>}rd&J1;#jm<{l@y4={dCW{s2aIfWY z;pG}t;hD-Tl!FgWJ&*Ij}8m5pv3!pAEuv(@vZ8ienFg@R0U~dh^}%6t~sB+ySqXK z4zA&3#U-SlQ&gG5+y#uIzV~!#1IQ$*?r5iv;Q;Y;?y@=MpmmodO^EIwo&S259Fmya zkC?{QTlm{FQ-uQhB_0*Ran_nBD(2_e&~ z(w;<`nz1OclV=8g#|(lOhjO^A`Eloq7BU9@W-@aQwe4x}aYfWSb@&CwqSO!=_t`YZ z4#?}Mp9V%hYgW+3!8K9yw3_W<5SlcEtZb3wJE`JtRf`~IP$5ie6;y%CiY_%$5D-+m z@ruK?MJ5qbXm(`(K?&0dua0`k7GBvdV*jI;b#H_J?$URVj8<3vOXf8?0!k z(sC%UFt$8^#?=YnQNyJFvgZ%B15bZeGyV-U4GD@~SeL2JeBI3T(s&q1A(#2)CzJNL z960m&cy1K4i`~L_bloQp`^s>bd&b}^SCmRIq@GCqwr00f%Y82 zpE0eS{3^~k#TBoSV)q{f1v&;oP%@)oq}X4d>BA#%3Kp$h08PL|Z1r_Soj&S(uDE>d zasPf}m+c`#EP>xCtL*+Tl%o8*s*2<`p*RY0kC#LrV=@QwJ12kmn%zj4o%Rr4++kl28U0Xun#4P*?DAxV^f6MVp@ zkwLyZuKGL#(VGFS&GF=Dvmq&HD(0h_mR)^pJGrlR4q~^O?_C%0t|e;_DOT)jZbLaS z2x04g)(GJ}B9!da+ERgK?zZLg>lu3X8+(ICsd3FFWNS%p zLcF`ug|N2N%O)p@qbvPZ#!{!=e0tlhh!s)XoX6BfKsC#P7xYkj8j-n1H)lFp>ch!X z1>0#dUTxzpx#<^#a@<~}sz2y6dxM>0T!H=475y_IH-5-P(930ZCXCMv%wtUa`Iq1i zDz&@YF1F=1rKPIopkn%R700`s@d(@nUtIBwotONxG(pTFWb?^xo(>?HZjw*&YVq&R zSq4f@qy90B_Sn2ybhkgM+_$P_hl~)}ox2r2sud|HM7X|TQU~WfAY7%s;V>~tDiJ+^ zi0((L>Zt8tsQ1#vuAmIK8kg)x&zraeJnPKJ?daA-ax{I4Ydl!`%w3gK)uM!E@c z3urr+5A~H*H(VkoVM%7IgfTu2AZG=jn+3~McBhQYRwCAp?RI9IcC}x(^2Ww&dT9XZb?(fVu$tk+1#O()` ziwr%YVSZpJEW4>^gj6J4Iyj= z{tDSE(on!R)I0dxN4G^>IRbF0%AVuRy?^O|XJ9$VN`up-zzuo=6$}+xlr;M%0~TgC zcNnn;w`n@dZA@T?#@$${{`jcWS&_URjz}?_$wC|}t#DYwbym8DahhX9 zIxS08&W)+`K=dw~q9As39`7C0^W44pY!?bV+@Nby=acyR1Bx+s00Q`u_t4;IdB~QM z6^VaAC78zJx0U-&Qd!-+Uz6Fx5xW)_5w1BVm#Z6~%kNTFwf_UN6?p%#`p9nrop6@|;#$xtHczqugBh|o{q)M6T4^*~^rN?QQJ}a9{zJrLX!ewu@5!Bug&gbBJK`JGdE9| zXzsgKblou^$g*D~U)TY(c}XrMx%6Mshepy?Y=n03^!{b!ETuRrgm#<# z3X;>5??H*Y?UZo6e8K+bRfLjSd1@u*>Nrv`^J&NyvudrEjWPWiOgX{_y71cg9IZ2H zv?iDYbo%2FkC>C^4L%SseZl;fY~QD4D*HZ2!pf~uEsVYB_aE6YDNUaR^?rEV&Z6)7 zEz3k)X=A!#_*t)t_pL^WgJs+P)z)4utUJbxlE!NEGs`rz?k$-0i*eq|3znjLq`ny+ zL2PVm4CTfF@eU8wk-z7>)_yA1#XANag%Yi{t%l&E>z~#k8AZ-bDfHJftL$#S@zf05 zbaL|O1jHBPS)wtZkCP;$o8o5L(bIz2_!@Su_3lzQ18k^$$8Ti%yx2OCYSn4vBGld< zkn>Ow0dxhZC6mzgTtMUmJP7X~4-nGlA!QXLih$R8!K_q9Gb1KtIV zf%j^(?YGNaly!Hsa-R%sJ##?rXv^YB|956Iag9qwW`#sUzR!-#_{ta<$??Yqnz0735B)N4#c33Q5FUVeJ7j?P3$kfZUuh^ zhq*{2oP?=bT@|v(iP>q-VL(=pDNGzN|0u>H8;xEuCdCTbx`ic4w7PyQqpdsK!Ni5t z&~U-mPiRZpPyh&Mg_nN?LG5$h{ImHubBZ5#u|Ae_u2SHo=+1qMf!}(hOBoFlC@S>= zImfx?AY=;(figYe%>qG-HMzbJ$A~pidI@SA>XBdfdkB6iT~q#iQA#(EYCU;?MHA@$ z9Ej2%HzMxu1o4J7Jp+%2g3x+j(*(X}969_$;vy+N`v#YlS-5^<=hKwSGL7i^jA}W$ zAa`A>FMMxF$g;(SsAhhJl`WPR?<-NH3^hpfu3aFMDsKzq(1xIrqkP<@%5Qr_e~anD+0-wVM98WkiLIGAt?pD##82>DKcSwLaL&GxMYf}b#$?r{UrSHWXA6P{XbS-?vvJRc-3Xc4g0^cx1*< z(>9~N^S)KsZEvmTgjb@W^Os2OS4|Zn0sh$T;OoiPD?m@Ng)(j1lDHJ6gF@g3U-Bj` zix5lXm!vWl0J?sWE?AW|)p&6C7( z{fISsspU0#Wis~z^>m5JKGF5!+99#Q3!vj31bCU%EmARtl+W^(iLE6DaBKN7Pg(dZX&8$tl5}tMjwtz z-t8M1VqimIq-DGp_=0J;Mn`~87yVqOJ9-cTkQq^7m2oLq-}q+jRtmKAw z0x*+$edG1sCd+l}zq$RU|0WNrB9W`!jFXzA1LE@C(sL^dZezp$?VefW*b?<^sC+i# zVXA|nAKnKJ6dOi+-+o=1VbLI=e-4-UIhUZrnhWQITRA?Y@t1#1gN#6kp!Ekhyz>69 z(Bgb_Os511+Af7l_gdnJUPlUpugZ!5Ll6`O>KPp1ZAdn%Q&n6lC z$bv6Dp!HW?Q{cSmOZ9Bhoabh?k){?2svcH9G;$N6_I)jE{D9WOJERLy-9Tf~baNJW z?QXNiL~-y_iSvkJvyhKDe1>0ECbi~78uSRrmxK(kEj=BrC?MKpW9-qUfBY_ll;T>_ zfHIz31RZwCYp+8o^{w^{Tf&3|HF{>ee+nWE9RNXCGu2IRk*xDOcE&7enV1r+26 zvaU76B<6tPbQ-{rcYYXIh2g|K4y@V4@ec@{AVFoY46`Rb6O-bT#yvB)rzG0C*Xk)g z138l}_24&Lx-9pybk;;=by+bovGE>Xu;~ezND=GzNuF6bi<@A(U3+Q*D6rzh2%H-~ z3%oDS7X}3NAE3ew!cka1KMYWT_rbjH)Krnu;k1?7aZT|HO>eT^qMhogMt7rq5h>g= zl#z<uZN4Ct&P?vkB9=1Xcm>&DO0T5>RjcO~Sj(5WaS8u)m-LK~ zlR;!(DxuZ+>w$Z+jJn1d37*+Bh9>Zh5)^9NV;%GLaL~8ie)CmuF>ApqcDXH>Y`Q5( z)b|V_a2u*g^$hyh=T24RQK^QFWVOET)Rfb`w7@7|CE#87R4U^qK|6t_S?1gU__Evc z$+^zA{k<${&wig+9E3176tqim>{*B2UOLf6s;9wOgglnszCvmDN6rsyA~Wud>cO1j z_!R#bSgZX>P|*6MLye)s#rj7PJ{!|d`=<6(Go|Ucz`0XIdezpWe1wt8#t6Oaxon!o z05*L$7gAet%Xl-ZR+&-7Ua_x^l?dxS!O&%uHvy#7kZ{b!u2&G$(k zjRz!wa|g}+=X*;ISUoMKUB_mhrez&8f*D7C0l58Y1yuevDnl~PR9OvAf9qgVcv^&l z&Mr7O#g_Hri<^nQW@z-1|AO+6F>ZUGQt7b{NhaK<$ z=2VsDIA0+MyKSa!sx{89A*Q;2zY@^*U~t`jpO-qXpLVi1fDKj_rTs=4{uCCuU&bY= zm!;U7x>$Kqg2*H#!#{kkL?lL|-Q)bEqC3A;hFL>DnXa$2++TYI&tSC*-rpGJTI*{i zsx~C$@9D+PzLqs<7PQ2Xh{?LXdKed3YG=gpHq^Cl%_k}WzSBM_;PB~;l~BrjQRM1^ zN9%;_DkA_x|EOD=L0Lkkl2jp#E#$ku@ihtI=mTW;(EFHsT`m@XjOn7y(cR$Y0zl+O zb6&&qK%~!KGnlJlxOWgj^}8r81*oDpn7Q+}Gp*>P&9{XKSaT%dWpz#d9(8_*rlmT{ z*Qeq7XkUBU#M<$^j}qmUS*C7((atrDC(@Sxh!S7lOx(-!DE7yGdgl4)L|yxKG@4q9 zUv5G?d$fPR_?@9rbe-jrO8~2q8_+RxhPDO92N~tO+N69@VQj0%cA3`FUp&IZj|%<3 zxzI48o`#h_FP7XYt)lQg$qgz<4AN!C?>~$&7CcTuX1=b_Ib!?NdUljQdZ6Z0Gkh0q z=k2`raCT{oIrYvZy?f)NgVcpP)ElX0DMFG|H{-Vl;gYp3!(OxahBG|l?AY_}h_v&Q z2M)NaqgTUX@{Kqg9|1@9gT%7tD59oF`Wm#O>mIf@U)$x4Tc@k)4}W<$KAABzw`d#9 z^}2GbkwQ#`8q%13NMwBm8);Lvymu^-;d8E6`eTszcF;fBzyaRbdbW2E zZZC$kQmqLVzlK#Ujp^CJiayC(0Wt(v8?<(594h6$OKFjkH8TDek)>sAdJ8Qr`ZYSI zegj8L7)4L~M92aqx#U`vlAlI2vk1`gfEe-OW$%jzLYRCnv>q7~3uoHd=4QNil~6(6 z>$)FbAh~pzS08O$!YV;qvtnrXNkaIpmP<3k6nGzznHk1BkS9q>+gc4%29gj8&MyxA zgs<6k0(@-y6T?4lez(ystK8q;zc&13V{Z-Nm1)}Ew%IMDGcF?U?okmvBNIjbVi9!9 zXg>NB2<7-B|6}kun`$paGNpG0=)lG~0cXnp-O%xR=e2L58?EDW-idAmJF{{c`3>tJ zZp*W?6&1oq68fV_%peGu0!XuQK@E^g<&)sFTjq+rKUm zSbzPCDsrFknHejrht>0HE407FJ_Iy`7aJ78hu0siMf{*+3$T>mU~FI$Hyb#Tuogh11A6+y?#pYYL{1}H8=bORphrcuJl%plym?JXke8Rrx3Q^l zRdRa;xF_N(;ZV2e9`3i-=P(mSaDkyjV)VT92Jwe44ZC{CGy8>=k;Vi=@*4k90t%I$ z7R}BPpnW1brGL@Bk<2C5hv~}66Pjj*42p+|Aw{3IKSpZP6L+{KvGLHIOA)iKQCJ~l zsX|T-+PmpoU;UoQ65QRUID=IdGCFlU@%*j;z*qPE{9hlpNN+Ha_2fm@Qfh!=g*T3 zv1iXLfhGeLC3Ca{i42gByE{8XI>L@y>Y}J-mya7AT_pKf;6VvmlD&+07u=qS0r(201p9Q9IMO@V*s+r^1yn+Uw(-k#4(^D|yNaIw|JPG6xZNd>fMsGtEd*l!hxW~ zf0by0;1of-%9CNqrRm0htg<5Z4bX+mDreu*_>O-IyDKmXLvxtuuQ)~>MZ?5=^#^e? zwGNUmfbwuN$l_6y$8@V7;$z9bCo2g8Wv^GIpK$^uS!-e5k~D#OP{5Vzfm+CUdizkf zNJM9M2}u8l&?kc?a9t_@=h#BxBzeT7)*fR->|)4Z8+hI{m`alIB95`KR*8fwYpn9qc_z6}lnAoNAkO-2a7Q@3fP5}O9l0&w(m(I00|pxzz%IXzK8`MT zqs%jJO<8o8H#sME#0!||Y-KKe-Ed9kQK(f6ng`RjX0^IOzM=>AO`z&0fbp3Ajt5lO z1LHX%{_l9aBtXf%38SUg3<1{X0{Qtg*R|8wq02y7jfU6C1@E%XGy}h~mIoSp9 zIJ0q!zzUx;&6GYeT69kv#CPxSr@WbXflvAFnb(0m2W^brwY0SSH#;meU*x+bRG(2@5P4g; z#OXJvbtPcrG=bMl%M_rq?s~h@k;tO8lIgr!FZz}&yU;e>A`~ChAh1XmoqyMu7W-rE zH67E)t~Llz=(OquFQ*;&TFi4T0T)i7X~aNjhe})RyPA@G&bqf5vqv+h5_N*$Kgsmn z*iR9%!u#QOfyz9>e7E=s9pZ;O~ZbDGJU??$$OcCLb{4K&-;= z{$GHED%wV4{>0qFDH8GbW#vnPAD+QOjNAV)qHQGkMBq^A_Q_(scMe|t20#4*hlW)C zG`r3UA36oEV*rDg{3Q8;-*DBd>hJt>Zi~_tc<6QMHbclPbBSf)6 zL;oAn5dwa3RqD~wkBNoV{Rwk*UGk<=@>zqh{g38MrjhhJ$V|Uz;cl^)GixA6XeOl` zBmnv!VQqlF{i&{2aM8RWPB1Cr5cU5eM^$jZoa7MUzQ5Lg#Ha{k05vCvMTsdPVqFM6 z1GKa;u{FFSfyGGz=6AQZpVaOnTS{F2sA~bxyzhDE1`x6LP8GKV+#JaN=Dsag&La4R>WhY&&5_iLo#q-)a zW&9YC#9KHD0f*M60^PdZniY|StvjVnyMPKQdlSf>kwd$<9FRsABgQAi6gwoM`~1!a1X(9=`V-PHqH8bjzo`dx)=tsh`#IxzAcWzO1M zcGS%<%J!}e^B&M5GhJQF__Bj?*K61(eF13WasJ7{xAS&0`qonMY;dx-o5tlMaszg| z5z&tV8Yh=m4T=&~m7H-4;oqh>=$Fhk1#yOAA6YH|C{~bnxQSsgLupNsl@;gcQ%ERh6Q>BJS!(ZpZ>HIxk zuhr8|JyfS4QgcDF(Ke+hf-}d^i(Cx1YK?{5)ij2%M zt_CcEmTon@d$&DdFu3^E3sqbW)SWV_ni$8<&8EDhHS3r~x>xQ)K$Z7Ah_X3TbARb} zZ)sPK$NSY9TP+ObZ_wmkVmDLSWe;>EF27bO4vbTk5dN|~3`mi4w_dK0$b!tGo~>Yu z?p2TPmUj|X;qf$&0IxseV?K;g)UyA0tzRiG;CH{#`4a%@KN&iHmuXxPsaM zvGD71eO1S%0^A}LYX`OzWd>q?W7a|vF;i)+C(Od#Kh=6(li9NbwCV*~_elG!aTrtg zIT4nkCvXhjH6B6Na~zSv3MD@<20Y|>MYP`l&{%;TaaIPidmw0wZI9J!62W?{%jCPI zWc&n-c!deSy&Igl<6E)QpUWdj)QO}!(5H5KJpH^{eM|B(Sh5`GAW#1TJJYak$-l|( zqG^c$&FznLHM(5t?d`q?yo$(o8T~vDcAe)A$mfSKvYy?=9FmACNjy`0ZnBF74`WB; zV9hphCW@7ro8u%n{@DnH_65)iyBmu+!<#sQs`6@grmEY%^=jR5A>;Nm?>twirS}d} z!k*9s$6q$V5ltgepB@N>`TP`*D8Z#CFZaCMf#2HvdFJ=W$Pxb84wt;PQ}Rh3aKxUA zfre}`;dsjBCZNa+xSZ$hlXG_$|NghmZJH$Y$9)`3C7aLH@5^YZb270-#1(4ynP!u( zZw6w~vH}uY{9}bakH$~NBuc#H^|!c@>;01@23hdS4{+9+KSZcQA||#TGqWM#jnqw- z48-ec7G_b!yz$tVsQ$hP;)v|x#B;X%H;?+m#tts~KN#PvY({dFM!=$`{WoRkA``g` zC=6Xk<#M9qS2h9LjRMA|TyUSW%W-K%ArItPQXQoW_KwhE31WL9)t4xFjA-89L=c5@ z`H{UKY5kCi-53xNTlwUM_|3hR(;OZGgxo#ZK1=@Z2Q=|oas|e8H_KQuKAkV#!%Xd7 zHFoRIM0)g`K;1Zz9qn?{Le*iRD?{Ba6TkA{6X~a$x z0&*ar0iT@}ofIY?o5dMoLlWi1Yhm2zYNb0EJ=b25y#|_rIPwtlsTImc)<5)I4$N8d zjb*g=^YeQ{H`O&85D=0eohdy}_?-0R&0TN#B#C-v1stMM>=!85z)5d<+qO8z>QQ*( zQ9*YS9Rt-0htUx(0zg(vQTJVJM7FNM6Ro$8<8UT%ew(b&6;tRQ$+w|hyzgsu!9Vd^ z5&jXR2g`ZH*AY*5fzA1UsCo;isH3i5co+s5Lg@w>hVE2Aq`P5|?v#*5I)+lZ8w4ao zx+SDLMUWN&N$KwT{yfk7e)rzBT+1b{Ih;AU&)&Zvm9l{B4y>HDU9^sAmFp3y6b3ZX z_1r}?EW9nFnpb{}CHDP~^Fif*u339z2cyVQIG2rSB#t@jz{5?z15kX)l$&|HMSuDO zNz#PHy#z%LoAhdX77siEhmp>s(wt|Vx774Rq9+B*oT^+MI^)uFjLD0D?ajT3%>7SE z9JF??J}ck3__wcD$vSg#T>7azvi$B(a&RzD0jnJaP02U03_X~+*wrWuv`n*81E_~x z_HcJy*bCU*hsm#mgzr~SVV8@*9sA((Z`k;L-I)CTH0@ZDrw9C!ii%cK>Aarwp;**Q5QAdB*u+WuTVS@>54o$wU3Dm^wss5KbaR zy1)l{l~R0=(zAfWVCq@koGT^$8VmV+v4cIJ5DAd`_yYo1)rNF?t%4!c;C|8oURrj8oo5?acCn58X*D!b=fwKOi6-X`_2jGBs-a5 zn4pQ_3VmZ5Bf#5ucbX_NXwkO&rXoD{^$~=D+4kvGljLauj?~@My^3oW( z=pFUlKiTugtGH7F{-do!AZA^H{(}x4rSDx0Iy2??6QPO$_l$=0&Sf%TVd*yLx?v?JdGpC#U_6$k-6*boSw3B*As zFX1UFGNjny6)gP>LV!(^q}vSO?Yn1c5*3`U^u?kpO~q>K+@*?oLN{dp4C1KoVyMZ&MAnQS&WwlmQ7%F*o<=Zj>{Ty6 z5liyr!8qh#u)UX(YTN7dMw$dC2eG1jxlF{HkKA2o;(a&hDMojvK*L4T|I<=!Iri1| zSES%NOn_^rA0Gx78;HGF&+Z6@tVlxX!nTCzq!1lpZ7LAPMbU_IwIMBJFUa8;?x1s0 zz_nP!fC7y^>X_p1aHKmKa3Y&ZDeQ48gpcDG0tS-tx2k!7i3cxYZBUL)7y5-pBVA79 zMSjkLh3r}XsyJxJX$&eNnM?Te13|@IABAI7&zn@V+Rymhwee57w? z6|;;4o%Z*`Oc)ZPo-{1!1{fE8^qXYA2uC{dG{P_RS&!*k8qwj6v_a4NByh#RtXh~C z2s)iv_8L*dc~Dr*WFXUt*w6O08)|=o5x~DpIv$#JnEBGV-MW<6rn}Akx}P1?m+O1l z|7wenB5enk4OQl_pGUk)3Hm@VQpJtqy(zRL*f(|O^qn>rWtz+MzCYl$UtT;=m(pKt z(B$Qt9tEmhYo6RuDb5bwGLnI>MV-X4npTsT^Ovx)7g4XQ+%$-^UK~<0n*4N|7ZFEU{1==$r1e# z$*^nx_RplJhv_zZ0uPDr$ehYYxpA!0%fV*ob&5f{>ho2hFS`Y}J$!8`akkG++`;R3 zYWt62OSb{$()roW40Y3Q^+Xy1om7GF*z&Id1;5L-R$ola_ z=)Qu>cMIweRUI3$hZz~*RbbY~tin4>yt2Tt+^KHCr_mi=5Jm_V_?Z3=n5&#IjfUY& zM|xQlhgd$6uneo?Z_O|VR-;-{f(22z!}m+4+?#R8N0GUaw9~B1$vqn ze_O5)WnI1zZV@IW7cEfM@gnfk2j=8s(!mkd2}Py}6RO#Fq&JVRNZKFyQBSU%IEcB( zEogO2Q>*b{_D{D0PI;aMsB%qe;3;dtl~v$ZxF6oiF?ebe{{T*+A>5x3frKUN0+9M& zuTK$ZptCB45Nk8izUZ3BE%f4iqvM2B$nb0BV|e z(-Q4gmV&=#th|$Q>NVX0WR--yjCOExt!5oBT6<#ZD>B(#k92ad!ympEx3{}}5=bKJ z#p-$~uU*|1~#=51I_L!N4&uJnV<%EL3G;ym>(%AxdtP zfX!z153ZEq(0+Fw){@8cUdgv)9j(wv_qi0{0TiwRJUdKWlK7g6-wnInxr0rbFGQb5aOT}csdLtj}WBkJP;hXu_7J{H<1#v`R%=#qqu42=X#VCMqO+N#)1 zbvD~mAQTtA-Jn+bF+k7SUIF}&I!JuiVNj{!&1`#=7_xoI^Y$ut){jgxaYE7RH#eobfOymlijpEeY?50yr1% zAiP2Ti^j9Ae^4%rbT*WZ0*UeIZYgbXK3k(Ob0wJ-c^LyW6h4L0HlC>%i#`HhOBkx! zZbi%SP)AKQ4@D#x`@mvu?hx(C=71w$;tM-H*Ic1gIT~I~M zV_VlAY~l4_B!wjUQH&4L;o%M3Nz)NuRflxI zjvT*Lt>A(NiCWi=wyyUf9jCBxo*$UofO*gqB2%g%tJACvFcXypvJ|zb)kLhG zN$Psl6AIkz>#9UX2EMW|(AtC6ZTw}b7~c^KSEs8Q*zgN_ATX$q<<1&f<_M?PaNKd= z4Yhy(=`1K9W~q)}1!5MGd5r7jj(&D(8{Eaw7 zZ0uU+?^51l8;Pcn+V@zu=H4HBgMn=HzQ5E}7aQ!7jVB7YtuW~{AXz*3IOk}z{TVr_c z&)yVx+2yf89~ecgNus}+4h3+eUi)q7jhn`Tf;_{CP(pA8%giZ69221Dfl`Y+lli=| z4&op^?qSj>VL{S}TM97j8zlUqn*K(f@`|(zLov>_>r!)PerhPT9;YjaJKVk$8p7#d z`R=WT)6TLVVdl=S6ku^&F1l92hP)1Xa~2mDtEjc}3vheMEI%dt`(DzNCiD>OGhrGK zsr+sIsF?tEN-pUDgWzq51PEyDi8It-JGkRb|4Y58ifLtl)w!8|sz(**F40j7vYzH9 zkeGbWEF+`hj;4hbFTn|z&HgH2Hpp(t7uEU#%8P`rolOq4*+>xjpWxtevKHp&=hrE+ zI@26mA7@>{;$>`t6<29tqSbMwNdx6avJqJ}?}cxtho%~ZJ`=LK_Y!HpVOMp~JFe^- zqm0)bOk@eT$2H6hTfmgiIa|;Z3NK+fF4_LeuK!I*adN*T`Q`^6Gz`j@cNUSvt(%l2 zB6UJfUM<%4OHziQw-H0zbT{5oe~z>lMOS?8F|mManYFO2AZR7^JT||R zAon+w{Dnqn>yTaexWhIipKR zKsUf()1m?1qO`9;Q#xs}V_kP51^XDb|KD`+JydDwUFp5OeKV`|)Jvs~(iaBU9MdF$ z*vkUNY@S~6)2QQ^A3mQdOMMNN7d>m{;{+E3n7fRw@!uc5jma+gpXE=(WP;)0IU}SP76-6PCWLEnSrRj)y?;{F=>7p z(^yEHe=?u*JALV-&~BK*?2j)7-dlyVeN4K;p$y_uGjOWXda_>V1RhWL(bwZ{AGOjm znRy_3wppK5>%g1P8O-Y;yyPqxiP|Z8hBzDwg)xOBOKBQ7)Ro`fDigCZlqS`f@h><@ zk`CVr>pvNedO-3e6dKIE_tH{pOzi5yg2azhDKguTJ*-qmpIQ`PDT>raFq&d!*}42? z)08I5ZYVh1?Oi2fW~IrvqzmNf=rr+(_u#Ou@X|>)#a>UBhBZ5-=vPD~rG5i$SD4eN~sW)Zw zIySu#(Qp3&xpMPCm+)jy!k5s#0+YWXE3%6=Y+weKI1?QcQ?hPbR&e!TJ=v;`vU@re zWd2VxKnI!g+9%&Caam`L4xE}t!y7h3(1x2KL$0hB802cx1gxluBVFbqaK;9RvABB~ zGUDxC%u8p1($=W{(j<$%GjX@m4CE=y_3Kn~0h8R|PL!TMHP$tBbZ-C^6Mz-n&?O>$@MAI?-9-%h#0^D|~ z*)Ud@hDH$I)QAo$H&eWDy!C_>WQE+lUtN!|V6#%Z&2pB}EDW>b`YgTGX_1M+yV0mr zr5kSvMik?6JDVZO>u4-l9SLkWad;Ei!$N?e7_vY zM+6y1+b!oUXlff;V(ya+nSY3`ms^(-uE@mT95XExeW@Uvqac4R?-J$BJ-CjF*SjV} zR+@M0`ylKLfjKmi)Dv219UQGv+b1X7e4qev8Wvt*S)kAnn3J#Jb4nNLv)UPyIWcES z!90ha#hjoQpxPI4%#X2v%n5ee6;I$DwOaP@_kb5$^gJ^|s5u5PYqi+RW9+~99hY5z z5`<3Q_mpIx>;r{P_AeQS9*KluXe&o*B>QwjCh@O#m)>HauqDFq%pV>scwx8oi|ZUQV(b97@@weGq5lZt$fKN);R(|;lSV$q{aYoZL-Q5`Er^)&!!XBpww9=p zPyJ`mSxqvg$SG_s1s1eY6kj59@p12^n?({Z3-hLT<8xMrK@x<)bi-aKh}B4z+VAx1 zr;YRvX)9izo~2u32W~Z5u}%dxy><{z?i!+-Ca({f`Z=By@T1!=B%CA2EEpaW{+z)} zDKFX44}u}3+s9PMv~HI!cKL>2L^BbSoUR)vtWfo7R`fgHHnU!ozvgCeO8mWwgRDp?;iq@8^?&HsdiBG@gx;M2-+qSfycc^H!WKI;KP;vuHPx;lDE zp2?J4=Wq=auqi9nr%&}AJ(7*Y7R)X%jwpYod51vJg5 zA?wx^E=k=I2_E~_#0j|aJz``BS(qLp1(D7*emY#gW)w;%EYfY4bT12@=J(d-Vq-y~ zMyED7rnbw!#lAGlh@}9C-x=h)PEYd<%5OTCXk34XpEpdu*SBo{4vKPSB!iW-Uan$v zS_f1)PbG=V_t#wmuJUEYw;I_bs`VgMCHIoM@uOw!8`>haU1}}#irapVu7-RXF%W$i z!>vAd<@RN6%Xi*g2O$fCN~ zd+wsmKT0xRt07>%^ytucBs$=eeTE85h-ihf#V=At*htm4&VInA+@$J($eK+#i8hb)1TFb*-^Z_63*1a`t!Uwz*3@PVhGid`~US$Gy$vZUE%V zs^f{5hsxFjh0QkC;eho9Bl&b= z2~qR?Ui}FXp2D;!nCih}pD8h>qj&7N_eAf15f~ew^#@ToFf_r<92U>UP0K7DAH*iB zhsQ>x=pX<4O@Uj&py6MkRq7lCQ{(z?EFcFu)^ev&y_u4-;ec4`K-V#0ezP|GNWv94 z){c0>pPt&Y3SLo3$1iZ{6&-RTkT+#3&G9b$DeE}? zJ@zezy3?whf+bz(DU8CS#YE+S4us9OyWmL4ap8YQJ=p6>~uvER;ZbCEoX~} z4&?T`;=_g!WX#?1S`)N|er$%R_XFj;yQxz~#qZWh&}5>e#FE^9p>rkBE6p;Jl*rv* z#_zelLBQy1jy|fh7Nx{M{+*3{}_+Ux-X{X*|^*@}YAn zJJp}&M|oSw!Lg@tTjJ!`6p?)HY``I0*zSCthpdc;MkC1Dths3sxjPdAu0SzVx@Iz* zqiHPx(Uc$aiUmlJAL>uX#)pN-5x*{6Ex#?Sud8Qh18TREMR4h@*votyEt~&9EGEmw zQX72Ead8u$GmE;OHjVjJ@ZqJmPDdRK@rYuF&;e=p{lGGbu2$=05ibDmBqIirmfe^i z@5T{bfR2*YKiyMtVEG_h(D9i*YVrQOLDt0wD*`?Q3qllW?jy(uPZW4`N_R~EmcOyS z9JVvQnV0K~Qv9x-U5{yeO%)Iy9uP8t`8ODls!HHM$b4#)vnfq#8vhNzC=My433}UH z+Qxi{k5TZ!pP$y~VJsy+41{vD{AN%9F*)egWE^tHHl_9|&)u)#=n6y3;7zdydV#S5 zAH)iPs?r##c*39pOkyzB@-;+kU3g_-EUeD-h=y4AOv;5QBH#nNeO#ewI3b7@8hGgy zh9$}5#Ayy^WB|dUEG_Yv+vE)D)*JT0u&0%Hfbj$56?tWVDsA1|??=qqULfcQGO&*% zGi4Y3E+Z+y%0?rD1q@Xl!z#((e?UuLVn7V*jZ`Kd%98s}KTrIW;8r?l3P|%LpanMph1pLEKstuf)V^GQs8UZ zP&P2%G2{;xJs90W2}fPCz27Odk>ew$;WNSV0flk)Y$~#mLNvO1PN+$mN>241?{Z+> z$pTu_8du--hP1d~9LY(yYFQ?kbr>@^HB@*6TYy_K&Rtlg?04yfsIXF`m*^$qCU;E< zG;KvCdRXjx7&^+kRH3~)00{)(BcgGURm%W?Ps$Y>r5Q=^OX2Rc4G`rF1s%yAqW9j|61{Ww!dpGB5EiPlh3jA`e$% zsht|^xsRNKTL#KccV5`uNpOF(h*3iC4_f?!9${0 z?!r{*ESRJfbQPTpPIj3zRxYt*EY)%-xly~f5lR8eqZmUm3H^FsLN6paaK)KpwPyyI zUZ{hS{=EXdGqjSZx+rEm5G+uV9~4&O-jh)GJp4BmwW0$?nVeInKq7u8Ee0-TxKyrm zkoY&rc{dLfIT51O+aIV3Qfj0+$ED`4)>fcV=qPXvf^eclz!_dk+XXHAnVqy5z z>XorBKr@e^SNn3S@kNi^Lhk46I;`U3zf0c)V$`$(?Z^pL?_mLYW?hu9wpg=FLN|BMkq&}ow(K-MY1%TfFcoynpjk~>jB6!IN2S|bbbu; zt&GSf8;K$0ewmhT@(M9Xs*-EVIWGf^yPy>170J2Vefu28*+A*F2NbFF8X-Z}^!8uThXHRN}-FN+Ux*KyLUZqJjf2)7Rc9&S1zIgOTblnpQj z`k$dmFJL{|VK@AX?nXX)^_DgdjiNmijk`6&5=4!1%PPRl%w`gFAhPvgb*DN)l|_Op zdKE18Ok9tNKzx*MuyFF zhd=FV$Vj9z2u10a(M9vj)X3maWQ>V)e)z;hl)C_>Ic)7pxh7{yrHcfowxU|9IIGJ< zx0G@w{BF@U*;KT2He&jf9-e557%-#|();(*xQEWe{pH>wzCglP)h)AqpQQDlwD^@$ zh8-aB6w24cqN=KEGH6w6`AH^FI$g@9|2A{VV`N0#v$AmoQ)9jz;Z<0Rg=x9Fq@o)% zQjMQY7!z=sPhC&ab{I;-FZ`+-a3Vk9YEZmht_6i$wM<}rkd~TP!WFKdh=iYhJW=~{ zr9!syMop9hQWiFYpJaMXjI~tUj`-(TW0>5}o!q~Iw3{Fi=^5_uhP$_h4Pr}A;t15} zJph=dS6Tf-zDj+|!#Q+{EWhh)r%G@eQ0^jb&<2ktQrjj8&z7Bj6?od zQbJpjx6^rXTOK1y<%SPts1@XtClshY?TZ{mg&9_0;$7(uzQ`m@=L(&q z+nre^WxlrSsU?m~o0emBrC}^FGKn|Ckb2Dj4IMW}SjG%wDtHqiMjr8DG}L9_aA~u) z)sn81O>NE;InGJB4KjMW!$7+pJIFcVxm-1wCH zZzo=B9j?4U%Z!7^+);-qm^gZ5S1$n8BMmRuo!X_h0TE5Lxn*tEX2d;-bMvgWrYTGc z7FpD`FHJt-&av6Bt*_88|KYux|8!)}7K8cX->_R)8MjO;@yt*7RO6v#g`nYHMoila z1*$Sgb5tM*2i_!NnZaW#U%o73wy9v*!y$u-PzM4PJbj`+-aF+-V}~DA{nf4trI@sj z-$qzys=fL_!tD?rWFw_?J7^z)FSoD39c;ONN%N~9&d2qOal)^1w%C8OY`bauB2yW1 z!ye3Q40j&`E?+>72R5ezpk7WSZk!8C3JUom4Hm7n!9*bmhAn8f=J%Sy|L2`!qMrZTc2A_-lxWrTp zJ+{|3Je?7q)o|=KGm~MLG6}hX!Y_OSzZm6Ex!asyw3P=TV`VkPifbY%d)LrnT#2-q zSHAZ>PC)zE)4kPc0qP8S;#I>Z&e-u(?VBqlo+J_`!?OH~>-w^}`_MP|pn47+dC(-w z<_#4P69Q!c=LNL&%cwOE9xM4I=PUZ;p=!NS5Pjj&5eXV79B@W&zI;npoBS^?k^@sg z7&{Z(jb^!(VOPPN97q`_ukOjrGAi#0L=wZ8?+RN^J{?3Eo!6vl?pNF#Y-y$JEG|16 zm^9z?NRdmY-;Bx%ss_VoLysvV?tuMd1=2ta&*LX7e%_R*Qk?|Rz)qyOg38ja`JyU0tS6N>BWiMxt1W_sl4hl#dx%CYk+EWzDj!C@P z4@T*Tutk{ktLG8U!kdKB99S9O&b6gqa{n1RR;u$Vvs3cONs}}03PX&dpLky(q&IT{ z{M}Z<8D*-kgi2v$Ml~#z%iNaKXp-TCJ#>6jiui<-N_37*>nS{7ntcjRPPE?efE0VL ziYh)ao%ivTdUMYHKN+qxlINeGz}oL?TyRNDLNQ457MeRV#Nz!Ve-C5sp!;oJRqRr< zJ2R>+XAWuHUT}dQM?hUHUZ=`Lyeflyi7eXK_M6;O>V}B153%}ZcNES$Uyl9?>92NN z>hU)rYNZ`wit5?={scVSnG;)@n!nswG=Dh)C`M}H{`*<*#}XR?#iZHoW3r@qWo4N? zUabP}ViXr<856o#aFrCpf;-^P5z>5>L&OF+e)wN40I0PDp*mPAE)+yF8>XeMJfvCk zHNX)Dfg%uOxiZ8QG`LZ>BN9IeTHkf?$`a1nN>m_1kh}}72t-1E(!WB81Wf`vo|-w0 zli~}(WhAPC_%-mjr=dM~SBR_hVW4y^pFR$gNAD+T3_;dM5GR~}xAnlUQXUU$jD=at z(_xD`P>=8Y`@By*_!V-48;z8kpcg+UPe6(GjV)xDp7OS@e5xFn`-9K$_=2G$Tx z)p|3uy(9<8I&%Cnuo{KGf6}m@Gn9Vk%7I6d9!Ldc9#ter8!}5%Y{scXc`Q7l<8Y&* zPEA~zD7n!S6^%R_xEaQPYE+gpa`|mJ95Tgl$)(Q|!4iFzE7kv35S8TlzVJ4KbjMT`iDCBni%~a zh7^j;`r3?PN~CL#d|UosT$mZNjr}7A;O9$1XSpKBfScbmEL+x386tK8sM?X5#c&F{ z_?9}dEe?lYBsS^A6r@nZzd~(aFej{7KJd-Yp^*^dcT)Q6!2^g+xyrmol=A}sS{7&x zL%ge}Y#6k=xrl!x6X7Si&q-Fi6N!e4IJ_A8WF76!MI9l(G45UGf9IX}e!*H=hLRR8 zu+`;%R%)CKwOUk_x?#xkEnGfN!a;AT*w@OABEt*S3#)e*L-R?(UjP^_qj;4#v zRsMz6y#(_r>c3=8QEJq!Pa^yIRd~7a_M0qwcc*|V{gN)(`g(U{@v)@QPo1kGHrD*) zE=(@W-xomGQgvLJ>(pmkqj*A-3-T>|iwZ{iRC?mjz5;g!PoZ}yh`qb(be!G9@jndi zlZtQ)s6I4!qgSo=LG@j9M@dA`U2jp+Hy)p-%v_1Z2nBRI-*~e2!PY{zB>6-$aN5Gt zE)j%n%>-QgBk**Ob6>CfrNW9w^GE;y!W-HETyhK`Ui4kasMvJ=R+b5T!yGiMAC1)c zy83;Vo&inumQj6^4Y-+Xe0=zwf@elvPh-SZ;meQ?f&Hfu7mxgixPw|mxEb1WOQrjV z4_DuUYLjf~HrHD(7WJ=3NtA|l(4u!tiQb@~3=bWmx>N9~j{NOQ&~7_UHeILo0J{Wh zRV>H6Z=-g^h79x%o#0^!T6;Z7x}(`m;PmH`zrDX`cZ?vzJ^#DiX^XslSp5}*AA2S@ zL8v@_`P2j48x38rf_iph8R05HS6j-`{+QONKAYA7Q1?$XtiT#TVP>ZB+uA_yf+z!x zXUx@2#}JBmxTPlAMXJCI%QUnRvh0A=3|4#(@qJwq6M6873gWwP>}=PZ-Qo=-g=46l zd+;o&2exMCdG=-B5s^Gt4I8Ld+bc)~>gzL%9~}@#gDwcl;OQ59K}^qdJ=^A*>oC9w zDZ{=%n%K+6)VM4M#X0@?79ta6K#N_gChTa1u$E{$LXDNY9WYyu76RMt#|V-gU?LmS=sfl6Y{W`b`K7 z`5$~GxtMa5gr2Cf6Fgfr=z=~Jnef`DMg%&3iJ>Mx9bTZ;4{*;CzIR#HF48X{2e5 zT(6XT=>R$@h1|>(j3vf-Yv1O2GRmJiN{{h+)R)Ast56u%n%%zq#|3sFI-2ETirw4sL0; ztPsVsP3BQJws4QcTgdBf$CM4`srs%E05I&iHa{P_hWZJ!$e>GU%u8*p57aKLQTG7b zrRDS<7!_%9eZ+;tS5~Htux8(nv|P_2o_*`rLfLumS%W!_zcsX$zY%qPfsm_xZ-WCt zxM?WF3`1}`2=%?j?0`q(%6HD`kyRRBV${qFu3T}VR5AvbcwZ=90 zn}jJil9P6@oI-}>;M4<<@i?k&(^L(8k9s=`pK93Y{s_Io<9L#Gq=6HpNErwU|I?!r zh?}z^Nqrsn$$Pu_ug5X{d2(oOP&)xOiCXcW#Y@8nNAo50@4xR3FVn%pNZZc${n=@`BYBm#8__w-%t{nh$6zWNFq*Vd_gUiZjv%%QqfdS;A<^cB5Cqf&#FcKq&QN%SnD<%z5bHiX>fwf9Np66J09 z+_#82c(MA<;$@>IR{HrI4xZCq{fx{b)k?wuIm?b{TFD>gY;VDaDy4=Gh6II31T%HK zE71Ijx1Qv{--G>iquY2d%K|Oc&|Q~qCupsL>|rrt6;xpLJub7x2m{mWb{UsIjF|Cg zY(i_Ub;v+jZOxL3lG#q033cv~&?1yz={z`^K#FLjShd2CmWI8(VJMd9_uiXrC zdhU9e2I}~fe)D-mtxVv?lkgw1^hUU57Mp@uz-&1(sYL78p_eGSo%DhbhE z#(jTS3bi6duE%4w&hDOj(Eob#69Z`jo+x#OWDo|*kjG{acByBM_NeQ^;QyiLan(Zk zBHkw^X7c(h72VhZfUC71TGNz-4rYe9!(f^!7)mEAn)E%uJu|Yo(1CQ68l9E=bG+Yh zR9Ii-T)N%hr)}Eo5k(!me}u*YJ3P=tl3MOb9S7^OC^}Bdp)h7oqC>#~{p`8YRO9G0bYDIBuwpUFC*L^g@zfY1YJzK?VAv#E zQW2aR`<+dF$z8RyyrfA*9+Eld_C2$tDkaz0B^&dU`TEh5w7N3DGBa#RobB1l6WoK5 zLT)@ceyiFR&Htt4{0|GNW0w{g^jH*{EfT%knsZdb`UWy12pz}xG4AN#;c@X5ZSCGn zVfD3b`Vpn?zt10)iVI~4N3CkV)NP&vw7=At=&3IV@rMaDXd{}Ke1d5)TC+1Y=pFd83)rjKe0W4=U>o0X7*52j3Q!y&JjPB?PK$da}iuxDpX;XF^I zZD3lU6|JEk%cNEv>`lm@YgQTBOmsR%xEIjFy)-a+9G9Qw3_>64mh=`-8>S z!lh*6q~uP3=ypF$c+~DDw{@?Cg1z^MHdMH|1*+HpitoQwkhcL@`!%QEmLko+=l&OIGXY1D#&xQG+ZvYsm&2)?{FZ@a z<2obv#i(0bTik^HBIs0ZYF{IhA0C-%{~?AIx`w|!0?z9nF+%%|CVm}(kN0_u1|u=_ zkp(6xtRQOr$R*mV&ABW4+VZ)ye@W1i=>2sh31@{K5iuBGUhiP6R)|d_{pIu?i_Aa5k;s`~3dB_!3pS?15e{e)6lRtv{M< zZauDbuXD%X=(M*?D}Qushurt*KF8XIpZ`k)CM7~ix(Ak7eblk)+efP2$J?R*CFy$p z*)bwf8UW70mPd}^-tPtq{l|R@5R@HI)B>V@Z(x=;>Mch2*=C|o2t9J@|7RaPjRkeC zJK1%Z?Fb)usdhKaQ2c}P2|bE(+)%yCJ#WaXSpYtiE8Ca(Xa@8DZa&^Hv3_i$Vb1mc z^FQV=vBNJOtviOa#}cvbdT-wr;Zc_9No|b(I5Gb}AO30dxQLA|e*65-BL2Ay&FyiV zuVXFv=PORCIN9XCo5p zESkmyY|uk<=%2*dLI>fH1795@zy@MaTzsxHtE#6JjSYqkXXlHNb=wn@n>R~u`Sj#j z_Z0NxdB;W`%BV**ez*=D49L2sy5=ZnzU(}=)xt-?!wocJIQ)#`H?Zd=I{7lgW5k_YYsH50~cydf}{~c5CaySz@GrT%hMv!y>s?&s-g@88;-yOlIF#qWBE&Jd=^Wf zDJCwI%tU1y!6b_-Kn-CGo4)io3<<>!MiPR$k%eW2svYq0j49E8HJ_~ZZ>q!jbYQsJ z0;KII+A+7amFj$J#=_WF^;BBdIPUIMvuy)3DoTu*iGK-rvOO(6K{!0aNaP9csKT(u z=%|X{3hjiZIlUV^Y3ZyXyt_k1e`fNxEA-#Lf239A$;rvH&F@*i0AF(1^$#J?v1j1N z^u5ow`ZW@M1p)z=H+6irWS8J}A)DP}1( z6&EVEQ5wCNM~AGTEC-7t2>N4@80U{f=@-_a=Sp1W9$N^1TGvbqwv<}-Gy>J!r;c+5HS6Jmk3mdOcTK$!$deOr+*x~? ztg<~p-~>Ha++z!cLW|q!&?MBrRWFo*YvX6_DBI>V7z3!eai@x9`-me@mFd>Of7-sQ zDG`D%^MdbMK^AuxbD)wYI1Jp6OFDohHvM4Ewe;K99{|=9h?s zApS#mqiH&^N#<;-s;{XYx^-2QQ8=n|4z%SsxbGu-M&R!k_?hWU?O-2tDsm!ENL&A0G= z`to_3H{0(3S^|yMr2x67~c#XPYR73|}l@>c0_l!SR70!sg z<<+v?3dfLZ@-mZ=9Hm*`P?KlQfo8o%VFsyWo2n<7Oy7N^_QK{Y^BS!0XKRZj{?QKz z@^HKMxlPW@&=5z%NheEU^GK_>ZKYU}C479)pHVq90gz6HTr=ab(KVr;~FpOiP@P6!Ae^(Vr% z8ZX@w^*QYK^6%dajV6%)P~VG6%FK_@2#rPs2Con0SVwbwav|#Bc08baI+tCq4#aQx zKwN(GoOPBSu^$-x@v!#0f9SVwFN+|JdnuV~7;12H{eKSDA}puS%S!)I*?Wpw7yIg@ z%=K5t-8&6Qncb^}3!${Q*RM7HmS~UC(#H*29E#T6Qrp;e1znw3kG2{GEy$UsjQdP2 zNW256{W=Z)1gj8A8GRq26pkZVsUse8hNbtKC-Da#%9zN@uD&vT5RVo>LD6uypHV$< z$xg9)=LHCvNS3R*KY1lSbLyFdp>xX~`MuurNaEdm%aq^PeC=CK6`}X(W=_#Oc0?X7 z5JJ5DwM(MiJ;oew;+w5|V`J@)nGT*<5}(yN=kp@&q&xiII<#KN6mfZPt!o?RiUpjB zm9xJDrar=6>h{-j;5(9)y1Xl9=0CWfI>;(2B-3B?U)5i?(T!<`cJH3l6>A(WdMs_5 zIqxmhQ(Qc3eKt+W-Gy^~dt4;?ZRQAXMMc(Z?+roi^Y@Nk1T)V4eFe{n^qL{NvA-xP z8b{tA#^Su*&3m8f;5b!VO_zIR&9;>yJC_kVWS(_5tH{iMCt%wSJSsED_hrpS%=z)Kona|w^YZJQdZSTx2Jknnz4xgG z|1wT*PwY%O?UJNS1b`*=^kd5L^H}6Y{_6O6tpskIOD*oCVx^`ydkKyt<`A>De+ry5Rhfad|5t0-VL)pHcoQc_aM=2WXFSK9 zH_*j9?sIdTZvS^~f(>3bF`p`K6iIG4U3^|<_B#5XP?Q<9W*A{}=70W-0;q;`=)V0F z3Xn$$Hi0T2QXTOai7o@M!uNL~XOkMvJLL_{t~aQ6z_tB#bLQ{eL4YVn<8n~8-KVTH z1igWSt>EhGOl7xxj;+Wmn-CV0B&b}IpaM)YiuR{* zQ}O!u>s}^4VEi$=Zmu8MeUAbi z6L7=djIqq1#~fyp5C0!GjaYDp!E`$i%$=?I0l}TN8d?Xy3$}N2b89>|ct52naCiF4 zXI^WB@nqwNGbXat=YqtQcj_A)SR!&K$zxYD)r2e;C$Z4% z9P`_E1ulcQoz;u>2frmI5QA#=+Wf-LSOM1-wvYB6pgvh`MP!@J8xaIfM)VghXSs9bqUUwx=vcg{=!v9Bmn-g$<<$3da zDaLX*#S}=IUjounyD4ZoTRYR`-7jVgf&rm`(LIfT7V_XuSR0TYxz4--5PaM@WzWw&b1b71IwEGKhjO82<;+*e0P4q=mI3F&Hvl%ugp#c2D zOS5~ALH`C|X@3Pect&4%^_4R=-pEFToLR7yKLePg*9sa#qxozq8%jf?|LJsQ$6-P4 zc!lBm(?~J@%$FLVOPX}#VeG?Ytgv!tBP!D9y~iG09~Clo4aXJ?nQJ7_UcKbk}U5JPL90L&1Q zPd^b~6>(9*+^DDIf;L@zwNx;}KlrF}AIZABX@}+1G=wwj$fW zeFR_D1{dZn+@9n-L_OvP8v)3q6Oh1J*(%EEd&@WT28c=J?D=#lEiY6{> zZ*FehY`zGWz6jVZF7gigcZLI*6*^EGTLL76{_cN25MlU^aqscxJqe)Y6D4~47bi`` z&s+7meodUJ@%?e?5zxce0dpr;0Kpg&m@wCX0*TMK&!|NfWNA#uD4MbtW9}6`WJ|cg z!Emm}bp*`LjIn^`hCaBkVxjI&+OZ#>`EYm(yK+-HiIKh9BM{>6F`sJI&y8ULxt$g%=*3fRIg}AIZ(w!>wu>0-od0awK#6yZw%0V|ma@}pI=+#QFh(+)U?P7zd>{RD-N)ZHo)7Ze z(O<&+rNtVKgc70y*Aj5guJWswGr5C-SBqZ=5Mn)cD9{X^OA6}cBd4EEX{mp`#2$&l z_1xxS|4$Wdj?(NH)`R;2P>JL$X{KHJO?~}vUHLHdcJJg-MXOZyvH_jM&<$_p$Wt{N zI5p3+cBCLuxs4b=)Uto1z5@itGBUYoNtxg3Cd?RxFPDQa0W|C4ug@*jg_|;!i7nOZ z`b*cuyH%Dct%+p%Y{1HO2Mq)S)cRPxtM)m+Q<4WF@_&!F`>WER&C|^PkFBqOit63o zo*4!hx?5=wkPZQf85$)70qI6S>F#btTIog_M7m1^q(hNTDd}$JJM+8$d;j+g#=Y99P_p_g8?|oi1cWC*IW=X7dkKKdLR8hKy$s*>}w^h7p>RR8w+3Ay!ueggd=6yh$nlwW_{P%1p=o|2`FvloQ+CL@ zEP&9RsrQ`rcYrD5H$N`{=SS)>@1&6JbA|K16drJYON-ta0lzh!*1L-@@a>ttZ2^V^ zjmFG)^CE{Nt%g#@Z(eQ!H_xI7gbFPD(qalFxXC);6PKoDrTODU ziZ_3MmNc%udwd8CK506i&8n@3m!q%mWZRY{FQ%=cCS(8)c;!7){o3!C+n{kwZu`JR zg97;Xk5HMx*dcIqsUNKanKUI8V7UstDh^QyQ4%#=knsoq1`LqoI4Eup)t4#>zO*&g z#yOstpWp4L6Lp5xN9>^J&x`1uiO)(mvU3Msygei}Tcc@0Wsfd^>4EIilJ!@oJtQx3 z^76X9&}H-0Q3LUY;M8@azDW5B1Q|0#P64vk~u z^-2A_<2O9YUCQB#ET4;Ks5SZah#tN3FqLc2_qrZM1m zFE9Jxizk)niC0|&{(-l+H0_!1!ubnWpd<{%hRu5{`R!+6^*?dq(WzRd>}nfTYUN!IdU%(}MN)Nk z+ouG~W5lBM+2yPZ#M+w}lsv{YDEBq!%GLf31NXIMcBgt?QeyK|$zi#aGpeX%## z^d|Bn%1K56$ebwTr>~%ytG7C|Hv)0f z7aOa#f$Mo3$T*&;diq?LFDH!L$8U;f|H!xmZ$N9 z$G!JMHMNElB&G-*_o@cgd>_S~6CUaW^veXV&)lW_vcL68wRuyCzlh=tDdkYB#HdWh z^6w=A)@s=p;{VG2Wu-@Od(#ER@xzs-n`(z(x2b%SOsV=CQ#QgUZlG=~4lI1Z<<9y{ zkw$+3eB1f(PkTON-+fBz@p}@V$%>QwV2{(#Aqd~)e3YRez`!hkH+?<(%2loB#i8!^ zf~THjM9PMO1a3;?W&`guc%6=XHAhl#d(3TR$V*JZ?Qpx5tcYSl<8h(my;FTUwn^0Q zbL!yTGN|D86P0BCRqU(kytUvC+oF_yH4f~q3?q=6DyAd>zX7aodSH6imErgw-;0mq zf@tEq?FwKC3-Vi6jFL9Yubbc9rjNHYL~bYa3ewWzwiW4zTFEr=l?CJBiE9r~X3^5}`+Awz%;yV*K**{WK*OgQ0%VtOmKs$~uK< zmzPzp*|{LIC%n@zty^`uNI`lUn}FU%YkkiCBO4Gxqd9=XB~P|FP2RixTWic`_2C?~ zRx=DmtSSQ@yVJl`8!Fqm33WEEQyw@obbjSh|8%gvXitpkv-RvWkt;WtbR)#|=-~Ov zayZwtYHq-i`6y%Cn@47u&w9)>amNPeazM0^DIy2s)!7Bh4)VzP36Kk8pv!ne;)5Iu zW`tDM!B`8u;&-XI*Rs|#MG^2(T}%29#dj5=8M3Qig>>#t-|L9EaBLWQJ|Q=7XD`gC zAuh&cNGT*{_?}!0-7@o0u~Pr>&la4bw%}U1uTnPMf$Qop_GRVDH9J5I@&lmtF!orm1N(AulU5nc_@$cHs3(n09F3ycpowa5v$qr*V3W~U{8=PeIsp+wOxo&xe$-GgLly7GF7BVF-S<8!pY9Z z$cqLg(9cROKu*o8VhmYpy=2!51A+5x;-BtisB<^ym01E`zt9*PJ)FdUwUU8u#+jI0 zyQRS(6(;>Idn19c;0eR(Yscl-*i{f2@g%ndO;N{=x3bs`?&iJ2ndgSxSmuy`6w1n7 zVZahUebD!rvC0dLbLETnHQCc_j}t{EeZN^TxUC`a!@>$|;dC&2DZ z$LA`$ngXuydkR&C*g*x*t#A4ijJ(t+;EDHcO-ueFbXT)vO{?hdKldDj!t;^u_JLDy znSoGe6IR*!tRpLIg)Sn>B{IxQ*S zH#+8!@PzYGI2Xk-mVlEe=(X2hPD*q7kRS84yhj6;^T>{lK(a4(on8S)z?8F}^j#db zx*=Fd?#jTnIf^*4VgT{-LQzN;oKTIjo_~J;nZf=|Got(RudG7){Xgbe>2-@qVAY!L!|1Oth{BX zLF9CPuvm30ZKPYkYcin2x$lJEW`|<>LWeV)gM)SI{xaEGzXqM+ejyW<`GjUh8AE;0 z%vCv9^wj}x*07c#BhZlm5OvmDLrg;xAne(Bv^&&E4RS*H_Y6cCHE>!fF4qGher3r^k4RK@giiHCDA2#{yjR4c6V4K=SyD;o(? zyzpJuxAro_3nne666}1(X3dX|7=u8=rBgatut^&Imb6waavHQ#x)?P)_;_NqQrlqo{@2`j=bTUH$K>o^I6|dB-)(Kc`+K?#Q;aX3cIeIZ z2i@8C8_4BqTL^r#9%8$iyZg3d2(61eZf0p$p_MO5Hh2o!@z`gRZ z0!tbVF7pJgAw>P}yB1!aH8yk`9KZR};CMCvV)Rv8geO!wKA-FB-ZiB+e0(Zu>Jxb_ z?`*(HE|cQEt(2vY!#(+P4Uu*}{i0m9zVZH$jEVbL-%qN*gK}Rid5sf(7is zW0J0-OPJRem;mUPW2lJpPm=IoV6GebPO2&OHB)eXeYw7bkG@;e#v)wFYeVm4EF< z1pBfA`*K8xDaK$~UTL5-uN(T0;)nutnDQit>Nea`@>HDvHW?N%*2{%#CX}N|MlVRG z^a$Wk6LZ6+HdoJ)=(BxFg(iTz<2!$q z1)Y65g4}HVENMN9_Kqlz@!L;&_PNi2#{oU_w>IXm2ll;xktYr!KF3ySKD{qDRwiJN zg^blaBove;Qh`7d0GQ9|qnACuuQGLfS`^8gTz&}xc0&x+}7haQ`Sc|Kacvn{wr#LFth znkXO4eL=M`sMp516zct6o6s_K9QKQl$X>KR@0)rrW0k<@)VBU9Iowd$JVvjd%X{F=0{X_( zD5&_gDFVPZuT>G)Aov|*y1W$dr1X&Q2!Ki8iw>SeF$e?DchXJUp+?yKweyccNYB|F z``Au@YcTKUWe3oAsCI3b3fz0(Ao1lc=55~vWjHQyVV^vFcV0+jq8!Nl@|5|IExym@ zZQNI(^RF;6s1$P|X?1E}=p8g{&(V*?Oyg0$*vRU_LE;(>r!*uM2BgUS%S@|QutpPO2UDYdr zlLwA<6Xvtp`^7vzA{Vps#@lJggSdX1jDX=H0LBHJv-Rn}%o#yN z+^>|5zT4c?i}@xqyXGx;q;1{J^DN*V_Y2E+w_CE207sB>=Dv5%7J z19{%Fq@HeWiVv-G2s7n4hP_!;J5N6rnJsE1=h@Hr{v65u*p}cH!9{3lJlDM9{5(;a zxT~J|>4jk4$}ha>nrkgvZ+9Va4vf+~K5jUSUU3E9Uw6maudT*D)=;o=#wM!>D6HU} zgKG)ZmOD#V^}MgY2*L|t;f|h}>h?sGR)FnB3mhhvR02ufOO1^mwTOdvDD)H)xWRPC zii(4sTO_=tK8J=V-YhWbPBj21e{*Z zFID@^Th+&ZO<%6b=5PYwi{riNt4DG<^Dt5Xl&?OPxmB;;U{-o2tVZ)a@3FSoYV@|} z-?@P97^~m83DUQU2~kI`AjGF&Pam1b{2TjpvANE_*i-zzU+K6XT@|N@4yTR_)K0s^ z2kJ-Bz4l{uO*gPB!#g&XahW>brw{O*%Kuc=s$5r7n0Max+k9Lr+4Q&h=<;j5o%AVt z3ot_uWk0WyT%g@r@(UR)kj_1TqmTCg&l1%2`2>0BXnng2 zojS&FSz#y5N}KP^b%#f=4awwQRlqzmA=eEJB_@4P>6ASE{q733qlIi+n7mQ%0%g+OO};H$n0+^HPxQ;V%N{)$b{nS3 zP3T(GLg^UG_i(Q7F(ohlH>#nW$pc6jkbhfR=D-I=7o^K||GpeHoIc!4t~yJttG%BT zGlBm2ab$VF8Krwda3B_Gp#Uj?t?ek76`O>q@8fRqIU2tk2xNX-@6mm0`pJEt2;l}L z$eMGzhiNp%oJ1Z~xlrW9jkXaIc=JvB7>dtcx;x5CaNm|)tiBr!c+fRTk+VR)7fY`T z>JCNcDrjct4-Ee`Z@T=^_#Qm`#Xgrmm=FKD36zp7bzlzF0xE9U*iqQxjffp<{ZIXh z)Rugdbil~l4rGHLcpQGQ0+}H>boaei(n(n#`i;Q`KF>qhoe_CkuRpJQim9sVPMDrq zB1c~m;#bedaWPn{GR`T3GlD=1?tZuSRJrsIt$e{6d^%i}9FvHY)j;9hS^N{V{%kQD zvAJidOBH%K^9M;7L^l?hL5^d4+-hBox8#kZ=Z`X+wyzpjZ2}@vwGCs)r;^ueL<}#? zO9UH8Eet^QiOC_X8vH%+2-c*6s%$BdczKK8rmdGX#taE&ywdIIrX99cfzTV8e#avj z3N4~ri!Yd5+5`YK4x2_!J(pxqv#zLp!CR6FJn0$`2gXGZugFl>FX(wZ$@{0xf?XpM zY#0$zAG@9N>PY6Y^kcu#T;x3&QoLnSW<5`P;J|LO{=_}!{p;T|bzZ9{MvI*m$!!|@ z-h}k-K5+`K#Z_|)EnwsM zoq)qPC{=s*T~Q*0aNpk_kJ?x_BFd_wAUqg3{*9r{hv2-u7W~1cA@BGny3Xy?Ab4&Z z@eDeEI#&MFw-BWIF$qVV7I2WFQM|u-Cx;QBNDxA?E9VP%?e7@AJRQ@=6_lTvVQ|M{3A9iMg^Y>(+i8ZncD@L_rl!Sc6@Cp;i!T`SKU!QPUVC|nq zc_}(Xzh%`xSPWgi2zs*csb^nkZoKLZoE5WFhky)3{&Y!ni{OjiX5Q!pS96CQI%UqE zdH(_|s(lz?WK1@sb82-n|E_3g+vF_^_uZce#~0>k%|?sSPh*26Xl#Nd=m@fGMZq_T zh5SLy#2oxDi$}tp4)6PprW3!c^q((mDY`Lgl1RCQw%}XjSAM}XHhPTSxvY6spbUF( zfvn&+T~4k9Nrn3v^!unSU0G5iM8-!=Mb<7Dgi z=L`USa@`)QEYRiXm6Xg>n^yCndDzE*X{ok@XvV_XfMGK%pzP-=w4jj$;ku98x{hoj ziJ!%aWaY#F&w0$-Ps}>p5WNJOzzu!T~v5 zaSjkAEOvZnth#~-Z|5SHRsY$0zm%P|CVxrmva5*fa`^dY_+Z`rhD>LiZ@-`$qm2}3 zn56^s(A^ZDQl0n5z+-LBuF{J(8oX!(@XoMeD`c1X&0F)N*Xc6zA-raT=+o}{_$FCs z^=_v6ZXnE3@d8h~#_k`2)wuE^uh-wC_%5dQkr#_Gs#!v9xz&!bf`S2i#(E^A0od~{ z%AS3COQisN20^jQ=W*4mDsr@1Ybr>@j244q&?@H5cvkp2_V5repG;Hnc_IPEK>oEC9a>m` z8t=zMn1~}TuDv}q%oI}>vcE%zt4EF#aT|ZnFRrZOHr^d$^Y$8Qs!qp1P4};?rmoNb z^1f=@@%9vQI(Iq5n4#1)eim-k6c|)5lw+tH9g+rBTe8=7$Eyu5Ce>+zPV(q|-wio& z;n|9SC4s@{;L}NZ3Z2J$k2K$w0dR>DP)h`R1GQQK6eUVr#dS!`jM=DXUs2=!;eH=oEc`jp0S z0_9>mE(v7cM89aLXR5m)Ja50`cmh9W#;-JtRrDby@<~C;2n-pkY+`i@A&;UXxO+8H zn$4&-I`$t}O#b8!#U7tDbw|v|0d5&cetQEI>Mj9aP5rCAm=~ZN0)QR(b8w`w1Ds3@ z=D1|h*x5wPp(mEY6^nwuk#vjgvC^VpT9q!s?>khQ+%5NLitWe=mZ<7W*tP~()jLcu zLKcVR>YqlcrnOla)PjC1x1x{UZr)jYx|1}|KIL^A7gtUZrJAvxz9QART1!p4c-U!< zyueh1-%(fl;H!JBjr6Oo==Kfz(XB>Nv$o-g3x}3;`^j&@hh);?4~dKsRj4pq2D*NW1?^hU37iz#oCNW zd)I4^wzaF)8VF2ZV+agn3=%n9ri1fbmu#RPUmgMcVbB^AU1`+L5fi4)IJIW>?B zK3f!G2B>xDROo<&O+CMXeN5v35KJ!$!SI=o@c;d-$c{-0F)1)OGukGMqaD&VpSk;}U#ZkiEhO{``aBWv%o7i^&z?gE(ou^_g?(5r zVeBI#VEF3|Swqi(-$sfF0|-N(^1z*7x#1dL@Ah%wFZ1r(H%Xq`5+*G$$Bs5!ArQDS zV02XHfYZSB0EMubJ{U`G-E(iI%X6#H`ZI`5Xpv|Ms1)PZu za2(x-T;YB{xea_waIZ*8l`Ws8u~Y72mZ3c55)*7d^k?$`ik%O~9T5KZl31UMW4+4? zfn0@D0I09{F8=gwI^a+Gv0QO7(fR8O#3r}Ir}4i`a$YFc;|CJ$`EdR|XK@5IO+%Jm z4-L=}QdYRQ2K;JS@OINns@!vkhnWte73`GWGMa!}Bl@x@Ch9=-`7D_D}6) zw}2b}-IhO)@{S$a+VX`!Wfz)<#4r1ucO=t}X8dhRybwCo=f~|dG%e<%oZ~JzH&%f! zC56dkIcR#{2^$6xG9j%lRa08%3aDNN!BaI>W7Rb{j3L+X9N#`82|zIYkA$!#2RQCw zWqoQxF|l~nf_OX^AIbaoV=7BfPYtZ;a}NddrF^^wUodu)RAv5`lvh#jerVxhQw}u! zJkd=t`&w~!kSTq&17Q~n{;5`A4pwflB`Y*;B*yz<+qrR*-7|ujCEvVFze;|T^EjAt z4b4LOnKyUAHks));oM%}rYzBb{5&z%9E7hw5=qudW$_?rmr99m{qJC7YoHi=6)lem z4(JkJh7mH4ul7ICubuifkq{iYw}{(`_hD$!*b!qvy{OAiIih1E-8_U%-+B?{%K4- z{5_kiz^a{OQ^TNvE|1Zq`)bhfUUYD*-XF7G{E+_1{EdDAjXvRqb0B3KgY>o_B{%2| z$*tWE+FK>%96p}N%A^Qv`Fmr}tJkfAol&?2Fb!%#xz2h`Tpe5RKQSIfW#66zpfMwF ztj7S>l}#OxmY=(t{Nh5L3iPabeoaup?3}awzG-Y&gri8bwcx-WQu%h&!*Uw^!yrz5 z>r(q<^8((G>}UuBPUFuYF!s#-;X5yplb>^Z2eV3Fw{stT-HE4&n{7oKw-9R(t6j$< zXA1NyJcIxJr0Do16hWy}*@Qh#RTs_T7}pHuri<(`lpv?;wBzIDZqs04RBJ^+>BX<= zga5(Nz(sF7!pP!DS1lp?pxf?`N+{Qw=`?uGKmFV+qq9aUZEMm6h? zEdGT(P__N?CR*hv>_Gwx>yFgYRD1Qh$LG-)L1wr<=4j+a*6^s8O7EC4-R}(6cboI) zEoF5ypQi1_DlF*u4FO8$f(rUblm2B3;a6P&rwz=dn5*ALks-0|q1trbFctjk>(n4*o2@}M!6kG?II7dyGbsRIYuikkAJmBl+04Yd^=j+e?`{#PT zl!k^}jx4H{YdlD+K{jU|3qTcAxDkXgF2he%mV+Yw*7BJ;{7!wZc0@%j3$}llfr!%KfMce~8l zs1iPolM_XYtY6Q5Luq~YD8gjCOzt|Sq*B&|6QzujYibq#7cUuzM8P+z@*GTH4hXSOxVzI7jL~-)v+|of$zs;|#lKKwI z<=*sXZ$Mq=>f`ip-2~Nz$9nzIi7ZV5pYO`PMLwzB4ZvIMc^#=DK{h@+NmQB=^zJQ( z=u4XTH}gS%?)z5u0#a#7e<8{jy-3wES2+gv#FjgZmFje$@`*r}o&U@wdXS^`m3MSY z(JJ6-ePt0R@v#_6Du8%&h!^B29{smO3)U;6=vI)a=`i;@H87ynV*f z(i~Hp`_`Mqm`{DSXNOUx@{Q=xlK+OxDSDfGfxbK6KtNiB)nv{Kifjp&TJ_}dE?$%bToADh(~(XzsC-Yf;o%H&fzgoV0QX%XyVE}ml-Awa$-Og zxR}s>evV!Kk@mAuF(tsVy+oDjkjkt30da0ifu6^T;<-gk4^wf94*HkiPe^XPgPPmY z#Tx4cJz>W|WvS)*yS4fG<}ct1A8J0QAA+8ygYZkAyJmQMGMGaoqkpMldCUH-y?!UT zXN5kYYWf@+5{I?%nqf_xK{|+;qnNVa;+%fL1k)H-mQt8L*ppQ{HVE1vwVQV!!vZm_ zxs51B@L|+{r*FfWPxX&PToLy_o&`kMSnsU#W{mV}zn?@x0FBXk0R(|7f7maSZW#2B zVMK=$W@}3QK5yjGEovO4o3Sses{mJ-=k(ZCZr|F%=R-F#BjWd#o4wyx_PH_=1P8r) zFzPeqK5#)g3Jjsul3xW)49^i-K7hu4#jB1ELr`Ga6DfihmH1wWF&a>ts^hQbOoV>; zkOyQ9Bz8WV=7xi6dFP{a_vwGmY20)m49Lq*NGd#=&gFXSw!J{M3k}o!VXhd z9rV^xz$dKcT7#sUrf+34>o1VrVFJ0)t>6ec0DS*H4&f8@a#&oC=3CE3yWqa>eA$La0HH5;2aDiftLEofz;ZFpDSgK(86P*mInR$u}QoWM@7c;H_|s< zXRz0^O*i0&=j`*F;&hZlarXC8-a-~_9N6auOD{YEc%}z74LQGmQg$qZbKnwdX2|YX zY7h|)>fRYb<(er`(yMD333@jL^jM>vT?kbICYuunY&2Oy`(JXPkVyan(A&|P@_eTI zxE9|`L*E?XPX-^LZ%vHw1oq*XDy&PzDTtHG%`IB)E>#hf)HAEkVEEK8w)46yHEK^3oq;$Z)#| zwfE7ej+eDj10etgM~enYzp&frr7MNySngYda;zDkjlSNca@q4Z-pgSC;VP#+4=%?^ z>U#)H6PWJs7E2SRGdc8q@9!WX5G3}`dt_tGaD;nw$x`-*^p#=NSdik+8jUVuDUgCta(Lq0(>Iu54|Eba}lpaOS(0ylo? z$K|Fh(Tj0(we;8xVQzyeyXAobp+M=tc|aN<#QvA*Mh23ER<`*u~j?}?DN)mF`7+`>U(=#U5@ry=B_+&M@A!e5J(ER;PLHmb($EJ{n zDT2%Dgck9J)1o? z#kS7bNw}`h1UYmpG~gKa(o3o?V&OHxB@aJU{53k1*fjY=@mZ_>pY6$mdzKwN=m4t6 z*8hQ(ijn^Vp*r3FE452PrFI*|w1ti|WtE*n0vq&CxMD2Q%tX-5T-+}*$W4~J_|W3f z`vq_UB6k)Zho}oWJPlNdZGSgqs3OV)|8S$L_kFl#Np8SHZbsIg+yi^aC`Ia$jn-A^ zzL39Pz)4r(B%)$()3n=*EmO91MXG=R9-1P`EaHI-dhGI?_-1N4SYvo0_H8{2>ZgDB7;-WngPyqsGq0p-gr_<)d%oGLC zM@XShRmg8JHgehB*Jy*+5TlvRB7MRni40`qsl!*v`xNze|j6(klSh_~gNK8HK|^x9Tz{mxL4&KJ9a z21zq)(-Csc1z+2<8%fKm^TVik+B~KIP}HZ{3pQ=KgQ4vB;+W${S-W&=%}ym=a4qUU^FCcxx)k%+VhsCd<|H!ogTf3}nVSFtVxRjiA+EY$-7M*)`3 z1JHZJ?DdAzW-pSjmv}`horMqkYh7-{DxF5Lc2u*32s}K@xR0pjFvdb{7IA0Ey-4@D z>=9FD5c=p1it}Yr@o-m>(5B6iHTMt$9tTGL6ZGJD4jw1Us6sA-_Z{RS)kHy4T&Jwo z(yWqLGncqf4l9i=#Cx%1?CENdhO~uFrBIh9iK;*+ftbsBTF+jk^Uhg?9eK&pqI5WR za5%+y)4HkNy>Je{&D$Wsn;|Pr9Vi#A6dXPH<80!5C3+zSY)1c2XH97d>_tc5V=C4b zTTyj*5pxxd1a{CrEkx_j0Qvs-fyWu}y#H26WOL|(%+&1D8f|wDRebS(_3-Uvu%y%< z3+?(j;~4&N89y+r@tFxx-imQPfX7Omv5mTHg5E9Gn}ddLSRY_EE=m$x#4IiXhyYKXvUbWv{=~d=E}(sx{ofbCP(X5t7FX){esNfPw75GcMD9gTauctV!WD) zGNZ&A=sP7$7%a62hUsh#%|Bjg&YiWOk%3Vc5@e>_ z($j8}aM~T^hu+vf3}cz*n?CGZ&TY$>e8rijovR-`*5K=^!xG=Up8hj`eHFtl+C9U} zSi+W2rv#)M^~>J!5y8CA!kuIy{@`+{t_ zvy5jcHDuZoSCTXJoJmNVffSuC1U%moNdJ~G+UZ}F3B#8h|N~~zvMy@3}*IMo?iU-gFZ$f_m>dXnl3?hHe z)tQM&xy6&VIJo(&K@y%`xh!VdyqlhrZAnvZ|G0mk#^|UYoqE}8$-)h@5z~Zu7#%}P zi6||AjQ^KL3cJdBu$L5}kt7tcr0oXqdI+G{VC(mPT-rYuiaC@?>6Tqjbj7TG6|oH= z{4LjGRm(dkerE^ueu(&bw6f{4gO+iYaqc|#=?nJAYRB=05~ZLce*Ue-p@YwdU?gip zFMO^C6!5J1RHNTR{hXamA%QeS<4D z1hONa>V8_fxin6JxGc3DtPsC_UW`$?#!F-B6}MqGG(Ey(~Lfbq%Dht@Jff?!*j zDWN4>?(onYMmrO3VuizXFig5?_n|}gM+S56qp(7}@ zqC_w1l~1UpJv+EbQet)0>A`P__gDFQ@mwRje_rSou+$7*W@W0=AdK}5Z5r60oEc==iNzRI@63G7np72NWDxpCj(XTR5bp|SPr-p z!Af|@UGVk$?m-*z>$Qx?p__5S!pf8n0!!{hv~wq7%;#?7LD}HTJX2+3ew@kV;k=2Q z#GrG^WrrKI;(gE5_+x#xs=iDXiA`-28|;{Y0i$Av?7aa^5H~fP>n2FXpydV898S-h zx>ya}PPdy|{^vXcKsgHw^iJpxO#@;OyaooSPZ1SLvHh3)|ThiZ;b=Bm5)_A+w zvddq6Z=1Ad@(^sVXWi`=E`@BALGVj|?F zLXc9%&W~mF*L*Y20_@A3mVHfMpiga&Pwj5ewj^CahhHqA^qtKiu$;^4aQ*CV%L}N6sK4a1ggeW2R{Y7rYpbepd5E zuHY@7IRSqRsH`dyS_tbGiaz^LI~y;kbr2ai3WTfW8nA{7kdFNamGr(tI6W4wshvtc zG~~-Awleex5}0uCTP7<=e;T*{eDVzbUIgtVj6DMrVmCj0v?RkPdIn2mV!bSB$& zk7M83k*3?NC{d>F{o^?OW|Oo2YdB=W`!g=q=@Bo-xBHv2!S8p%Ka4ql=>f}|$dq%n z_2+W?pYAY9FqovR#x-{{Af?vx>8p89@J5Fd`a~VW?#x$$4=w4J<+SmCS$+}^Nhe5G zCx0fB;7KBAQJv~r4%kM7esX_$oxTGftn!0Y<4z@Opid`2?$sS5B=+vnR_3AMhNc%d zg=)*!NJruyykSUdmX|_hYN8jcp^q}YX`u-T-ng)X$r!=U4c90p1cQa1 z0Ob;v(9*HFK6D0^T|Uhx2av#J8c^V9Opr|t2$;N-L9M$w1>ApF`(1?EN$ROc2oixY zh`PcC2sB>|edEPYJ09Eaq$Uam{uS2({Z|Y#zeec&D&}cNq3c~w{cdkmD?R4!##cvi z8t}5&8K)D}VxM-lXX{nhry}g%{Bf7xiT$kV&0E087s{F$_E* zZTMP7n?(N*b6;Dyk!4FYGoe_)^q#$u!l7D z<||$}L}~t1WT2KfiA!8F1Ga3p_aNnO@f!4vh=8W=w|#q-J@wZDU1`B>3PBm;P|p;Y zDPv>Pf`00!-ASRiSm(`8zmL(IcfJZcLs}NBUlN zX&hqm%V4pF$ZQCW+s5%sw`qR7lgy&Xcji}D5vm&ee_Q8?>-^N4Cb1g~)QN+}8RL}s zo4GY=Z!T#s{kbkZ(<#Cy^F4j)&6KXWFd?WM;}9uFWzrV{;?aF9;sI?^QBh~ zN*)M&$No{|?1NRFHk0YHTL=bLJz3gYi zmZ|}&!i`nJ&cK9=O?SB=Gqq0C1U4CEi;RL0whRr7f2P6=eB(}@R`Kg3li4YFI0u1F zDCADr*DZik<_e*%EM z@(&b8$HfXK>R!<0cG11bY;s$diP;V&KfpqQUPX7bZZvG8T2ESqvf8Bul>Zd5ai z;v*xeq`B?aoI2Ux(UyrE$FD00Yrb71N>qjt&fS8g9#+Zj?p#a{AJSoR8BQNn}f%ymC$s z^qZ%3d|a`4`#1Z8s7*`FM!G(n>sD0P-;t%0zERaTT?xZr7ksg;3C88<|9B&{ui5z- zy~}pu`>wzW{QE(p;kZ|E#)-G4N*ifzzjP&Uan1zeZapn-V{rL^|GP+%hP-7_U|!87 zVKKN3c6orzG5WyMFiHPtaHhtx+1_F4YZ*Y+-^UOIRm{0JCTxymO2`WpPyaJrgH)mJ z&~F0O5zTf%eyVMM9TAZ_x9#|XO42&G<7%db1(HaVRuw$AIqVVKFxSfyS9qwBe5)KC z3@3wlQ6Sa#%df}^LYi36NH2&6WUcqUAVhRSthFC9ri!@K<|nG(>zmgezi2@xQN4qf zZY)Ns{d!rcQvTUFSPZYRT`e8~2REdH=lsQEfr{4NV$w(J8^tD?4Ed-j0O}A?qwkzX z%64p%Wj4P*Xn!m%3dLe3#Fh7d`wTe zRav$Y2hF}GtmZmyG=kF<%NARLyAw;Guouz;54K7`ytzwLNU?MzB|6%9ab&+^s??{5 zrab{yhFEBK7x(O;SiG{;7+G4xX+Z;H{jPbj&atZOqs(W6NK$wD0WMIDy)LNHwF~es z=z;8H^8_9*l{-ZH9Ns6T_ig4Et)aZ$(YoJ69T$9$RCQMh7z%}shxg%;VHP$}5H{LY zg|Y2QeX=<$=jUhW^-b*{0&oxGs1bQeb^m`z}X8J%rKz{s%!*Hs<1+Q&Gq+ROgjIcRu$SV@1p|0CwTtd-ZV($Zr{2!dz&`9N&+M% zzWi#E)`c5Pbht06gvJ|yQ$8q~n@a9N(t4F0b*=k+s6Ncdy1PVC;cff|H;CLX8~=LY zinGdyd);=okZ8-#75-pC;lc-(gRr1Os>jA-=XP=i_EdT@zEq4R=t`KWeKjA(g*5Ku z^hXwF1|yi?sXZBZYi`TeKxGj!B*V~?36^f9_+w=sfx$sitk_@Ypoque$;vK_BME(r zfTMa^&{iV`m3W#6zv|$oH`snt;_3Js!CLk~PM$t}c(vhT{yixZdUmxf`^Iplh6R_V z%dIq^-5JZ5dd`&qvxfQ#4fHqk*9&i6jnZ*92dEYci+T4mZYlgFN_WDLK6>^OTj%tS z@b{)wocl(=#xO4>Ju4$o)`uzHhGiUO!AfQyyrD^ zTVKCiI5_y`7vMYAWUmx>GDA;Z)l^ThcW`jW!B>cOPr-g^=*BZ`kZSIi=J;UQ7<@P-lL@CaaO>-d%$=K>GVC(H|U*MObMJ^feAr zd3+&CRmN!pDQ_JZWzrSr(cFJ8PU#i8T$J)O^jWTBiTk@{R@ELdw1mNvo+nNJ{n$FF zK?JhFf?!y};ZHH4A1R~$q#NOAOWaLHLR4NXmojxn_$9Ghj^QNufKc$@4Yb` z<2a~qe|xXJ_F8kTJtu9^mE+2VMl#<# zEI>vd$)@Xibxpj}pvC0@)vIw+-osP+K#!j@EuAiKFSF)k6?&1x&_Z*e@WDpm<$Lw| zFT2Jk5>_1vr#J0>T6%h7Mf~xGfVxq3?NHrPuezJs7>Y&O|FY%|;A5q=H#62e{mi-2 zo3CzFM90Am*cnVBl(`;IjlLL(r|`<)HS>1~5#y zV?y36w#Z^zlvI4EX(9x7ha^wE3upqi|ltu(tlu<-T9PF+s;{^3^LU9K~3{wAf> zDsSlH(sYUH23jUxqAe41NE)mLMt^TLFoMrKh*Z*Pv6D5pQYUyo{b+#p={ZlsZh?+d z!iKt*(bX_vFd?}n(e-ZK4HA{OdNKDyCCTUyDoILOx8V0%}JbV9AzkKb>>zqz|TF z6*P1*?wt{7E)B%UtbduPtVuNWM|vP}OgwP_3Hl^hFSxx&{hj z@M7up%tb8#)BdzP_xOmd^{a7ZlzGC5U+qQm?sf2w9f3QL8@JYm>FiPoMr3GisAI_| ze6=v@w1AIK=<+bv`qvS751pisd)@k%=VxyECJrhoOWQ`-9{SIVcw`)b{7_5Y(oPLB z)>w%bT~K4~GV_eScNHY_pgkjKw%U z{vhmFcnC49Hc!JM_W4!yUIEte0^qdei$+^uHP}xGbP&q&=0)$5^=8(eiQfdq7=Fn) zWsXIwB^%vEuUC|4K#(WN^rK&4|F((IkgS?Tc4(6-#5sGWA1LwSgF2G=kA`dhGdjMSWSz0l#mC7^eA>6V|~$KAw`U|L?mAYfB?3reOL zU1<0Ez)jBobv6F;ANUYmbGYbjR`dV;mjiA^2J6sT9BclY(f=>CzXx{X6~+Ip8vj*D zlO+d}mw}CHX!2hkhCh!h!~fr}P^HT%C?Kc#AKWi8YohTx*=m`oadRCrv{?kgmNM57 zEa!mfm*keD&j)b6y<=MU_;>URxT!Owji;!oPZ<6Td{CqLS~2jnZod65E~PO|QZxT@ zg#X#%%b|&hS6JNDkXzoiazOscXK?~pmKM4>N)>HvRzJj-%Ks0u=#B_ZfW(h`f3Es_ zI@;*|;+xB+y<%;=_*wdEFjL{|xHKs0mey|PGMv;@mX)~m+qh{&+e;tkX7zg!>jlyr4&HDQK&Zfp2 z$5v~&|2N5s8DxNvOO`MC%`FZH)=0|*I{w%#%6Rt%%n@xB*R9Y)1RAYBelG7?s!jp% z)~t~Im^mQn5(T7`y!K;7bA}fwyHnq=G-a*?-~ISxY{wgP?N8;5(F{jM+v^n=XqE=5 z7wg1?mFlB7+8Bp<6O$BL1>vq^s~7!1{*+C@@`mkZ)&v zG5vZyz0B$d;bq_aCC>1=dpiI2R027m2OL~R0P4Bu!vPuEs+s3lgs&CT>(3)@`PG4V z6%x?9DO~`pk5ad^b&r8a7%!9ju2n$w@tAQcL-uJvDgeI!HkZGe{JY&|0)B4Z(!cGf zomnTEyl9UgU3$Y&5^OlbNqB0I3kdyw0V2Lj1O3b|U`5}=2iF|aN_ykxrFu@48QZoX zaTzR7&h4RYO;_Owzf5Af0c4%+wAXuRd9XE;wObCtTRN$-56}Ur)0Cbjzf&h&J-u7v z&Y<0*otb!y`HQitz0rr7HP5-YTPhu=T`t!1mWrJNID9)#zFlZ!4h|1LR~M_L|6`F_ zfv^f##%0Hhh?FqW&8=hyBE;Uz?v|yUG+_F%BP~$8B84N+WX_Q0_M^Qb@25wv`bsd9 z6lwurDvN&a@^D~j#%%yN{p51np)8AUJ)YRSpPMi);j$S6b(Mb2$#X}{4pS9B9GPr) z5Gxxu^EX%X)r&7EFMjt~@rwcy(o{W}CamVSj4CO4!R<`mK+skud;FKg&`GMB|!=)<+CdFa)Vx+1;W}f#}d8hfNE!wo%^jPD^_uD{w2^FYpU1uBA zWqID>WUBW=M{xKsTVBfW>IqOduxLT) zi!jfqa9vU+#dgWCsb%@ImUOqJ39k%R3FfL+olxpZ!*%DM4;#qwa;*`S%*ttsH(2a8{pbJMESuGkLg z^<~`!aFly!@Mj~rViC1I^bOa?r7}+0j@ylW7-kp4i8EA|t^T_nXIEyGHa_tAnaibp z?;B33@vEM4YG|%zdZ0QLJdMp&gfuHA&Wa;2=%oaHWsZrQ}D`bP&xKpKd6zDUj_5 zr4goO1B>?05z!nBJF`~24}0?lV&Wuq{lz!ZMQY2_b-*!Z^Qn~b?9L%~@zXgVPc0nN z>X(ji&pu{7^4s3t4%iW(OY96bq~UT4*cpjvwzP6C&Cbpq2ttOeSO1^g663 zVWz&7^=9YJdnBiR-vv0@fuXN7c%b~C4NcaQkqAYGIoWe^y1{I(U=_`%M9cV>($V{ec#}KOkorV z*Jhg&>1o{w8M$BcX*KtF_O#;wEg3hF%dyMN4$@)r^NcEJu)X~(sfRBM_J?$Rk(i+> zH2>UW@W|`Cd$$akS3#Ns3(Gz^FdWRW;=1GJDN8O1k~f8W7mQTl{sb4>Sp9`GSqpV{=*^|6@t# zt}|d6O$&ezuzWsbq&`JMQ@;fzx34Hp-_F>qC>ox8uVSsv^BZsZt> z7|vE%;@gcH!$ItfBP7Oc-+z7%Rv?-wg9(Csp|tjt9%FQDtajs^$#%TfoW^OoCu0_udPxqfsz(ppdokn1q0^K?x2y7goW z&d|yn8ZL_r-ssv|@yDK%))`p@6}_RRN=~13rgJ`deeu85AA0;f&~3je2L_}Zr5&Qn zQq^yjtxx--0Yh=!&bioX%2K7ow@bH`-ji znJBq?%bx4N_UX3$t_gz`J)^0!^se!|#D#FNnZgd^v2mHu)k(WgnV|g`XJTjCG^r(4 zu8;x$vh1#vz3X;Y>EZSjXHa0D(D-l7<6D+42ADMP%XQml>MgeNl{vROzP#|+$_Yx= z$r)=^WyCM_9_ebuu6E3FvHYOIqN1>E|0i{527yFlO@QsNxqIO`Q2*~}*tl%88A+4!8S z&|$slSO0mx*PyuA&E?^&Hx$Jt)g!^7 zZo4vT8EG-oiE@?2<=InoGUy9gDrk3@JG>QyHiIalZI<|)Kc6dWcf_e>Jq8lV5B3Bl zJ4`9Tk8R2~Lm|bRheq`JYA2D&))!W!b{@;{ge+56Jdt8LB6o{dU^4b=?3 z86P(8iS<<)nZWum37+H4@qyhp0crf!Z?GB zx?}WSdAHPCGYKj3uIgtRpWg(eccu24k+GPqZi##!m7IepK`+g3N9<8rO`q^Ix?EV9 zD^Tary(eBj`PcMgL+?OdA+-y0`N1BDEfdol2LUbAH<%;exz}npOWckgk&Jfl%KVO1 z_zkGI@%7^RoDX?yN$)up6`s{;lwrMzhzO^X9~BkxsIi!SmY4e2Y)@jhUZ8%mfqAVN zk5DG;=|AuC*GB~^%$7ryoS>GuPw2zDP&7QxQ$2P;_9^)NIiFQ(?S1V|;plC(4GJk#{89xje(S&ES{b(Wm|mL{x~Su7jWHRC-s$Z9P-NHLH4 zrh*kNa1C4+_S4=Ei&JRQ=fC4xE;dVdr!d%YxMglWmo`$cN{MKV0cP$7UKp^DX8gZC zGIHpe8{XBzkhtzA+k@yn+Fq}_;nAoqbyq;5oj{FA9E+yssqTz`l135|{0r*FtedN* zvI?}eSh2XUkX@@GPZk+^ZsL$E>iPt~5wB;rf)u>079Nr%#DF!wok7;!>-#GL?vH-W zNNBGrvj{c}Gxy?LS-KhuH=>OagOHH7Z8M4->CIqw$tK>b!R{>ovdUqM}^~ zqJgj?=_yF$OL@-@a+_C`dv8TFE^eoKYho5Np{{tO;{~sAk!Q@p zxBEoq-8nTJx2fi~Oc}#eS%^ElEh)2#h7i0>^JzFp3Jat#b-5){&MiGGMMx%T-={i$ z$hOb6{yj(X(JT3m7>JOiWJcKHCwu2f`L7<)vV95DVdAJl|$Jo z64d$fPX=ewU1Mx-y;`3Na8`Ytz0n4!=zF2%{o~}kAGsv#as3YaEIdm&e*?z#nKctY0mg{9~PP zeRwk<Opjwb;{wnv)yT<^mq z&T7(^``zN%%4NY2#fh~dLC2|ziG6pwkj3-Frb{OOR}I22Y&bK6IZ`k))Vl4T5het| zx(se9x4-;gPOe5H){RsjEe$;8&}Q012?^eLC1Xlblxq9zh|bCU+sM7_?Xwd4|2xpsSuC z^B=n5QK#;hy5EM zLSBu#b}h@d@bYkVfV2@&!St0^X1<`T1Qm~l6L4lbTbDMRJcsrK29iAzMU-LVUv3U& zhBl}ClK8M|2Q8jM*SQ4QX?i4ukm{I`Jy+A@?H;8=1@`$p_(}3VtE8_EOHhVD5|F-q zEp584m31>Q#UUsKNQF2-X-8On!uVzt7{3uC)M^5pYnJC=PG=4*4i_dwmAsq?l3YL5I0TQeJ-|YI36PkL55MFe^ic&R*g&-_b9Z~a0G$Jy9arj zI2=4YUPx2ms1-uj8Kty!2E&o%gqR0m{IMQ3sGgplyjtGzxS5#?Ma}-*h|sutpxkh$ zJ_-2Ktj|5G%+K3!MB<}_r&voxsT=6*?$^M7ceq6fjk!pD%8Zq#+#WAYkAMHZM&TnN zBm;rwaV?qg?MsI|wc;-_h*h&W;cbdNWL)c*d7QXMdp$v@voJRwsw%)x6rTprunRp zp95-fpaYSuCfmRj@9P{RdGLzLbHd`(y5$(}|sGU+sSG3YQM^pQ*Wy(7uUJ)?r}->M&7;s^C)p5|?^| zwS06)XXMSniLrCTvfVS8i?wXjPC*;wewq0w(USq0n|ez+x)PM75Tn_AxCHdE)k#ZP zMTIV|*l+wtF_hF1DfncJQzVroCUxRZJFs}_@#nUrZKP!c{w#SjzCkUz0mOX$m!pj_ zI?Of>g``qU*)vvLkhQ2M+x6iC;ka5+0R?j(IS32!$C|2l?+EEbw~Y78si$s${qq2I zh?wjHMEOw;GwTVM>Y9w;`M`FPN7a!s(e@MQ!dqo+xX{@~G3E3vmsx3R7!2hsx)p8~ z`*v}6v>=Xy`c-szA7nW_L+Qhlfzt`cs@WCW^C8QR7c^*8FDaRkR!@~vcYq`>J&>x2 z;~?Lg_Icsce5!5$*n=&jU3<~G30jq3(4Hs}+jMBjP+1#l>AOr?Cx+*h{r@knJ3)r$ zo$g(x#K&LUHS387lsjC36szk-wc37#C%c0AYlbqAor!#)?G{rVY~&(wT+VM%5fZlp zbu}+{4+A7JTsCqisv}VakJ=i2+o)cJTz|QakLK*($sY*XO=-JwbllSEM~w2v^1qfk znP@9;QW=P<6{bKHUABmDTVW$#K)j?=n$TK*VS$g!eRjoBTK_zB7@JpiXu9{`LpgyP zs-$-6?kTJQHl(cnYkl6CQSJfdO5$>^FTStRlgOdP)NpQ-TES{qI>srrz3W=$AQ2=& zVC||Rp;c0W`2l*&75bU>_#BmeHw9&~^TpBn`LR-G`5fS`R}opA&yFc8Lv<=+!CZU+ zJ*{?K+R!k|pQY!7sDAC2x$zfi%*v8yEtZ|8>t{ul4IBFJz@$KgZ*Y<>7h&20&>Uwk z1xym+A=a>xj5odt^$|vo`Bkjk=gsEF|8N1=u7npe=^id^R4)m+4+gkP|Xhpojg@8E|F=`!NK)MCLVe<8-<@A z7nhrjfB`Z{M`P?c-M!4K#qBh{#VR;u$jfj=B_ zA)+__ER3yWHWegTi3H!H${qjXTio&UcXPN>-KGqU2%w@ZtR}lv^MMcerfim~VNj^C zLwR@)#bWQfnpX1m_2m}>(*T_R&6+LRINJZNJ*y-=`OMZ)rr$9|T)4rSpzlcu0HwzZ zg0fo!Kyr04Qf&kKj?Sy)Mj^ygb_}Fxe`sssN$$z6lDQ!FxUQjw*?VixM~@X>h!G$m zfXBZwKJ^Fc%Hl7n!k>R{uO52Y?*}Aq#wb-bd7$LCX#~eZIzQB9QkCBT-nW;1zid8Q z_l)`u3FkC;tVuJy|JR#e5j?dCPpvL{vEj=&NFi@U2etOGq$C+%&`~L4)rw~4P~Vs) z=4NW>uu}H>8a||t*kL4tThiLRVt9cwbC$*yMm|kxNgKAxa8GrQU`nRr5X4VIbbFgI zi@q49A3-ktcf$HY7E4xE023^h98C8v#~P5f$~Znc?y$|3(t?-BPV4@hE{P7xFwB*G zc6PqKL53D^afETCEYuW5+I=*h&?R53fv=RQLT^m-fkHW0yE?doVd3sV&^-3gtXoU(FT@JK21geI){JkXMgn_n?2 z!!7p1{W4iJ|2yrNdA`^$|xD*o(@kze|JF@q0$`0{Y~3d?%Cy8JRZ zVk$+_%dSkM@0MNP=HrzdhUz#mtGA)m?VKU1iY@ zFBpcCQ;&5+-O^urI@t1dI1eVgfTKEH8G{%V8-C|SFta;UL-sfA_52|aeR|Slzm!nw zFnGD&dkpq(I}Vm$IdT2P#^-W`5klEo0Yy{#+{(TQ+xP}EIG7J&B#WP$!-M4E_+{Fn z4%7)!Gl;WvEI2qg+`9V#K32S@kw2|e8C^S>Uq)i+4r^>hU6Q3<*keBZc*j_~R_dyS z;0p6AI;(buv&ZO>ih9QO$c0)c!LcW!ozi4$7FkgUaPXyR>|%%X`ngCrossARn#$NO zj1`5MFzj{u-?5TcV!gpl2@NPcJ| z*<|I>O3nCcm*TqETY)2Vm!uXoEb26VGhcvauKv5(h!128DKbA_JNmm9NpG%;7qsE6 z=T^p=7ioN8qkm1upw)h@C^^$eD%jh7;=2W3wc~?v9G?V4=Wi-%Ezf*fSGv_7k zM=>vva`XolAJ^}&Ue2)o`tUsTjkd97L_sc@47+wV75sU~UKBrZAZw*|sCdLXQTx|l z<)@cAl&jf9Fe3S$#il7Bq{(j`5tE zD_arcWm2WTcD4h$O%fWCr0q$(hW4=H;Cuf3GS@yB;ktKL5kp>U%mV%Vzz{bpOuX8( zJAY7e5n-I9&Q15`5Lda6FXXL1%f5-;THWh&11u!8eo|p*YPUY--=Sa`Ho<})+?)>2 zI#Ae;33gYkG8QyUYBqA9yZdI2Jx%`{qsZOKcQ!fhHJGiiPs$>0Bl^cu?&UV@G!?k-`D!-rQo=&p}NbYb(sQ`Q0WH`YTq}@eVJd`Q#J@ zwGs;Tfj;3Ww#Sr6T3_rJAaQgQ6IKDDzhQR+VhN}&y`s`nG8o2}P_(a3)&#a8=bYxY zBws*8GrYZ8$K_D=y^H(Sn>W9KH#5da{yH)^yEab4QD&8U+Gvk)0=~sX08FvsyJk*! zF~%F8iR$~SPl@SeVCNs7D7?h=n56l>b*AILQ?p7Hb-I=v<2j3TM^Gij5?|^CWl#v# z%$af&r6Ck%wY5JWSVbu2wPD1RSnMxi7X4T*W<%L!V)9+7MXw|=$y*X~ zALFIoM=v?sZC>+-F`0`GUNPBKJdY%@kBa_!3XtMA&5`5+GgsZ9=&mFr_t+5ML3-kC z)YWvx@0bTFmlDeoSz6~f)dYKCKKET*4*NvBmMj$b(QZ1DpF1z_Kk8#3t;nu_wLr@- z=!*16M*8A%Rpw^$H3Mm_*`fqIg9X|VFLKb(C-g;MQ857e@;BjX6k?7!zeh-kJYfcL zp26+`uMgn`kOY;q=saHElA~JvLB*(l>W!cnJldVP1K$cajZ@0E8X;r-rG@HU3hEg>#`yU2r9K=#ddV{+{g$G=(Wu7UJBdYikAJW~SRrm( zH^8@vM3#9t5v|Z!Ne=zhh?kL~+++0uk9J2qC}W7==a|88wQH#A>@~;|#>`FBE@mR^ z0}V_>Pu&IBtazzxdC0t$)NNj{Dr62yR?gxZ&=AluK2Xz0a~0gJUc%LuvsgXL`U%gb z5hi2>dVp0u>~1%oTGRS7SuF6W)x7Y@KF%QW(F^izzewEi6`zel=O^BvBb3ey(m2O= zGXV$U&b(BPZtqXs6Z%sX$zQdSuDC|zOBHRlSq}+6s=|cP8J=qrb0>wgC}BKGG4bCA zg#>zsyEcQdzYs5cN~(WhdT{|gESc7}uz8s3`@#3WOy3R+D@`1y%WUips!lq zipuc@(OB)*wI}N5h|b9YwYlA*x~K zpk*Om>J&UpqWxCJnjw>RkIx!yP&-@M#3*Htj$mysCRzqpHSnzS&T2ZXP#{^h@*td+ zfY-J#(-G2`@)Av^BAnmBY7G6JU_zh$hL2+keVHVK%hmCCT`#Fz52z9MV;JoRH1}-+ z@vEr}4VHc}5l6|xS923WD2xUY*WPO<_0bfQ0^1J;W$6UPOL7`iSR<1y-AT=P7l^-4 z0#;WYbU4Id{?bC<6gNBAU=UqA9aY$ZS>5cABZq>>zq$wRm4P zmabWw*%+5H*xYymz5Z=LZtn~A6CzE?MI&Li(!rSv_YatPDbL>!VOTx*@KCf(bZj-v z&*`iJ#mtRIsfH-peYAox7%QxK?6!0}Ys4l8ILsPIdV|A-_z&YV4+4}138>DTex;Y@MArW;JPY*UhFJbMz9v6o&k@MeO4`3Ek!1}h9{QC zYJ0InYD-5qNcmfNdU-8Mq1mXFY}iyKl=QgYa8I$a4c|ZxKZA+oCRb0EcaZYegs?vs zHD;sCd5K{{hgTCS5|qTpB%!CwjS^Z+gEaO2`8+|R%pPe@QIl+{=FM1u7aNN7Ag=tm z<2A~u`3%QkA#rv<9zPkf(QrF?v9?(02H~>T=TKVP6N#I-CN1GS%ANqF(TW5at*Ccv zPfusNFWH}dobNogC1k#lzLZD)x)aD--`6w-$&!#cHJz(2#jH{|p7t3d><&IDnG?*% zw_R6g@VncjNe| z_E3Nl##&Xpp#`k#==ab&A8l)RanIZglEI7VQ zX?<#)xx%6OW9ynUB~&;;jk)wzh&` zpZ!r$#cS0=dnZ&Vgd$TcRdKH15 z&r;|6EzvnO(Oq~5!D@_m1Q1QyJC`9>H@$v1@N%yI3jLIhjNEAl1M~fai{=Q`(!Av6 zYa{olp{vEycym`7av`!0?#OZo)_&G`BVuHcDM^*xw;x7EuGotAI;usrAJ!UZo2s%Y zPE>nwjvfaO_u8%-o*CSFA2ryUgykRGGhDPt@s(KQxRTq|yhhgqtmqQ$i%S_L`@u$7 z?QfDhMfb_p47DS&7ZH5gdJa@iH|8= zaW_SMQcTHb8&~`i@<}U&exW`i?EZ|a1G0>JdbMU$oekqzFq|^$1=(suU5t{}dqg2P z9LC?j<4d?pwoJAr`kma3&63e6(NO@FAa)CXtkAX`ln09nja73jb(Rd`na-SrPrhI! z2@$v2C^(D~2&}F@q^**vEf$;P4s_3cGc$C4=ZNMlP2e5|gqVM0c|vo6-eGjJMe>ys z-fb-MPr3_2dItj5-=9<-DGftcbm(p3J_gO>Kx|Sg+ro>qbTS9ea!bkw_Z>P5nC}q? z(HaC>Yjw54W92O`Jwq^N<}F0eZ0{~sccRdeDNK*LbOwuda4hi}V7j}=)qmWiCzH)$ zi+vbkKm0CzxUkY8KvQ6 zwS(xXeHjS>$q`cI-juoBb4?;)C}FrbS;o|EI4TBrY~Ob% zbxkdzs2l&~%f=@Ja$^Q)F47>O42kgw17mQlu*by>fQCOxlFG>UMMaAE95Ca4;vze? z8NDI3b8FMpx_K>~&4Mp9f#=S9Tb+ZC!68=#7CVCD=17?ivyZchBYH_E`EK`|?K%2_ zf0hC57|Pz~T<%mq()oVx&&8F`4PA^j+b6lIW(cc%UOO?e?%yV?X`x2`f?2;fOF{`F zM+g{|1<4+$6vRkh1`2Nc=58?hX3@$h%rlNJWv>ZF_zungtr_7BtCa zh5FGpHnF}x(%05roH|wNLAk{O&jDl3B(! z@SyA8sPE1%bDHmc&ePa%B_&{35pOc6o&R(na4Ny@`^ABdxYBe9x1jy&WHXw0YJg(C zknK^1sKlwu;L22Z@()bCFa${DQvTr(rwA?&93VJzQz)qUp?O4@hU*~Hoqm0xty5Ov z0J^YCl8NMhXfwLNpAy;UV#`kR*Ey-$QfaS{{j|>#AcRLcR!%B|IEjUY7pEbsb>%D1-g`idKrNA396JS6xsE${)^H}A0c?A4zM78J5-hLG!v5jI6lU2V z{C*iLUjgjj;qLqck9f{bXdt`*+t{pIRB*+=0u^;y301b2UJYM|CLy)zXRg zkfGu(O5EcQe3mJUJ5~GYKaiGwO~m)U4w2qYZR_x?Rotfz&)&wdNrpgjFkP1utoAea zvS&2O?{4E@=n!870SP;iEYQ`ZseS= z>Nau);I!J49IIL1qqRk^alb&&i9ORNM$TcUS%cy9CfwPj<~&D_t$R2>Q01#xJo;Nh z-`{Ulo*1VJFZ%~#Bfg^_TBd-1Ek<49sC44-!+o#F25vqBb5 zMOJIHAdm~0?Q2%o8L%`TC9Tg8blQ1W8_wjQ1+j_pmbVu($91^4Lo0V!hVu!!MOBw zDOy52FMW&R+c69yWBuJvOiD-9>~AGotGVR9>>?ebjSO1tQMJ*=UvC2cJ zJ}^0mIc}gYU{tH4y`gU}C0<@!-)5gbf3{s> zP*(Ufj(D#S=#AjTa2;KIihJ<9Q@F!l9CWnIil6m6YIJx>B4P92tZ@+&K5M*f>J~;4 zM+Nw83WF?kEr~byH2r>OxjXfT{cgJcYiBd~FSkKs45^XBIfd5u zjEogVD-z+bJan?Kg33X2f}^ahX3C_%3AFr+mr)lcP7CSaCP62zIW4*0_ww6X^`6!# z#T_J}x}!1N>3Ft>DZ?H!QRlanrQ2L0wgy140MEt(P=2;bjHgNTn6b0e_hf< zZEd|+fYrEyD$w6GcJ6D)e`&RWg+lNv+H6qxJ02eyHVAp}jVkB=wn1=oUfsHij7ha-5xH9rzHvl7hf`Z6$V~)d0 z`2B3UvY6ND`tp3Jjr2lF4kfbYwwL5j8T$OTHKymr#^I6e-wt;W8`f3(&=2pYbo58s zRJ)y-ntnL5Ku{O`%W5Ygi3gb@j`t`z;Uu*8>O6 z8(H%fwwDRz4~)bAE^vdWYZQONsc!o>DAmSD&4VPDeYV!42Wu6FQdoU0n_8GEkPPzb zIsma5VW(ifb%;Bn~YcX1uiu^xCQYs#kGU{oMi6;G)^RdUWKmLP#WOL z9!LaRy4F8KtZv_yrp1x21KiS2CoJ(gA!j>vyA)IxKUmVcK!`MKjsVdS7g$!O&~4V6 zk?vTr|E^)XEM4YCYs(wg0?+q4tUQd_ruo0=2zW&6UJ7ae{+kEy%mNsf=L2|TG(O(# z-gbxHgMa#zeWI{aIR<&_p&!@(`844~s_wpPRmnRJ_5`C;H8i#I{`4+X9pm^|bq1G1 z7I#0o`zFYr|7{sdpn?vb+}1+rMP)NAEF8v)42PS7f@(l&`x}H@W*^wL$o}jGu;s$h zE4m?&XsHrU!rgSVgf@(Ug0E@1k4#fCotZnNl1Hmsq+r8Kq;{cp4ZL3PESRx6EFJFgo| z_UH#~6_x8G7H<+S`BNMC|2Il9sDMqsyErnqXpuX@Y}@}@G=U!p3Mqr!cKH5rGVO91 zdZ>_vOSBF5M=W0`AYBDZsqrQtlZ!_$Q;452%V>3)2KWZt;lj|0 zh8P9~WCsRFxxoUX*ztAgsuyT3j2KaM3LgZjP9l*^jr%kXX8z+Q2Yl4jQ znecUN5h{+3uk?S~F8(*CU`QEE41;#a5HSq|%g?0JG-(B8>C2+az3*!8s6_O--?3MJ zvW6Uv80D2-d)G~cxt(lM`5v$S%o|uMk40@ojR<}Roj@|eSx6(FR{nZph$B2|n-3pG zCcS^}Dbpiu4koEOwbCoEcOH1Nk5ubCx~tx(uGRi$CjOa_zdqmzVX|0QkkOju>eYIA zT^{)APE>DwqjGGi!PlK7Wq;1}nFGy&GpkSWKXvL#ANaefz9D*+XPYvrF7qTH9(!R% zfM`IhZ$pJEZ%#U|b^X-Fy>ksg0Ymv&z%$%7+zmq?CdY`!iS52?ore3MR7Oi!>e^*p zz=4B0&l;mv_ygJ=#s(>c;(*_IF z-&NZrZ6JKshom!I)B75b7(wp7m)5G`QDTk>D5pyfC^>hpI) z4BjO?%xu03N9DrLFZgl)bi3-k#*O=%iuEBw!V76_hgyglVNmk)|K9*Io}pKKfB++$ zI$P{Q+xUHmc_GPlwNbN2L6)DE{(kEGr;eC?T5qzb@k(?m`v{9>T)fV)h@^ME`-UmA zb9!JwukRA$eJ$vqAm<%B;?3NZCS3`f(T&2@HMembk=T|XX_Kj=-5hFk+dKI!Sk#tN z5G<5(YO6nI%)e(TI62AiZTV6+iC8Z_ziaf}GWwk!?_jN8XfqIZ{&2M`5@W=AEdCk4 z&4mM7I-i=Ae~#|J2Nn`H_D}kqC`qzY_EOiE8<=c7={$AU`w&B)t`+|EV!R4U2>F>W zeONnWn&+W+USK0C?Hc!>sip|x>%el<*OK_m@e~$E#7VpZb9M_xr~TQotlvN9?ElWe zKQWLJ%t#$Vr)Dpmb1-o6^rQdf9(vNrvSN~mPqfvFzG`lv{=32svlLDp_)VDZGkx05 zx_f#E)!}Cts_%5Nb*_?xnfN_^EB@%~xsTARRVysgWyRRL4l*H=jqz|m*6Jt4y}UF^ zcc0_647SWyc7eh#Qiet9abt%1wp^EnYmC^&JcCKhf;es(_LwKv3T5uO#=Jj*NHO@= z)`o6r{&7S9wQi8j7tjqp!5nohT>p9sh=RMTI~!xW2lCXmALk69DGld-(w(ZXXJPZ$ z3mqo(C>zm988#1o`m>= z{Odwk?C6(pMO9TnExzrznB^XOr#N*b9}}#WULM!r4{Q!`{~oFT$2PtL+rWklFIDt! z3g;(A?p}v~>Uea&`~>lN$ke|?DP4Tr!`-jA=4KN4MrqM3)onIihozxXp5*+SU`Cs2 zD${sDgKi&3Vn&uxD4Ju=toY~qi5lYx+@YxV^3piep4pJ#1In+SHT&YgK29z^G7-aW zm7Dy21Z&cDAKCrhbQbG^Cv4iCO-AE7pVb4Wkine^56YSJEwAzHV$6AOO;wsLmQ8A} z54P_^5-`@@+m(fSzx+SrSNkKTrr#w?J`}g7%TOPGn5~W+LTF%VKk{DfM}4F}V)y1= zqQ_WlTBwMgwk!^=OKW>q!)-498$@=loBKiT!#n5zzWV6CHrV29RFambk<7f*5f!H) zJZV)^TY_TJ3ocSHf)>%n3g`JiIR)eG>mP9}J-tZ+*4y94osKA^FV+~zdCh~}x2Jwa z`GMk(H2_(nu9F?y<)@$hzxF=oD)2zu5RZCa9He~9)Zv?_fqWXK*FBc}Hb;tml{}&l zy4R6!&~rc4*6O@44a_L2+3nyzc<*Jk3~$Jp4!+(Xw*4%fs%&^xNIf`sldC05e$&k` z7;tuSv9*MI*htM|CcPIH>Em1NUZl$$@N$^9Z=4pq)rd=v)hH-q%VmT~ z=Ti}KvHqYEv3TM6v~%q`bIn>-#6drADh9X)$!!*N^=%6zkIz9$dml8?C(F2EN&f=C zLEPt(T2*P#{(7grTgiCp`)i_9#`>Mw%@vl7q3oBEhrI${&R3FGtGJwbb{bAieU{%p z`VB{;u{|0_4}0v|PI3@*a~kAC)l&WOBgK9D*RlU!vk_D@=c~=cVR7zHz>co+o!!W- zlRtMg3*sReS+Vt{;W6^!?n)Ucp@JO$%8N>7{k$riaO_FWAVgu9uj3n}llrTo->j%# z1P)1TStS#CI=&HFUu~uz;46rD{LU=#VTCX4Lgd-8(n9`et}#JwZrqIOXs zy;evjzo+#n70K?a&hatcL0{WIPb~`-JGs&4uTA~57DTa6248AOX>yE(_gz-AJK0bFkvw4?l zn)x_5my0g~T&vzV3)6k@fl&;H%F13qr|50CF#CzhDMaP2)_}yIc%bz`osH?CR!Fd0 zw`;EjI=DIHAs!$Rw=kolH-d3Gk^xk!1p(PY6 z!9&m{t#%UgrY582td8jPG;c2wt0`~L$Xw3*;wI!Nk6>p=^w+C@eac^FRr5iZ>`47) zj!QcyjFu+n>aBAigFvTx!ly&N$y#%TP?^E_fGk#~uPnXskH0;=dhfgYaQi|v6xpN0 z?QJxRK{N6STtcGYtSj4za|iRpiYM{lnryK$4@K>;Z=@6F zaE7wS>yjwQ_X@*(gw14}`+O1z_jrNxx)Cx|uyoe^lk24rmvsALRx! z;xL*gJ65`WI|Q4^M2g}(6i=F!(y`+0(fWvrK4{E52LuL;U!V3BR($}sio}-VAKn_y z|5M&uKSZ_d|HCswN|zuF(jtg}N;9Z*4<$$`-8pm&As9%<0V$C#=}u8e0byXIyFoe! zm}k$u=X>ux=Y0Nyho1%*n7#L^_j=WGo@VjiW(SnPnyvR+0PXYjQo6_L#!Pd4y61>8 z%+N5Ewc7|QPZPIEKCH|KEKW_CPtJj+=mR|80yqR@iGWVEKTeT_&n#eHJ}BCIF3=zd zJvFyFmj&Rp2S=lt{om-!w(XbQNFGf&ikt(m=b?p92!{{gS7`JVe~6mh_S-N|-x_%WhyLNzu?U99-tLKMn{cm_Oc>~cWa1STIjeh{hCs$7oUjjg|J79?F z#TxHq=vJLeNtOV}DT&dgrE-=@Q))llv2i7t;Srjvp=*v@XleJ4`hrZqJ|`ST`>Rh} zV62N{1%Q)Ix)`NWQd0WwcQY+r%Y>2oQMv%x31M#k0wMpq*8z}dZR{e3FuuKIbfKq~ z#y{8c0Osydj1=fDi}omE43gqg-|b={tjRE28EAxwD>4t}Gf%o!J$`O%f~dmr^Gh5!yG3{u7rnroOu6JWG(0<*3l5fj>fCm2 z-3TBN%fNP@>N~~LjvI>oAP$eVDd*-!Hi!hiSkYEledgJr2>#lj`H82a*qxjGjk~@0|Fa}9CfK>Arl|y37iLe#`MisW| zqw$^*>k<1p%iAS(H2lQG9O1wScy6|V;E%zDm0Kh{DQuk+Hd#Ba^DS6?z7#MJG*F29 zGN6tJ9A4cvAt8#j*V11IrCg_1Qp^O&WiKnx+t}QbQ}IO~f56_fJN*nZD@*-)FND78 zT=I9rry8dzeT5j7oz+DT_W39Dp^rl8ajgh(g~$R7EpA!JCfkIn1dPAn0CiL@WaDOm zza-`5}Y+o#|D8bKF}ibYo+jo%jcG?b8Iswb~QWoQiU#NLTd zCqn4`D348>IHdJdsy_Aq7OZ=z)9TmbWs`NsN%C{)4$;=*n{L$jH}sRKJn`ZQnKaS` zb!0A{soYspC4fgI^pW*=IdbrqJ>vbn$L-Sf=Ih4NeoXM?6D&QDV)9*%L~Z#^bee2%vP=k!$TA0i2^|=#v`|#eg9$tS5=!ZfltxgRcNB5O zLQig4lmnpcARb9T{uwYGeD+}I?RzPf2#5nW+gX6XR@8?#_E#FZbO%WU%^-*O972F4!$X_ zpsRi>4hi)_nnStUuf5Y($JCy`Y_b9m2Bo`&Sqf+)a3dmcN{K^3&*Jc_d=MVW%F1$; z$`JMd1EH3VLkj3ebyXBOGN9eQ+fAKEA`-3gxQ=deYkd{t}V&95AJkQC~Bk zWq+Z4?zr#=H(>v<``G2!{I}A*!k7cw)^@MNwd^lrSc7=pY|ty?$-{7J+qA5&)?&DN z3LljpUkibFaeDF+OU)R2E;m*N8lK8X)pNpE`|*#H;F{;Px;4tGc532{w48-q35ir= z>}KlF|H;V3zI`G3rKvSa7VXFjq-V`@{@brtI&uokD0oFJ|FnDWl383J1g|98; zx*|k2-&@%7(HUsA1LL|6D0DX>;x}Xfj`;G$xlQ^Jz{572w%ueOlr^-+Aml3mK4DGd zvnO{0(9r2&ickp0yQu1jN>ihb1&Rc&?{;5{cq)ef0I|@|RV+MpH_6P=1cjc?8lG6V zjdTqb%&`RF6Yy^Sv>+g5SQbW#6&n+Gz89M69HRUl?}SSUfTwHT%{D5umquGVw#%eG zPbH=94oF!}c6J0?U(*-Mkl@PTTxWJX6@#VTG~eL61O)!g#O7ZG5{5wCGh12+aw|H= z!vV-@h@PBb_@hB$4^GD)je_NoL!D-k!PZybL4=>|KmWCc(&xlQk~*;`EA^*W>R3(| zx*4^9c0?qWzoYfPFB72OkN4KYuGh*wH`j$u(PB`o1eu10-5lkQzawq^`)Fd&&JcQO z{!y?^Aw{ng9C=6YY`6N9BK7h*Qux#mo;Z5EaHOh8%$7$+^Z1nzxM|?CfBA3~V$v(G zYLI10HAkKK*!LrCF2Mq!A5ox%$Nbm0o2U3mS!%)Q$J-O5R=+0*l4eGSm%dlM-RZmEcbMNoSG<# z#zt&e8}Js2mCuRLewpg}-07Z|q;EgpARKWRp-MtqGrrgIzSY$DaBpHEb`J0!kZN?V zVL7kvWW+~kc0|Vzuz4{l!Z+bI7orjF!#B^@@`Jo$1*o3=D z*APZ+k_*XZae%?kNd8Aj^6wh#Z8$VA22O7(evH;p)Jz;e62aqZD@;Ys=wZx#hY8U>GpY~j)9xM?F8o=PPn)hy@GN^vuYffUk!XEcX&% zoas6#rEK~mmf_u>#E3;r?%9+(G-=JlUR9@wv|s7{K=0{M3fxkIJ(Ejnp*J<|AFs*8 zE_8=kCB9iW6)3S8SFvVYx^Uf$0h~$-DNoJ`Akk91W6;AF05{;yMPRwJL=wq54iftq zhp+~d+s5nopx)r4LYz zS zWPfxist0VH%|=1#j`nB7^l6Yp#QeIBd+1UOAZYdao$grh^rf58$E^jCr-Z}*YdP?C7Kr+thgFm3^e& zr^Uer3*Do^p;u302-(Qm?~!&Wucm9ETLFv1^YSvL)WZkk&$_g~QMw;Sdt2Mi{h!B^M6)Q+}>5h}_k;p1L-)i+0EqBp&$7HmdRxiOh7QK$R!3ejtdhZD#N z&ANLDV1n)Z35+m2|0pdjz_lx+v{zD(^mKdaB>_@*WNhu zRDeE!em;G=Q?Ymaw3{xCz~&E!Pq?A*uoa-ByA7<-&Mb^VJd!~GxFVsZHLyEX|CurJ z56KaD1xGiG~ zc`!OjD^&96^5;X)-8zZFq~BX7@h0Wx?`w971V(fzgi1<7Xo$dK{(j1SFBqW1kvi1I zEvS^DvN$`|0IpB0KKj~i=E4Ufwvn!x#>Dh5(* z?mRd34$199c5?f~4s4!DfLp#bPv#Hd*D`Vir#mx!d91)qe<4Pe*ZV zIT_@%(gfd1Mllc$g;{9WK{Q?hZB3NPAE2gVmSAY(9LgdVEmk4+wgOCRY1z6_1Eu&# zp;4Mq7ltdHlYv7k8tfy>MNpbh`%2_w;l6s{`)e>4Lx8i}ZT}#a8kU}9K+($fkoQZi z_5p}2K=A#Kl{Mq!q0xMG4+%QsdY2mwcTpB=fT8O@j2RZ$Nxq340zw;OZU+Z9G0A;= z9-L+L@PLTS@^bZYDCvumYO1JUR(Znfnl`=m z&7{ee+$A12?Y6UFbl2}BF!AkgZ|;(a)eg7Y$<-+G@$?^L3*Tx6F z8&0FJ?IAEzC>csZHC%A>VlaSX9}%0Cv(c`UaB z-Dz>}<-=>`Q@+d{x$3Wp$Xv5}VQ7DL{MBykYV@*oxdzX?m%F6DiIFt6jlh{_u4OM@ z&37eGIhy(2H(X+xmD>Ubiagm(PN_$8a2vkg6iVs}&sk{UV<(8GQpo~W!G`kde@d{p?3 z>CZ5}-7=Wl2dTL6ML*-gbcC4V;F@Tg*?<6Eojzrx-JM`ZRM8Z*rEcI_!`0;zy*jB3f(+SOt(D>F# z7BPYy_d>$Hk?Xe72b*eWIH0vpcx)GPiG}A>_XlD)B?DV@KOg1SY&3tWG4ZW%3>uJu zweJ3wP*KH`;K{YV*ox1%_?U~{EgH3_kxKzGNh`wlIIW%i(m2CJ;(iYif|-{E65*L{2<%4hHK?}Xa->KC4wX+M6e zGZtTdX1w~oMRPUilCJ1-!A+SbC~@(t0qntvOcBFX1?~eKE<=?PX(NKB3WZjkUyM)8 zUr^q9nG4J2g3goG>!EIQ3`TOX~jDK{IVNZZ_ya9D9fbp3Yy;s>P5dEML$}9&B zTwrN8rU(ksz!d%=rDGi^sjY&B$LG9+XU@o}@)Lm+KRRcW-pvDt3|z84T~#0dmd9m~ z`12uxPua@hs1f!YoUBxruR!%iMVZs#c(I1ryeY<38ev*cMNkvVRx(5j0jXEZ%gu};xYrV93P?3J#><{>U(3&&0k)f7z;>-2<5p4VF}eS@ z`{;NZ1%0MRsaG0Z+yAaagtZGa-=$(Z5s=?v6m)5uYgs&2$vx9n6A&!j zPOj?O_Y?xhG{PQu)FdMHRg5M#^+_qT`15~*K+N}*pUUYL3W7;OCZDESQrTHuIEZn? z#gwmr-Y({wgaIjA_h9&MPG#u`lYFe zyYw}Psa@96`K=nI2|sdpZ=~b8*InAQSzHCE&d%ydGe1b60B|}Fh;TcO)?A-^!7>{` z%E-;d#f6OznKUBxdeGS+{5$P~Ya!|VzpZT~A=Uu<3IQ3h-OIS}LV=)_xz#jaTz@H(>v@t?^IU0W4e1Tdsj3_v`plg--`VB^xNv_S$*rrdsF7WLLahSt!d;0QBWZo z&lB?e`U+GqLlWB10uu_`FlgD1W?}5dLai6Eh2x6)^?9CoeT24CW>oS!@DHXjWOm}L z;XQx|?H+*gRATc^gk9&MSeYDC(Ah%yIOD}BKBMD&RT}_gnzlWhws`2a_;dnj>pbt> z+28jqdnnEUDEZR)RBik$JB%zI3!wvEZ+0LtCFk;NDdznC%}JL1oOgopSoX)&`d>i| z(nI9KbU^f`M|W9O-<^?q7qblj*h&YK)1*w>0NAbXHS24$0kC36n`5d#Vj>+tjJYg# z;EfVpH70pa%dvNy*GGgMU-vcoJxYG9Piv!?4 zHM5ItzOV^=Cs5~_^-4B#2%A>yk;S+TzK+Jq*xhH~s9r$)xe(cCqe9S-33&BK%if?? zR#u$n5;SG_fZ)Bz4#@oFqgfw|R*V1Djr~b-ivsJwviEAP4u%DW%-0>mxLuFEGbnGr z_;pMYDZb=+Ix6h2?MQ!kVGv)^$;I<7dW}^$MfsZ{Dw3Qe-0R-9s(#9FskDd<{QU!+ z*`)YJGl%m~>$9Y5*5Q#M0oj5hOcXIL?&c8ztec1swv(INb-}ID>}^E+>%6&zTi?lIkA>U;@iPM@+^>HIlo@ z#d=BzVDk+C$E$*CDV7p4;K*X7@eR2(r>)4m5`NS`JC5LJ1C0GE-wt~a7$E)`?!)5V z!;a-inhYB{WyKtdX zl=z&-qGJu{MBZ|YKo*zvzfvdvE$RJpZhRMk6&}q$Jbl)hQa9+JNgrrJE1UlylbS%c zzEOc5$L_d8QRX6IfJH=4*pC8!M4!j=iBikPXY9d6Pm`Lz{^#WGoQp|$l_PSbo%aOV zcPZEF%hrg3A@OD}D&u5L_9y;;SYNxKsP?B4omx*T@bctIqGz|Mv#!bOCj{fNHM3Iv zi=>8^K*-XMjHY1BwV*|GH5pDez$?K@)kuX~3BStS>~=-Ey}rRhbJMQki7c`GPfZ|% zu|DQLE|rAW_Ilk?$KeIQ0niDb1L{cY*B%k46E>{f!sgMWkEXTC8&?_Vgv@0pE`X>l zBdo06Zd3uzfi$P8$OI-CRO=c!ljhe|V3NJt>DCRTd~K&cAK%#lEE?|7`+zx?i&?_c z^}`F9Y2eN7K(aadg|ms+2%s%?mKi7HK-AI*kK=TKBN;7P0qt{?=O(fjPyfc+*@3H?alq--HNSH-nc)fb76G#d8rNUpv2`t6s#JGFDU+J@0*Oo+XL%R+` zNvyj8R%ivFXdWH1mdLS+rU9mw?T4{wJ8VD4Qo(! zZWPVlyP4k8y}uGF^SNa&J2tpKyk8)!j$s4q21H35V!1%^Z!O)F3O-~!D4Pwps6g6V zYl&*ooj6eg2LLa>RJf`&+}e6N>o1tFJ%_d_ToK!!efEgnMtFY#POZ!KVF!n)bPGs? z&A_@8&S5y?%GRy1R{$vs2NRs23Mn{IBqfLkk*K~P2+=GrG28rO3howeQyr@L{i7wi zqZYszJkAL53d1M0uZZvqOFPGJ;Y0BXjI}SZbIe0~<&ZfJleVAUPsbJ)7q4si|HljT zACb^Ia0u-vUWe6}(U7AV&j;s0X9h57|725^@&M681C$>*9Y?lLTduBx^l9bMtzm=l zSr=;MIsw`vTw|}y`{lHALyza&Z0D?;C7r#W4Xb(I{e{#SvIDWD-c2daGEJC{`K&Z$ zTn5815`CmJ38~BuYX43wiW|!tH@P?nn{>i4vGAv(agD;K1DQX4_ojPUWZ?z0=dwGM z?&~LGgyW;ssY2g89|+-5V*AmEDpn37*iYgB{Gthb%QKiscl}b4HLwOt(h7=boXjvH zJ%mq&zxF=VX`Tbl?ogaNwa7j?1+en=AF_w3XphP`xK0A*3-P_>?lZb54nhPq8sNo8 z@wm-JJJ>oVR^Z6EBkyypG!dbtmwc8HBg^`hsB#%02Tx2iz!ia?dbhk1) zEQ{lkiOlD0N4<9wU8(LX82+d`ej&!lQ$0ZN$Mxy04CL(Jkt=M74j_g@+_bJ`X+tx# z=AyG_g%={-do62&WaNSK^au{@+H=*)JM%skgcjwSKxy`jn54?;tyTwt@ z!$2za2D_4Z(XWvDN_7EIx&vs_tzCj*Ol!UZUdtyV@8~A#y)=W%NY(3Vo#=$}(LE(w zyT{*N@I2NdA|U{9L`xFXSC(v`KAV{$$=5#29uN{g&a)wl8W1PH1p;QOrgUJaJIjXP zgfG_3`Z*XFXr3dyIe`Vot`Wc<4+|8|hHQ2Z8H0o50-GKUDxY@%A@Mxzd?%>`54pfn zghZ|~;ag%na#3QeBeWk`&wi# z8ee+x`^3Y4sP~?^6JBo52sToS!dG))n>g_4cM^$x*%{+;p7-E`)bfKjJ|~=wk~B)p zYHc_iHwxzs20kn(J4M1ZZYsMgXv{XQ8lErg+^2ctkSsGCX=>`6i5$FCTfN$KE;`#* zxgmporyJ~6yIjnzdegankP^3+!Ebnf@8SjXIvTohu60Bo8f5-(xV1?-;R8o)f?4uF zAwizwwOZ2d=eSad)1q{8?(omg$dP0q@iF2;Z5~;}#N@@yCyBMg&*Lv-@S53s!%zaN zp9syM)uvAtf{w=w7@5M-uJP!M=j&wmzfvCnHHM6=bq4~hfn#1)JKo2?sZ$@r%cMX6 z@x&bl?ZJ1Ei5w4=Oq#u~>CphIeUSKQvtK(qW)k4-_yFd%*F~_#d2`8ayLWNv*X=aL zQ!q&#*y=_it`vYno;T*)!=4(@xLwu1DULy+V_2jmBx+{;e}QnpyiTtfAb~I3zN}wc z9ka9)Es(#1RM84OVFk8v|JVTwKm@wCkZOUHH0H+*Xh#_({aMHC+(bRIT=>MdO+^Pd z!sB~L$$JSc`OR2VzB?>oK*>of@5Tv(9V#zF*FF+)2VP$NhMsER+_+eAmglgo;c@7j zQ>Cf%IpxUgYI|^EvCe0Rjat4%Wz%q|#1itrM(^mZ&TV-u5~|ukUqvaQq}02OyJqoy z+T^O*E4QrJZ4qom;4q|=(+aA>nch#9B;2tW_LlO-c1>j!%|nk6e2wRThSeABe6tKq zZhOhQrbGOjbj;WO^y9w8Q9(P9DQT=f7t`4o!4k8_f}fYw_@#CpsLQ>AWCtI;^g#Cd ze-gw1CHbHOenkcphYNzs+#)w43pgzgFTjokHRjvDD$DgUSR>ikOF=52o=Y8-4hakp z7_!D}{FSii+v(OxcSM$92};6TavN{;oASv8{=)tOitw1yeDCdb&D@e7?|Z1h$2@wV zt^C+l*Pi3$7(%=8?|u1|{(yS=28P*ou=3&fKN^DJ_OQDO2uZH+^`0W8<;2d=JLZSw z$+{ct`dDqvqB*ZbB;zO2H+J07Utz}P#{rKXZW|h3+VVK#QS9|p8HZEzI+I9y?4)v6 zp8bJje0jzl<_CqbTHP`wz9)U2jhxNo@j3Atn+S*Rtjypa!zF6jnU5zx7ZL`E9xH^R zOu2+?CM87I9zpTN`7~6Ol?szhz-jb&`Z1)F3~hq%;Hrrz!iM_>ez&wu?Q(;$;Z$f)2H2 zt0W0Hx_g~o^8<9%oY83~JLZ#M412Pozc`Z%gs6r#*Fee%5=lb87@bE0Uih-m6)8!O zg@6q5A+LZ1S|?iSK&e~MTt<}G9It~Hdrrr++d2()vv(W{0buDSvOd{T@VNSW84tQD zK*#a}t_AF2B#mtVbKyuUA{!EY-^cAeA)^B6S{7S3HvGOkX&$dz+Yd@F&;Bk*e_@C> zKy6yQ3(coI|EofN?d>2K2Q*Fi$DSc|;erHVc*p7(*=EhB?Du2{js@(uo3kz%|%|vu=tqBv|a8@&}LuRqif z*OpZ4gwt+qp3Vc16I?g0jv7%lE*#sy^{V&IN5>2;eDSp4W?oHo~X~o z=n^3n?rUnY^oLGqKvmP@PuVGCyIoMnq&Uh-KEp&Hw(aOX0BAx@prN$>mJ6vd9U;4% z^J{scAVo%k=Gb+1G<|nd;1o1CU|K{CT%L5^KsR!yo?o+sJtqLTRfF29+fnxHKsh z9dEvNFbVt?<$JJchT&K;MZ@ecmg{yU1^aIwichR(f2=y`49lBQq3_i#vXI%JE;`?k zRvy3@eE?aCCTAl-PK_xra_KnTmEaluPa6I?SH-ZZ{S5}_GxaTELK0hX#9;b}m{K;F zuoqc~+o9W=w3RNRu(ibBJHW`lvCKru!z;-)r5{F-RyH<*^Ro&kIYG-!cK!M_*|@yU zX3y2{z{e9rJC9P35j-m8CN9cr6#k>7#rT{9$#)@^la#bAfNoe9AKg~NtM@ua9@jIQ{(Dw&I(6mnr z7+IrUenpJo>-^=e-cVo_ly5XHWh+AOzUj=suSMDR#%NAj!(ou0yQs&sb`a_mtPx+h zU2>Q;dbj=4MRig#Lf(lB1$R=;_gB#>p1^n#Fn?MrE=$fiUr9U4;+ycL<}?u3I40=R zbAT2of1%PUFk8Z*$nj9w0L)e~Y#%+AOiDTv%QdIKP2W;B?j$;8?|}Iw$^>7elAs>u3y{^`sypI{%(fq+QO*)qyCPJ^?qptJ4!^2!>;@s4&z zUahM_8?EXtsrNT!?9ihLMhUVeH_%QW)?xf6vSF*iaT;Y40r2f=22Q1tOlalEdy`v_ ztIp!tbyhcF?|p)GLt+{eutub6c-U974MjA#o)$22skVuA1na>XT4(;vd^_ zKUgZo+5q-icd34*X|We7K|AeBGuL!NKvAS?}glDTm3$cJ|{CGZnu{9;45!`5S1|K3U5s z0bBL%Q?!`k=;odGopI=@|VXDgX4RH@u4dUx?$l|L^(W-(bxnR5> zmmY%l7;TE4YN9WP;~BlzqJJNT{~nZBUO@tc_)Nmwt{=F6*q{ZB2WR+o*59!VFHox#B;b zfHzC*G5EV)OHP6e%hnWEWZ!^*>Qz5DFMebA`D9sBd(B2=wdH8T6+Njy;e3|l^%^vU z7(^lV&wc!#m&gJUc#e}zK{m-{ezHwJl5b*@bil}QGi!!3PecZucm?8-F)WL2By)!Z z$viQ$t@>V%YTSg++z1!X7`w^DDGCDFWY;yQg${mDQpQN<D-1jt)k4sjG7;6BVXH!cWhK^ zS;L6>p0% z4j$0=a=FI&!9PREiQDZZNB*{A{8<7Q#z0F*K)j=K+WR_ud5fy4G~RPCd!BZl)CmzT zlMi|XCIq(q^^QMtw0C;ZHq*i)6cPBGXoM0a!!EgkWF+PoT*?*rLR>AjV3 zV&{_fPJFudKzChpZSASjRng&RcAUT@&&6Pcs~AO8-T!$FcLQ;aUVsqW?Gn>>j#6}+ zWL2&W;mz-woo*-T%%w~g&8fbz2jR*U;e$7)_Z?yVkX#jy)6MJ>K?L=o#|!Z8y5t5_ zp0%poS@rQTiVCuhQ8^sS^;dG5x{lv!dz0v8W|pfaa?KE)JuI6?iGZr&XrVR5e}HGA zH~d$jUt@j$$M*cccCHYsH`rDwG${Y0R!Z}YU-BHo$#Vx$!%yLo;NFAuilAo!m!-M?U&s>~td^dMIu zJBp6;X}D?q!yAd7DFS&pXuA0H%bdEok~m*^`XZB}`ch;txpF~2awF@WoKqw21COId z1@{SiX(Fp&0nXu#_#!I!fnKNVnDRF~$<2tD%7uf7L1Q{LgirRD&_tHy=Op7E7jO@0 z2Tz;UxRdYych`LuPgt`Ef(AabZKR_q<8-2Oupdst{T9;n;SOG4`PA=m|tA`10%`&v)qKHJRx-KXiNNoEL$n;-gYq*Jm z5ZzJcuo5>0+lc`Me>ibasyHy`)AUSuy6*>@bh9Z^sY^)9VbI$}(T3(2UPB!YeZ`JJ zG`K#t4(-`STW8hrgLy}B$+zt!P_RJ}ATR`%5O^_fh_@=$xrn&6gX^Ql1Ar#AHRw|~wJ0?=*FCT&E5Xa5T2Z<5Xn<@Y2bN}^10&?9y>z1PO z*PrGLjS(L|M#n5N-dD*bRO0JTsi_2Qiy;6hoMLPznl5@n>}%9K+N92N$dZ6 zpKN!sL9gA3IsSX+*f%qS@u1x%cm8}9e}2|$B3@9=^q0T5}ckl^m_?(XjH?(XgoTmr#0xVw9Bf=iI#?oM!-PTqUJ?@mq4-g?vQBfsn zQBfi#7e@N(ky*igg%qc|*ozgHYZ`-2j}(uDv+-=t zj!I0}bs>HRKeKE4Y>)PbF_Hr#)#Q6P5zLQGA_y>&?d)z*6-ZoYkHZyDOF;`Lr;O;D zv^9{Q=<}ltBP$1s9Jg%S;Yg&BCUVNQK6J_2#fb!q0ik`Z2IK)t3eTth$NA3AtaUCN z$m~M|5dr3o29@POOj044wdLkJDD`D0U!?tH=-B0QZb_Z{@{v$DxiRtH_p%#ThE!p( zPFEnd;80#%5vQFPxVrkZ>1n*9rIBN%2qS~Ot0jf+N1`=qesHD8y8oQ#Frd%VSkWTA zEM<;IOEQ8Hm4HAoDQS^>0*k8XaXiC_rif8CXHP9l{nJs7O(Ltgp#3#`k2_=JI@cMg zslkIWY&NY%qZ@)GS!mN(b36yc^FipUyiz^~d?2Rpys-u=+LdrpWc6*SqlJ~QVHeU6 z@93khYLRV=8;VCV^^d=~c8;x2p3l9~Gbov-_11UUu4KR|Io4`gZd&qkJf@EJ48~@T zCgu!Y_D+D)KtTAscz{cLb2nomFMB%&R~|2Zl7A_9fa|}v8A*u#C2_OmC()8uA`*3U zF(+bYU}In+5r88iBI0u~v*1w?llZUfz%PChD>pYM9!5q_PfrFX{T>r}~z(B^oPZ*gQm>B<8*+5plzjt|*ti8-!=Y^oZ9~*CoA{=%=tf_{8vss#=i#q4}<>GTmS9?-6a6W$N0axUI32!>H9JW zh!BXhn6R1`=vfZ5AKDP+2y8dB$Yu8fgFfBzDj_JOu-&pRW4@8-UAUQ=pb;=Vv9HYzgHw%o-kDGFYAd`5&ubRv$z@bFI7N9kV@kw zLX?LTPypKB3<&@4WEj1$g_+8US!wb2)mpv~jX;vj=0ZkAMaA_UTcT8dB1)v!UDRuL z2}fhlYY>b2nL@izX29=xp%*RpMNH_j;SNV*bKP9H=TmXu-qGySCk)5sw&R_lnIVQkLT1&W3^QH=!G~pW`WW3PlMcN)UQ(t7kQGw7{$-#)vY`hkJD;9 zU*WVZ(n9<_gim~HFe>>Llfj_f=1;M#vv>^JaX{c9V3RkE+-fl^*a5?*pEznw9@i>y zKlf^5ANDSZSM(J{m7jb-Qcl6Ti{usn^*cd0MkBcAtX} zF5CTT+~^@jnD8^1(sLS`uWS6Q=wLuH{*~#>(t^xpsbXb+!`Ef+>Iu&@(>Uj=g4=fg zkTdH0a+f*n+1kr2v@9B9?$;WI0YlkWeGZiKQm6gIpPU-gnfeHr?_39I3XJ~yO-oWitq^FgG|o8tY+}pn;z=C2Vs5t zofALC)g5ZScb$bLeBiOL!G9hY9FMc~%&=eJGhOT*AtjMXp_^@==hw=3gC;$Xq6Pb# z!iX6t!WMG!S`lK8VO$lBSHj)G?X5BSH?43Gs7X2&-Sh>EZyEOL{tbF%gT-WpN3773 zegQA57Cbii$Q7haE32#E?q$QTi5GQcUWuSrM7$1Gq}eLram^})bA1aW_UWA7&m&bB zlUYYafkCepcfZ%tP3hn>rYWiay)*Mp^B_n`N> zMx$75%gf9EGP^F4pD?a(# z%Aqd(mZ~00a(0G*97gaF6|~+9^ODQ#HS;GKw9z{$2r>{Br}B<*yZi%GO2rV3uZf94 zgLLzrI#3Ew%=4k!y&$6?`*4fDmfv|L#_r^x7}Py85Ek%IU2_Gj`^L~w#+`i zwdZAYIkE_?xY$_L1-%mgckPV&E`x?ssq%qr!B2%zgk0EzL0v%;v)0%|ag><(h4kQQ z6`d1MHi$}fO{+kh%!hfT2a}l$;AQ*G48+vYE+A}LZqzT)Y68KrS6rxk#W6yHw*&~U z8JM8O2NS&aKKp;eYb%UZlW#A6X5Ynf_$SO%2L0bH_N!|8!?D;vB*`?lPvUgkU@`y6 zX8*fMI+Xol)texN@#Ov_Meh-P{NKPIy{KW?W5OBHfVE`QKM zZWNy^R=?~eD;6mEQVzE_Gscol9nP4F_mM(;%j6G{$0ZLI`crG+UQ+b~%;B$9$wLNe=cD*~I z+hQjTNw-zDCsFuu(Rr!UWHsC7YbK9WTZE-tUCiwhSm!4`bI5><_e7|CR}-E;a80_nu|GvMK3omQjj z@whavpn{OkD^Vrnv)S~8lF8%LSJH?((3bGd2zczdd|_}YZW@|sY;grkbVS=tk5&8h z^_bI^eJD)%wg_OPTx=IL&mn;x-84=MyzC|j0zRee7V_`8?0MPnf6%X*P6}-grR>Lb z>@ps$_q^OlJQ$2Z9pZuC2A-~8d8sUcVs3iv#+5vMV(bdK;PblL0tJU!^Es_GyKpy3EO>lx}0y;AGYAvJZubr`6;4 zG!%om>k~|MTD6YAxfYZG7R^~*6_uWzULYQmna$^Y^ZI;RoBexF3w4LH!Frxz+nl=N z?S9o8%ZSN)KSh(QRHazv=eWii+qnQRNH0u_+2_H6O@^X{YY*feEA3ZX&c_*h2m5)A z`ys{*TkNoh!$wD?RO7?|S6FwtpK6q0&+Xw>wl;%V-)$C^wc9S$Q2nOrQsldaD1mPy z;Ehssb!{^lg4?_G+8Q%vk-oYz!dTe5B4e@!#!9(}P&v1{leKvsX`*1@J1|bhkJ-|l znGG2A+Un%9IMB|Q>%qYFQin-=K$|Ox@zG2(;)&bhnT+v znWKda+z;+EptsITLNG_2uA`MI;`uTgD&fs@+)PK>KyNm z=b>X7PoZO2-M2KlSoAuxtV+rki)Aq$(ZkQf{zLPI!7ly7A=*-Q@E>|th z%mjL#<$pGQ-%S+66talAv{t1UF5W>w|Hs{rqCBmLO3m8%)-SZkyVi#bGKf*mQznA5 zZ5cw{y((myh5{#qk(`?f zH-E)-k#ur;OyfP2A(JX9 z3sKxfRxtZNyHS8E8`UE>5NKA;FBzP!wKqO`8L zl+O5x_xS@>u8+vrmVkklEL?r^u<84aP^Oyd$b~*e%wdx1OQsX{b-OPZJhAFq0sC&+ zJ>U@1I-O=4IoO6Pq)UtWR4+_ArtMH#f+<|CCgXgg^C)Mz5{kwUH0k6K0^is_q@Njv zKOd#f*Xs<@Ay9%C)EacBqthwn2Q5nznGnD~`WmeXQEcFI9XeapAYvkVE2J}6iy%7@ z2Iq^(TVJ%69<2Ir9=;5``>Xttp?yID1LY5~s$%MyN3o}EspFP_B|tZ8K>O^=Cfiz# zo;_EEJJ|D;s=lpi745WD}CGFvSb>s#W_7OG%j&V11f+orLvYYd1z7UM^=XevzW>ngknEX9E zBju(s{bb_b>2%b1@(gpxB+<6E8zXA~a0@OzK0Y$Ca3TUmQ2us90a;^V;SwPX%u!OZ z5El8l=?QY*T`cs_yrSSF8LNeCEZ$w(3b ztDk;)2*}6Foczrsi6p>~p%y7Z2g3!m`{4)ng46VnfdtyjZrQ`UM62<4QkMiK^~(q; z-m<@wI?~@so%6tF=o@F99HG9gXz3!8i5DJA9Lqu z1A28ZGlO3&p!=5$1J_3>Q`vkCGem&^Apiu370Esek9x5v-{aymC&Pj7%N}%*ZuQQ) z63DW3G4-Y+9f5FOYaQW61qj;AR4+{`KTn*%p0aEn_mD>o5u^AdgLqy`A)u6E)#=6uTrxo9{0Q1 zmhxAoerqz#95Bu$AQtkCNz-X)K!bsG$oWcR#Chem5?JHg%{U_zj>tOT`m}U03P}`T zAw$|%GB#*%z2-Vy-;}9ev%-clEVW##j`vn&O(G3l3PCb?8 zc*;eCtl6j(L*S4%2wtkJ6Q21@24OT$ndWW31j0V9ba}h(jMW zrJrk0erNw`qDvF;>$Fqm&~T!-^AOL(Hw@3m@rfhKCq(cOqm6btrUGx^TB*WUS#f zM3t&S^2-@Q)b)vY0O7sVtxz(70PqKgs-;Od(FTPX0xv4z%3U&r7|;7@ZSN@Y1|)K1 zx;H6UgIe3i`wO;n$z{IyJlSkmmVMNX9Q08-j4;0?uYE44Y$~0!nq5H#KCg$_hn?C1 zrlFtmy(4+R9lqz9Fcmq65VO2QJf3vErR&jjRN)JvVb_*Z=~xb@;x>vVgYdK8!QgQt zC8|dTwRSxlC-u{ImWM>H$C<4`nbtOo`na^b;1l8|9)|bN`ptI2`$_!Bxr|I`c&xrt zvjY6^oTua7=aWhWUe)|rC)-(w;)ye57z(yMe17C+l>q%fU-Sg$KL zOZ_+vT!zncb4fK7<_2B@T8(FQP|h#Ax5FJb>J}B5CryRQP*WMT$hd}{%d44o)-M+s zwL~jDJ~}Ukh&Ao$Q+1S&RW<_=aMmoi5?#^?47>?11@-$Tvnhu%XB#aQXDc8;7tCPB z?OdY&wCi_z992UR&QVp*LBv33mUOWq8)MV{xa|E<2p4-eVnrd_w$MGpQb3^9tcfKs zYR=$NcREbO1k2@Vz-?VP6sb$Ob#f{7wy13MnYuA>zf9?!@HoHFbL6p|EQwi5U8{E) zMWB8m87Fpq3lq0w5J&XZ{RZoH55Y3YzD)_!=U}^7wOzbXvDaTQ@p9c^>ZTs~ILWzb zHjP}Rg5_Pmp>t~5(`PmA5CE(n%o&AS6!%+=IiTd;W!9~;jtDffBY%;PeNwDPTO9&s z+-dY}_EGf&0)8CKGc;XDhj0^f*>9Bw!S4~@sCFDRor@jGW1e+4*NziVkq2^ea zAR`Wq!Gv%WFUwf2VzQD#r2x7a&Um1_q2n~Y5Q!+9{AmY z(k*>AXfr=)qKW@2|&b?6M$2i1Cm#97!}Bx-e4n#-3- z)%EFSe;Jfm&w;XR`+9`XGsnx!0bh`&0y!SPI@;6V?7JO^O^DnaEo;j3EjVr^_mZZe z{}447ok|f50c6s2GE^glZH%|#p>^0UC~t7X3YDe}&P_ny)FfVr(7+djV{k?4iH7W) zFMGGF;Vpw7!aB^>6b|5e?6?Uy%GTLI>r8B{hKC(vsJ`hUD}7X#5_-I>j`<^IIEB{w z)|188CSqUh%<0pDp3kP5+g31s5!h9Ot%%^Nr+M?)mRMRFz&wUuiS&^|$9NCNqw*VH zIr_Hp8nD~2SNgiv^1_=;P{rfl$sTpsNAx4@P2^Nc9h=0}*vo|P?8~Se>Y1@2AbmMc zdrqefd>du{vASOjT}GGj;(775n^oV*89^*aWxII8PODL&y1#+hfl2SbkHPEAwR8Bs zDf@QV zI*k&s;tq9(z_UQ}%9Pec>4&B~mBy_(V6Ez>V_t*w1;xhVIr2e_rceG$CUDjSKXU%N zc^ssJ|2;G+Icu-FwMGtX%ll`nV0Z}yU!*ebAw9*>B*jc3Z)r;hM4eF@64Do7WlMrl zBMg?+FKsC`a7lGXl4^*{s(%+P+PI7S-je;him3#qLS&)IdfqF?veLpjriGmEQyTNj zv>M8jlf!qB@QHS(QSsVu&)G3cfq3rRMLlLE4z2zTs-vJxo`;Cz%tM zEqHAxZ5X&YN$3`M+W+(kZ`dGm-}f!#7Yjnot^fbned#;$PBc ztU!s3;q#Y5P&Ado<|&7;F=zfL3% zU$JC6w0Yg1tt5VfK~uh&oEP!ZMs%KFk&m^-5nuKQPm}gMU6iLO9p_Y(sbMZxAD=+D zDRE>-mZXlUHfFw=)P-69QsVt6pTPo2iekgXNDjtgtCf!Ju_IhM?$${ElTHCgO2G31 zZ|0g{z=G;kLFLqcVy2MrYGAiu!u`6?L{TK0&FN{YdbB(O)H$*t$~Sa=b6EUz?fA9a zloDF-HtNcyT*jQot-anR^knXH#oONY1J;kKm4?&`z2TF*5#m7YP(04v19RLSKZ~Gk zbG$#XC9w}1K@l71{OjechJu1hUMtj_$4+-61JzyGw2C1~3bg?ztPuB}6?yRy0rHbu zA)HD1p~FABGpSU{ep#Gja7>O}6I#SgOmOk`ON$!3uGnhNah)5xhLyyDe$&*+C>%M7 zb5^ZzZXJMGW@8FOm6T^OmQyxj7P~TG$hiBlmUj><_f`n5vYqAFBP;-W_o<1atMQn4 zkJg@>5rW?Oc2bw`!TWG3Cquhm3}hc$9{cG_(F7@IO0V^NNr^WOBnDk|z3{Bg+h&m&~?r&webu$oqBPo1oI_Zc$st04Dt&O*h*bODJlf z6G`DMpkRJ;>W`)YTXH*w+posbDJ5b*C|p&{LN86|l2g-{6X=?+t&%s4(+`EU_DW!wwbA6Hj#A5UGVL5-GRaKW%hU{)NDEy zBQG*90fs(EzgR}_pQOx~P&9Z-6Z^2q+2(pp6Tcw3&n9wxYhhpv6bcy?I}$@P(&^0Y zhqIB+z59PO^qSlDtw=g(p4q;HVM4K)Gy^HRYMhF*dXin!~qZEYI%N8ewU93y|nSChI;wiM4}D%l@C75PENvi zTRhGt32n*JHz|;=@t$ln zb$$R{J8>*MlKR^0G$1kp7r!ScSDpc*R*`ir8s-}ygyJB@{I z=T3aotrnLFV*}(NN0EKWJ>(2DH@y$>>xl~W@&xmk*ogzcY6{3kunP4RZCqwzV{e<4 z-e~#g<=zefv35D1=IRG%W@~~qiuzTnW@-!;LXjtY_!NNX@K>au#w$qvYiZsCq zn2-3U!(9V^U(Vx}*E|Sz5^7>-4~k{n`iQ-$v=NVosnoM zRZ2YNJnzYuOFFEKNhX#cjAfMA3rbkbVn&mF(-SyU_`myAqUb|f6>MDxW*6m>IWntg z^)vC{%_Q_i*oX1tT)&yi%?;1kRV{b1%tLS6Qsl>iu4jJ@JLMHF_|>MeGp|ax3p)*E zYSpry2}+Gh1SW+YQiL(D`%-Hipq8#tCuZ7pGi1u5^m#a{z`ykLFg7Q6pZG-X+wuKa zA*F!#UUxz%!m#v!84tOU*;rH*PlUy=z6H&ei{;#t9z5ocA-JqLG*nDRJ*j$y4$Uh= zo8jNK?gHkpb~i@fVFrl&X1wdgcfNkPr@l8;dUmrNExZSLp7S5Z?{3F)-0-ic%F>Ntrw zk>ZAq%)8U21XzE8E|{3IyN^cuVdaWiugT@kJ zf+y>chBp``ES;Fupk`Ik$!=%89bG98p#>Sl;%n$A3sXE(qsZg!rxk-*?I>kkC!1C? zoqn+nkwp8=c`7W$dKuB23CmgX`MZ9qVB**-?>CzMeca*{)q!>kj?KhowLW49`%FWu zdH?LpW8ZHMYl3DOQ0{9;Egv?8c_&th%Fw%m7Hyev0#9Olf1Z5*vVnjNV&3Yo-L zBlC^(XL`9gWp=+@bkiJ*&iltcep#>N8^2I+yBzjG?rhaS@H!TcD_|~;LN`h%j%evs zJIh-fI{5E7z&cA>OthzKw6?}{dpS>~XV@N8B{I1CTm(?EHf8B|*S}O(i3~FJ+jEsY zym$)!f@B>HG_@qy*o|x*iGWMGif{xrQGF~Is2Y0dYoUyCVbZo=rFVVgAT5kWf0V{0 zP$z}K#)VPDmr$QYQ43Xpsz7If8z=h;H!fa_OP(^9yr|;^TegPZEW(7lqMU^gLYCPM~6)p6A@a zI;V&c%<<3hv|+_Cn?4OH`EHJ(V3kU5$LUHXd&SdzEg?=VJ4Wu>Y$xj3nHnl#+q8xM z(tYk}_6@fg{bP_|ZxT95P4UIv=aSH31`3r3w(a7&7hEL%+u}fP63FXN*TbZw@>>tX z2-p6Iw-+*1%5oCF_m%Db=5OQ%3TPH5TVu5GRvNZg z=u@NU_^d;j>)i(17*Yd(iZy;>=1mqh1?Ia3ajSS=knzNmPOvN-UT^o%s>nkJCy%RO z?bzw;geex0`t@CGP~GG!>XnoZXucY01nZI~9>~b!`Cth7a6=!lh1ARkZG1>&Ki5W- ziwg~xt;}n_UaQg)4?R;Q$*n2J?T?qWD*VwVqsPrmH0;uYt#?Ka+VS(NisgH{;R+wH z>}F?hs6sG)v#n{iN(`h#B7r2VsjTA(stcT;e`}^7x&7Vr+ zEe<63@~xOl^i2kdsu#YDsfDvoFf5^REw)KiB76f{{TCg%^y)-h%8gCUC`~G^6<2rS z`)v6ZhHkp%I1nnblkXcF+vKz+@aCv0jwK6WT%!Nor^PgA7Vi>ghx|V ze%I3%*0lgprwtLWMQ%c!r+87=WsmqXF(twbQeK)(yi( zk6>@EFi_eY7%00{5#&!F#DAP1mGB^-^;>g4|AE^@kic=cb#Ozj=wG%^uo`jxLN-lX zQ^P+hkae)omOOX^OPrKMRXxQPc<_0Yrev2qhrS1bcpk>%P+lncl7;RIkNZhFzTkWn zxDSbVACc3+pf!eimZ)@HO^4A}5${iAVpyIu@{I$#&#3Eg zKLM|Ho%}cU%{R8rRJ}-~OyO8!q{#P_c*TY#*iutM+k08}kFEgq+eS)(Z!<4v%R4xB zgEci!DC~{5Fstc54VDy^6s1T*=uqjTIU8I>B#_WSLqUwsR(w(f!B7RckHle>&1BZ4 z{a)rQV@f9r51Mlv{oYTP)~%C%oP2h+o?U2f;B6BNy_toCf@g1(hrRw4mZqJ*)?%;A z5kpcyfy4H~R1XIpWDxk~?g3LYDrrPcp6Zng0K%y%B<%l&L2#28$btDdIk%~s8Qb>a z#7dNkVUt@u1LFe|ccv6F==~tc#e2FiX?U7y)unlO(07a2@rH94%!vaP095F1cLAd{ zRU`_cw4f7dDCTExwD|3gDLl{rH-3hI)bmHsVOuNs-!Ej42QoZfPu4PKd)n#n{E3M2 z6j;d!$|wn;ND?tx?@~A9dt;XHYgE=yVYi<^!m=^w^r+V3c*!+dtP^pXWM9e`9!DgN z!Q>4o$V9>gLCLWMaMCdSFG5+Ij#DkA04y4ICQ1Hlxj}4)u5lWMHM%M+m(3c*IU{O{ z&)1_rK+tZ@a{VY_vLNzW@isB>bHT2pq@>{evMI^=(_x{r)vrXXMQX}s9!G2SYWtODH+32J17a(<;ni*2?!`Rn4kzBe z-5hb*5OZUKJ@}orrbodu{^YbNHH&o;jafP+R^FB)sj4FiJW)F{;4z7niA648UoxYV zsh5I0{=yff*n%FgU(@?F>XzM7yAPs{x&q9?a;8AA(Zn}VW~Gt5~wy1ac9x^|^3PFsBd zd;`!hWFZ{ZJJ59zx>H1ZoCS;-Q>ax-aIMb`#3EfdmBcg!$O(ZSVrxAURPUgWY6xUSZe)jW5DK4 zU}1$!>mGk0*nj^kIU+XD)-2Fti35Qg)L#+r6&DfL1?H(?c0pg!BcM+4GQUbVX-r^k zvxh4(N^%|}!>*NQzZ2H+eXVx8S)TmEZLplvA#kcgnuGcAsZjRJ+U3KxTke+I)Y9qv z41tPUZvXmWdeoZ#g>P6OxFpjygz7y3$;;rz(;hD8Y22{J-EJBdtM>rlMr6fU4kHn= zi@=IDSR|uKt^6E6`hJ#fX@#82t_Ppc_!4F7<>g`C{F~gN`$dA?$1TAs@VceevE0ca4 z%l_kn=FFcw(7Gkis85M?s(Rm)w@)*=e2b;Is=W)57~8)8 z%RN4i8_Z1#PkQOf%5R-KHVcH7?c7h-V~ zG`jJ$ywC)^UTC&lx}R`lhNhH?+?17{HnHEn^3gBjrM6fdE&mjUu}D6N!*3DmaQm=D zs)@GrD0$5H(ll*llTN#&y(%6*R&`gAuid=DV-U z{W!L^oM1bTtzew?KyzM6H2|9V$Vi3;R9Fl#=U+_6L$!NDXz+gTx(5c-71a2 zL&*@SaR%3fIIQ|m!ULlgIGNgPY%^jNZ8xWw2mmTC!M z!@2;p?5NA?0*}Lb4#E?0={aeDbzrnsg|;_1y|HHf#9O!l$Fp5-Adln^hW_bs(-akGmU!1 zw`R4uDof|d1w8RSRtTrcK6JU?IJ*OB)9_3O78DOSEsi>k+W7E;g@ObMlV;qD#8H2O z4fzF?=-Q9!0LV+H(E7Xr!KTaGGDK5U3BxiI!#30{^l~0qldD^4R%CB0H|I5y@T@fg=d38IK$$iFinYB z>cxlSQjKZrBqv2p1sH%=ILYA)miH*;8EnI-cun3-cAFPoe@vf|^N!5SY`&6gk%L){ zw6$RqFKv3VS}&*!j4vDecE7Z#VeyV`r*BVL4wngri`KIv<#Ni|t@yT59vwuYaa-QW;J5YB`jY04^ zU<^z$EV0qH9>v>5&Fcyxr&Q(+NWo^p(Vj1Xb%?#fPqtPdG8tjw-qEnDLZBmNoHhuQPYGx0)))w={CE= zagEPo%!ksHPkztGr5g2_8W4O!ASY`*Hsf1|P|=-`C{Ai+zxs`TeA4$FqViiUe8Ae) z)v!x)D`>H>eT0enBf1~Y@4)IByPOk8rKx)hATn_~u`6M}7*w#w9iMQ}rLzJI$X%b% zGfZrUH*0i%@jm&s31fD#dvUBi_EkH^pE0UNjv9yaJUwn;gU4J?7ouGv=c;dZF+~dQ zT1fT?`hiKlk!o6W(ByQlh(%h=1qjs+mLck;dv`%B{3E?Fg zFXMJ>_L~NUdvkrt(kM{P5=EIIKNY*0>`P8)CXP&+i|2Qo)@35JF8Csm6HgW_hr#R; zN|#svc=%AW)>zXT;Afg%avL5Kfd?lTq`?42Y`%6WMe02~YE355^FgWz*#)9~ zfAbJYy`42Mx)(LKzYkGWWZV%54bN`MNU=e2;b77cp83S}W5fp`^(o33BaizG>n~T? zT}yRjL?=U~vFUeao>iu5BhHLgM!lL)bJSv!#ZLVQiv4xV!FAurx0}RAfb&cC8Rgw| zn*U*K>qjW{KH34DO2%pN0^35^Uy9@m_Gyy-si&IuaTZ_o6|<+Zm=; zGKrKbn(o2KmWDHb&3eHFaJZ%%t^Tk+RV(7;AMjE(hA_$eC#l{0_=|x%FE8JX3FCIy z2)NJzI;kSBVml_aIvVT*o($n0Zb9#9)Krp#pZ_PXWHtrI?vsu2W+FI6uGpc1x=+rH zQ=ctk**~g_D5hL%PVYJl5Vsd99WR?*HCxY-}ilG6(%mMjgQlIt|46;gIbH^J$ksIp;^t)J`{ zS<0k{VAy`Ju%{CDN*9{f3onl{h>e1(MM)L~bG_%i>>Ah|!MPaF5uT40vOy;5XA!1{ zdVh=4$|&ZR*&i3(~`sG1gedH0MpjSg2FUtQhiq61*VlM^2L({bWK z=!l&bKC6Szs1FyH$g1+@(r&)H#3h$i4@OU!=zfvK8mqa`Q0tRb3bcMmm@?(10KIN18^v0dF@({Mc53y%y z%OlF`l%J{c>79viJueC`$am|_W@=+B5|g%rNrLPc%sDvj9yC842cVn}l zlaxDPImEzfFmt{UVHHS1W5Rx+J*J7~kbS9OuZW7$MsuAfN4XgN_ACc-q1XC0+B5K# zavBA)Tx(?q;WxXndx5%+$Yk9c?~>ytK)<-C(W-PQ_EA?w4@iJcsZYYBRbBh@b<0O$ zO#AxW1m)t^Oi0C51+(@k7dXs0!*;M<`RQ+?Fm7<%z9vc3ym0o4vGtzORPyhHCpswM zvy#m{avhDvKeg91KnlFa~E^v0rZnV6FPQYtt;H0Ro?JG-vpNfL9FA_VKA4CCE|72&(q@ zvH#Nj0L*OZQjg2^EWM?s2}9)N?h$6EVp(n|Wx;@$pfz(#q@3$j0-KQ};jObD^WRGT zX@x4)Y6i7i9oBQ@rkh3`k(WCrnVnc716HNa)8S{v^pWAjiAbDSULn>M{xx5-Qiol$ zM(^dGkjw4SiKrko<7Fa|*$JL7G(E%l>ccjzlkR481(2k@Z|a_ZM+f~98!QWGt^m77 zzjiwpKD(J;bcHV>TL1n)P9!#c#1i|sw70nU-ad|4vzC_O3^Qn(M*N=);2Nuo)eV-@ zEylYC`rDo0$ej}_mQXSO6jKvXLPq-TullL{BzKP)Z>3) zu1-!r?$3WSfuK?-M8z*k?}0p0v&g|?;F|+-Es!IC_G$8}zlej?|Bj%}*b(%|%>+Eu zx8JOBx48twWh>4XE!E?x^!_&s<%R*czS|)_hR=T(BmT+H0Gn=4du$HrU`F*l-sL9Z zds_`U%ElGxW*!ZbKz}p)e+u1S(YL^5Z=5OCU7Gp<`RQV#`{7Wzu&{9YiBRJ=DKywW ztsJu!ymo~K6?MpQOc3Bs0FFiys2V!m z9o27>1_D|nxowef9?ytkV>Pf3`w!1z&{iy z+67}&{b|?+Ql^~$C#R4v&7X-M^MGV9pV8MfZAETU?^EqqZyYutH4>gfI9WQK>51F; z$VIHrId9AR$ZB<3e@1|zS1nO%ec{1`Lu|Q)prJ)TW&)a}q$Jf$Qkb}Vq}8*VFUL&yVU~Di7{;~7d1fG$YZLJT=~~Xe^A336^SM!x z?3l?-v@Z*NvctmmPPH9NW9&72gHbt?Yq8UI-T#S?qEedRy;j3rpvj7kXt=oQZx;=oo4cd7v|H*@S|LQjS?tx<&Ku=bpqNSx3 zg#w(+SO4X~13*J?&=h)6&`xPy01o;G@mCRb`oGk9@jeOwpHM)QQqC~8pxK|y(nLSp z>ziW%fQLFH&|jI!11f43<)FfqJK1K5fi(XL5G*1`XQF>EHK z`>oY8ij!!jq(h1!fl7^N!7A7(5lbt7(*03$R={JNR0nF*MOLcjcIMIt@|Q-t?s!?( z{C9rp0ci+qnibpv#{EVcgul|gL71||>?mkMMtxwedqoG>d)L?z{l|Kq`LHVHh>x|T8KgdPzj+T^%!&j^*+)9>E3x* zelz~3eSj8X=f{%lUuj|BUumJCq{K@xPfNgS3m~12TJ-`QPJ~Jd zAU6L`8MVTC-Ms2?jLD#<)!}Bn+G4Lt?hGgz8!aXqIK}`_AcMs`lf(XZku<7p5B)Kq z8Y}}Ck-#}+A*cQN$=5yJTDkX75)U4J~uTU!oXs4xAW`IHs80GPikyLtZPSGjN zA^$1>U^B0Hn~(Q5K&tr)Z0WLj+-W>7)^a~}beOMqxaaxZNTZ!pHg@yhgnu1e6|nXN zoG1kbc#15@nY0sFw*xGSw*6FHjaq}Z0VKh;+5UB!eRxO3FGs{B{&Ta7&!4Z7OKmcjrRc}0R$WCSEh3MI;yOzn*&D>EgRCt4{3 z$7mIrwHIoGMMO_+Hm?BGq%!DdRBtlW^L#?9dJDLmAL!WM&6Q)p<$xCBK0O^PIrKoc z&Pe#^*B+bQ@@H}##LKo_#Bctp5Wh@91K$2Dkw>gZF<|R9md{jbG6HO$jxphOiSYw$ zB5s(7uW^2=@~D4bOl&ZlnX9X>7P71qYc>mI#$q}Az8J2c-y&#p|Idm?a42{x&6+hp z5H=1(Y_Dq*J;u)|z}Ep(55M3#^vMAP^uTmHTQC$xou;y}v1H0=K%M)uTs|J)fRSc# z*f;#1_eRMV9vG_ax&c50U=#zoOB4Gt>%Soi2o)9y-y6RZpD^9oKy25385jom`BCAX z{b8_4y>=@sY>WRij}SP__Q1jlj$Jg<&-4!fYx$p6w^E2tTCH{aJ}{`2&7dms1yh69 zj413Ztl`yY)q_3p5qPUZt~Z5-TKg^M8JW%l4D^ zW%K>DwThM8A72n}SO34qJ%;+k18M4slBNJPF7ja)`xr~B=J3(^{i~da5KNj-mxOxJ zCWvkbo&ryGMbMcAF_nwb*HsV~v0@kJj^D)Wbx*{`U3^YzjB!nqXlyaT5l`I5ln zBi1SdRK+iZKQx1eAnXzSyA`kHDAh5PnTC=K@#^i=dfJiEpVokmm?$o%^^;IoF1gUCCV zbTYUCI2x2t6Vzf9)n)Z!Z4f3Z&zdf25pU{Qgw&Rp0cPg1L2EbKOzU~r-Lg7AJ&mCn zNpujNxGZFoFkRKTw<$xGgd*CC3z9gdgf#qWGBGW-vR4u6@ZDWOWbEw%FNXf-V=?t2 zJWFuKe(UmhZ7}^&jL9IdH!1yo&7p;k^yi(%nd2*V^@MTDkeaikyaBv7N6lo>**?>m zS`D_v%Q0qy!HUHy{6Wl2qBduy)Tbb827PGxwP+&;;F`g{B7v!c2*X*a*5sN0J;w2y znHQk8sh7CF%^G1l7K=AyGN~Y~g`8B-sY5f7r^5j>*pJMq7R2$_1r#FQmxsHH50lE3 ztxz&T`X^u?Gya(THF65zfe$fqo)D!e)?H8957iGWM$1CJR|!(WFPSv6e`bPH_=?H| zj>=B#08t>^A^=SjgVg?zKco8;%1Wvs@-;sV1+)|y83x@*a-L*t#xRLngXArOWMm+W z9Tqy738bb8D-7(+`0Q@b{^!;>5prghmnsbG1cH|GJssL~FY-2fK1AY(^X`9!H!>>5 zwPQsUk;}3SJiF@o0^6B7!2@b3P2|e$z~`Y2A^yhTFE07U*pUg?sxZeP!HIWmJ=B)U^L~(_?-McPn1e8C* zH2cqKx)jd??l^T=*gS~2rzhY2Kf@b8d_I20N0o&rgCG~_{q7CX0?5ly%qj;o427|Rv^3S7ogH48cot|YEJ3$PMPyn)hgx6$DI)4Nn zOZ&w8fq&4I5AEv!nk2b9?M?L{88eo1mcJt;??g5ARCl(J%bJe+ot~cFiMwGasHj-P z`1N4@qk2itr0mhFLe1!IeoCe2za+ljd$$q|(u>-(TD*UqZBxi0=XG}duNDOR#0!bB zi8u>!jL^LiHd}1+a5M(_30l#OqxmjmH^8tb?kf(Gqd*NxVyVBD)2Oq~{m`UCgOG-E zaPOJDde%=)@UhW#pK4!TC!@2iAff#`dqyBE-+)6^pJBA%>fe6yk!+L;n@}=GYK)CY zd|`)W9aN>Na>YuP(0thpA%8@Ru}Pvwi^Lp&_q`QLIVg(~VlBp{94d3ayQ|mm z5Sv3}MO$_V1h~#jXM-FN)Dn;C>_3uq%OV)^lr@TskODao@vA8Zch~i|lrXK1q(FA* za`v`W762nNm{p{|nie5|fMp(RjD^f$$w&~VS#Hb)DFS(k0K6*Vz|4JqKy>2Nsv_aK z7I&?ST;nvu-9?O|4O3@PLckKhcTj%ow*bQ3{p)=eatCrhw0IBP7`8&blN)U!&WMH* zjT;u#f~r`vr~ODh*3tiBVD7`b^7S|zoY{Re^Oid0Mq(P|Hrl;A7*n^Z8xGiHWY77B zF>0Fpid5bR(E-scs0=h5O@Qq0tIGkys;;dSzWyNF)ccE;2NqwmSvINO^Xb)RzR*6q z0zCGtm_EV1N}Jz3M#4LL3yl{5clf2r&6!}>)pQZ<(IR9o-Y5=5@+W#^(o>TDHzcnl zcM>KbK{)Q2wJTD#=uWF09`xrM=Y{o<5T3V*dFL4qtP0cB)*1s?Hlv}}vY3>p;;1Mn z>ByL6eP7e$-v0!Hrevc5t^ z!hUT4^`p-1PPdlZMlwAq%Q-dx(Xn0x&I9)wLmi134eLN`e6Y&&VTK>Mk0zS~kBrp> ztFwR8wn!%h@dG!G4)9Nmt%v!St&5B)p2xgXDHF{MT>J2?K2!1sMUi0}Tt^5}^7|b# zofxeo_DJA-s-~$kZvxKvx_{Y|HwpSHjlZm?7#V--;##qKV(_1htAN8d9mI3_L7!kz z<|&lRKZo^ltllhZGvV)uGU->Cgh0liW>Mdtt0S5Fk+yxHCn;B_l;a|AideDUBXRf( z;u_KfZiyV`1etQ+?Odnxv$3J>py%JdV$D?u{xEQfrco$S$qlC`Y~y^I8TvzT6?WnZ z<=Z-Qp_H6TXmMa4pR=UgWTIeCoqeLL7G^K4P;@3tdjLJR;6uBSt4&}d7{DJkGE<(NpOhWKwQPQvAQeyMsIDu@WQ2Dkq!3j)2N ztJ5tlCqHNQ<8Q%%P;v8#F<|;4!cH&pj$8ea#HTEVDTNw}v?1r3_WX8Wr~nxc%W1}= zsEQ9z(f>RES-=eLC?f0$0)2#vr4|V8JeC``p-ZBb1$VIEcmVHR^HeMrR%577G1ww= z&vT!vfIDKXs6avP3o4mD<~;+vgY@A4f876LFnjHSBB@L}yY*-BYpl&Rr|<8OB1j{G zL&KYabrV&6*SNgje0bxARJx-Fc)1c?ZvPjExJ>#*PT9{P*6K`}X{~CIe~&5a@cv`h ze*`%Mt&XEi`!z}c9eon;Irb+lg24{KL}88nRLmv{XUsKj%GG`(jKr%&N4yU8Hj*{MTTElDa5kn zd@vi&WAi0$dK#FsA9rW#b?aI2PnFLKuzX+o`XrBkUS01)r<5>O3Ga_(EAT!GdlP1c z9Lzc-h9D-krB?~@?92zbPI&(m%S_P5vJF*l$G(Nfe*rg_ceOXudl>XRIG78aFiD`o z<5%5$Ju8kP{)QD}*M?RL!`7lm*=gqM3woWLkK*;rzfi@1yyJ+P zU3&XF{Y~exC5-K8RhQTERlW=-m?kP>XMxRePHylN0!-@7miiZel~p?kG=J{zCQ6^+ z!)sNFa~8zDv7S^boFd`<*lV7v)CRLn$l*aYvD<(!51wYlg6S?Ja*}i5#B6T(_>-;g z`G1+&hZ9@41{F$ZV2Be7?I;eqvOZxw=@{iaL6_w~%W%$yU_=|=kAYR?(Lee3uZ6%a z)Kvn#cMsWJW^m5!Yef}8$40i_6&p{Suj`$ohm+o0?YA5puDdnFzLReIr4*5E=%7v! zxA*Gtc`uxO?qwNq+@{l9_h*UI?xyVM;PJ8H?DMadg?gw)yV@JpnaIA7mj^r_Jrt2Z zMKU?820qemu~r=`eiBD`2gZ%zXh-tjy&A6XQjM2E=B%GTn3PN9(2)fZnzA<&@Oq#D zbxGXtM<7C3YjrjG&l|MZc9=xD_xGtC|GcgIS#~6i?4h1&Uy2s3cjpogO`Qi@uBreA zHAz4#W-j=~*&d}#KvS9G% zwRsjU-~r*!DVF&lb91DzFftVkeq@)9mHO1nJ9L;aL1DlHzX(hZVrAb)=?Kz*sW>+k zYsn2>s{n2jNIHImrd+d|>x`&JS*nPz3L846IjEZLBx%flq$c??17vOz{c$aTS{(4< z4)e7#&2_t#A0C-v158kBr5v#m%YUB{532(b*lkL62AEXPteXF86}E%%<>L>JWv0LS zT#VbONT_~${C{YxDHvU|GwbGWS@$q5RIHT)_QTx!48Q-jlaUg1yRi6*HSQW_3t@re z9Y-lp+nwN07|jTTf8961^L~`q4>#!_PJayQC>$)%OsV`@JJVuJ?BHt>zJUe|>Y%x? z;CP4?YP?|7=;m*ul>!y962JzGbhX@c=K~>)+>daz#^VOEmh{b;LvIIiT4;E+*H!(s z-r)Tq^q5E&(C1l$vcAdXbNz!^!Wx z+}Aeqf-&EP4`zqq4ioWGO@^$~_H>C6^Q7oLV|dg)WGo1*X~o>-{j!XQ!vE^U{99%q zUw)*I@CLkywH_&2C}divRcxJQJ-@xmUb@3;HaOnCLt^ZDPyO#C@T+QlvscH#1vb6j zZ|!K0-e;-a9u{jkr{Xa2>cseNGEU2b?)`}stu96FKx798f3ir~XUuj$ujqopwFxD;sLWUTZ2s}b-! zHa5eHPW|rgnkTY?NIaFR+~cH*4GC30)NQzoW2)+LPD3b`i-jna(&1vbx9;Eq<7LM4 z)ozC7q#=1UcReO7h4v41GV$vUTS*=ua+p@5U~c=MLXJ>IX??_)uty>4<6giEXa391 zBc}r(a^v2~jVx}^DK%uv>-zBbWL;bX{SDtN(W+B?RZ$E!)ma;U`{s}Y1gEVy#j8Ro z;^xh-?TCD50TR(`(aV&<=!c@y79OdfAt+_`t40^wyY{iD``v8Lc3ehkFZWaRz8O~A z_eqS~Ij_%bj@L7@9II3AcXXKR)^}?kJJUxQnP0t0%=Uo&@wwXDr7}+qf7N8q1A6t! zK%#?$SjAkW2)o)Z+>tHRzepk}Y{tYR!nwV)Svzp)qeR1-JQ4-&%d*0zN-*)`82`yjE{8yh|(6;LDcgv~&2l%OU-}K2tX=NA_-Czs}?=Z=}a{ zkGI-hAlkPi-u2T%o2Y4=^~ij6#pZuxz~es8FnUTkrb%*wgW|YT-WT#7*m_(#LrLIl zMDoe{sToS$_^{sF%lST)$r^F$IBRR~aNc^yErZ!V(ER_b4-A+TlrMuIZFZ_R8;K1| zyuW>$^cOgBcUY+ z+kf_M$CV#bqES9isNooaEd~>9nC$dHEO7`pF)HP1vaB2nAX=;vb7B^WZq2dzXIj(^ zvHK+@O<7v>R_dtXt!gt-vs(;_<}dY~UQQAME%;M7vtQ3)Mxo#=84v?E)!?lA`JXf! z4g4R^CV2y%r?YBUj73>EtP?HN825aenXqdRl6GU#HVUpb+Kn?Y(v727ogR@MwdlD~ zFOlwTxh-{1)?PjH73f|xrBf_ovAwxMk5U_7qeeCZ6#MPL<-dT@tb?x?bbm$zqY&NcMOUJCVokEb*3WToyn-x zpZcp>6!sUGt{lrz4u-#bx|;ij6s_FvZgA4NS)_7i9W`SYMg-|oUmyrwE5L+@FBMFZ zKAkPaFa3sk*feA%h_h!Xx9GcdV!CDer2nVDl8cxAa0(CSHb%8|fNH^8D*4WluW6Y= zLT`2_xT_2?u`|FK%xOA5KQbfTtgTnKejU@NxQgA+Jk6dBC-d9p>9U>y{~36YD7xgj zsldo5xR{@O3U)*^Q4bv-giDa^ejV1LV{7Y0Lv%Qtzbm?Ki@$2Pf8TTqK_Ri9aoVgi zT}D#na531?L2Oz&sE$vdS&yJj%)Nb=O^?;IUm1atOdf<)Zg&)3%HRK?sqP=GXGxNH zIEo`qOLR*>xGfvL z`{wcr#Y90GF^%%d4n3^|3AZ#BYSQ}>#^cP)WlQJnK@jqGsgznp2b3fb1ODQHaA?2k zEUF7`-?)hh32_-5#p@Ew;KN184p7R}Py^fuTs3fTrLPE9(^isql7&gDH6KR;Fkn;T zNqtA7{V?yM7}+bB2KI;N4iqO?F3g2#8klngD5KZ%`Erjv0fJPb)!OQOx67yRLt`A^ z)PP#ZMRu1P^!}tb%kU^_;qid7=Wd%U;-P(ZWG~nVa~Og=%eCWsZn#;*kE)pL2>l2O z#k3hL;6S>!7b<!ZW0L>vB}d z=V)h$^#`JYc&ShVK8I8R#nbC@%q#(y2e)`-=M0gYpP;+}+R<#9A=MQby7T71Je)s{ z_tp2;CWVrZy}HGPv#;L#+U2942vwq*@ep+g<@SslEKoR@k$7q96fC=RlHY?Ou-@{v zVWcwDRy#noM6@gFtW*@oB{NwaC~DtX74eEyJ5BHpFgKm9>J&|{X z>hbn7?b@`K93H=+e4Z)7ZJlLq408N5YPKGdqQn9zr4}RW3Zfdr5-Ec^S;#EV|^Uq#TYt#O;`RqbY`@7R$J|_nU=79y%!vOI#ww5QUIAOqOpH^Ym z{D*J7@n`0tnB;7(kI&O2mBzKn>_zjZU z_Ez_Ivph6w7aex@(;^;WI5S+1Cn;V1)0tl})#^*`APQ%UiWOh;W#Kb)ZwD_t;~532 zAD*xzS8ntwRf(U8FElF8C|(KJ|KlcUX(Qu7<2bxyE*>J{{kIiX8kQvA5onXj?YXu0 zfLf$CEbiwaB24gccYe8`b*GC*k@AHK&`>RuX^l*LM#rDJ(h_Cbo>@v=p%D0Atm^3@}3yBxKzwh4{iOE|I zOxhq?3{v@dU$%FxRC(=A%(^Wwishc~8^5p}1!8jX{Nkm@6NlcA8h{IWa~Sj_UdMmW z?={gV*k)?!i^-{SQEhZsIqH^sXqu_*6X7fIIAQ4%aQ<7i*GEk3DD0F+ZNB2L5v*kG zeWiDD6&@O_c`|tMLn5NmHy!v3_Ad%0!a0I$pj{jq5c|d%o3rFD>&htf5*Q;P`2nFR z$1L#{%K0r7i^Hwi!14I@iZZd5c%eZKm9E-4xlqtsDwW6MIkEbv&5dfl9^uQe8;ugf zcC^HfigbZDB7=Fq2)pH^Er5rw%e8pK)l!DP;Gp6#5Z@~9{by%JSxlSVcp9qpu2Btsj+Wi|R|tmTfM0^Q@^+vbi0vaE_RH?WYWpZ9(h zY*fHwIJ~!LtGsSjpbp)c>5xd`%};O9LG}>K1l792V%!QMZcv))r_)veF9 z5NVdwcd)(RYq?@u{G{>Zhw|fs`sNFhS3EkE%Z=uJ6%#GDlT{k8S!P+)kXe*e(?n5L zOzTdTp)O|3ioVeqn^7)SGCDO1*!taB4$C_=^5eP%-g+yh>$nAqDaG0mcFq=^=C6t4 z*o;tqAkaWCy|M`>?Jrxsg4Wz-U86Y(T@S4|2#Y@3&LLQJlMsKQxUP4*lIB*rD@pzu z&s{X1uJ>KXzWoV<*du(xM}(PDjARKqbh`O|k|MQy)#jwq2R|5eh|NL|12+Z|YrQps z;C$cs-L^#-p5oGza;%Oo-u;bbj^|lG&Q}g;G3F5-G10jFSD9(+UT4uJ1$mvXJfn@^ z_yW??#ocs$nbd4!gqp9}wi7$DdMuIUm$)>EsYUvFl|Ohz7(XZ!7fa>( zx$6Gsyd{Evf%S~ZdT@Pi({Yw#u1joqB?|rFonk|bnvK<%#|xeFEm!UraX6G^%M&zC z2kH5_u>FB-0^1*{dc5AoT~?~NR{UkI$;M{%Z!NZK1@QFE0*i%rt)(Xm6Co1k*CyORCY(?Z|#>AX3f)?7OU@6m*FxE#rbP7$c!qR?iP4IH4Tcy`oG|XLjsdB zCJKxS%W*s+Q5jWc9j}fTc*;K6PVDmFk!$ER_D#UtA_!dYT6b9wm)R?LG+&Cw{8=26 zTHgsb&{#`3&~flLVb8s9qF(nmKG`sddMN*pT1Q{3Jjaovf9V%92mM_VVpMG6WZLv&!4nP+FAe_z{A6o zT|c3f=dRKXkkM}faO1vP5tn9S1sb6c$uLOTCmkU%Vr~tmbR`cZaP@MInaYnkZ1rkX zA!i+0@Hn!ngws>aTrKhL5^3w&w6CYA%$cBS`PI4p!wYHwV>nQIQ+~@Nk-}TFyY^0) z?vsA$=|hy|fj2t(CH0wi;I%Fpsx#Loq-Uls?k2l1_W>&f{Cx(5CV=7NXX6(BPOiA; zW@0EQ7+?N*ZziowTY=UTKu z`NUFkL$y{;HLcHteD%0Y@5uWY3VB%zRVIDoo-{!E?@hahG#{^VD3Uo!3P-#;>G|QB zkdAEz7&U(3{~D?i3o^R&?5a6ZE1mtyzXSgCvs=a}GbsFabgcYT??FMa&GF#HrMO4+ zOgh%$bktcHJ&a={o=Pw8^GueGbqH)P;KA#wIQ!_?r@3;Tw|A9!yvVu$rXl@Y)iGcM z9hg{z(vXF4^QLlO5*!W}hFeLmA&vhaZ05SBE%l}cj*X(Y;w)wW{jzh}@0A(aO4Cb;?(cXJ0fw&U! z+|$D$t3w#7#zZJ_$~_bGnT7H_kxTrKAJM3C1Zu>CzHdt33kW z&k+E&?y6}V7o4FW< z_(Of}V2a_~t&iMsDO63S`Ho-6RT0e)I`h6kunz;B#|{0#`>+BV3!M}{aG%u*&v66O zYDeJlk*o+XVv5OT(Be0MaX9WFHS@>*ZZjx~sO17^q#oOD0wn~;FSv6rNT<2Y?e-h( z+=#;f?Xz;wBqpqxwxSI+lHa>}(fNT5VHYbE zf9fIJagmyquo}zC-{ab_Ai?^|{l=}$kLtDU^uI$-($E3xrB4$G#KcplBQJg^t&cT% zPkBnAbz{;EmRyCo=LHuBZcM4!*VP!-mOPtDgvi7#gvHU{-ddwiY-XF&RoT6>Y#z+_ zuP|+N>r}Mn`l9ma+KpsE1FOYrd8+B~gmH@5IFsa}5q@w{o-g-XSlIXM;I{%f@Q8oE zEdC8s3F;$%8QIZje1rOOjMHoWwJU#>cjnAZtX0LKi~kK#)4REY@|iSCZx-sn>u_q% zbK#hz7dae*ukGjQ8#9Pz9mJ@4^j|>OJo_+(MX?K&k`Wrk<#z7aIq)e{5$530sw}p? zoF3v|tEHc89Px5HUk2MSNGcSK58U`BHRy(!ffV*HA;rihya**n&^&saao%**V zx#%1`eR1NFPa;UpuIJU-_Z<#9Sfy$mCaZ!JPT_VlW(XvUNs)jir0(l{Dr!d1ai3`J z{&S|kA^D)&htb9TsX+_IsDoWsO)*vUt9p+r$@hyP4#`>DWmNxQ zIif6p6lu!7^)0!ak$iHTXvR`c&Av}X zb{?SrGQMRda{iqZ%fs)&8IC+*&^d}19JCm8bgWwqNrp3xV`!N1MALC?8_hY-x5;lv7<52Y1Dc~$I zK0b_8c-uBzXtfu1tq3B0)Zk&6jJ~=<0%#Dbs0`KfixtDqgC_9G4Y&No<28Z#w$7 zpB>$D1IlT-^O~(|M=3KRD9}-y`f2HVrCYeTf3#D2bQyp+6<4G29F8(oj^>t{q6UYa zfJf^k43>Ly`S~%UkuKCc?UNq}_~5*jvas=uroE#J)nNb04#PQ85gIjSTtp+5IhJ|! zA(YE`Inty(rJH$Gb$^vR2tHhdM4wcaA&S4sv2rhmK)2>4NFGcHQWaNN%J^b*IYwl{ z*I1_DQv_x7DKtMx>`(t(c~K)-W@a>oW`&59qR=GX8%-&(*wl?-TU-j`HG2(^-4zB= ztSZ0PG2hUP52(A}wtb>V674r9iT`&i^g*BB*snbtX|Bla8srtgDA0Ga%?~^~@+Vm; zya+ks3;!Jtx$S>ddYwu`W6 zV&_)d?__NmfMdD+>=U{+{D!;*olriRC}u1fi;#a_0^Xs95f!ac2+J*+v0&!q)27Ze zWOAz8$R`<^Vi;Je7DC#JUxm{@{&02kQfN6aX=G4*Z@!W=<~BwT2$`Q(oA~ZOy-x>; zI!+_?ZRUT!#rF*mEkaoJQc_kH=86n_t+&m}i{UZ$n@FG2=8@M(p)g= z%b=C9Ncr@rro{fPF^bsJL*k|z)}u3)<{%wh60;SEW6i7_d7 zbX@6pCC$k(qvwVFo04cBt@KLPe8NAG=N!yxu>+IZmnD&xKEv#U!QQjgAq9PZpfLM^RVF^qZ2A zAuzhwiYw;gsWQ8f-%C?@CY&CbwXjGfE3;zQ`bIciftWW&Ln(039XWNn@!Z+OsDq^D z=SzG}L?uVaoU7y>G4HbFRYw*gg0D$9Qx`)%LR{;}H=Ur-OLq!=FMX{#PnAt zz<+sIELd$kXti4L{hp}imQ_&0>YyC)R(goQ&x@{tBJ|d9EVnOETrCg|erxJxOG=R}a8)@zF-qVS@w-LSd0Y_c_1*(XWPON@P1szFen7@(ah~sY@v2*TqB) zQm$al)=ayvqAKIya#tuBcO04`P8uYd>{Uvow-$fm*=4V#_w|`q3@RA=7}lgK@uh5se^Fjd_e6* zT((S1G%lM~-qt*%Flaa-JeKcv`P-&*&s;k*wLlG?_B-Vg+Mq92DG?fSpZ<|Ms!Q@y z7X&9ZyDdO{1Fj0FFdR5#sxOC#bPDVYOBk+>%tRlyd?V|A+W%sl)5&7yKv+EAw8m!Q zW!S*vJ6LL7%-a#75TKPujkYVo7hf`kf(_J$pu3Vck!$zw^w)(z9*=8Nc@cZU=vDZR z-T2Hgy66bGEFPPR%?5K)d;EQ?XIS#PU?=bj5;{aSgSb#<2HgncDdY9?h4$ZnvbD;-7MB<`l=aPpvoSzdt>4u$~7AcS-f9E%65j*6o|cUiIsH zX;qT&%fnL{P{4&wUaY4{?cR7-D~sRkcoJvfkrApczKF6hQU=c4v27v)aS;jc&`uM0n<^L?lS7T zhwNII-K$dp2Wnlpl0FD~l7c$W{b|eoIbDrv3Dg5-dY5`?{)*lc>M=pE*w|41N;~r| zIvJTg?CIj((mJ?Cd^z&wUg;guOWy|%(vT3;fR>g(;tmLWfe%viem>fLE4_2wWuH8b z0uI9g70%X@gD-1_+oo{|(?dq^B6TYo6yu;VSg12g^v}KmU#R|g!8eQ&9YfeeGjEJr zX{3A*B*_AOO4xf;dt^Wxz{d-Ic66Z5>`utw)nkDau&!!L!!=-E1mUj{K4x>TT2Iz~ zg+x9<0iP=LKe1+hRIrj5%*o)tY$Y@QSPTQefB9fVFWmhQ9!ut6{)ye>_)xi+KAdwA ziX8MRgLV;w#LfZ2lY1n^4e-8`zRry<4+OgD*o)L~7$jF{42hhw(CE6>3KE zUQRL9@<%XgNk4v|iXM!;l1JJYxUW}873*O|#P{!o$zT^`Fm?KNsPET`?IkTxv~xA8 zvceE}A0{(R?Ce}|`z!H4lCElU&`R(+qkauu@MIV0<`JdO6dJF6Q0xpk3YP3dW&9v=zaU z@g1YQ9Pu(gsboR^zH%bH2^@ULce&<{9s@~_8LSrxBADQxv*^r1P;_h_PxUueXQX*j zymQkfpY%1O1>deORSJ+}5$L@C&W2T zB(3IeqvG=M-)WFCCsQ$8V%`k8s?* z3b<<_k}SBJ+dW(4Ikan8nr7*Q4cG*7UHfM7!ZUc^2mvh}9XI;6HA~t)`yrF6qUyl8 z39P@rwtRA%;Tk?K-PU&mZD{rLYm2~Bp^+QpuxAc|7wvf0dv`Q{xS(8!igQY5rb#ff z!Cl|F#&FQHkuTt%Eo@*U$J<*fUApzSFfn~q-%MTZfnw9%w zxo-2X44#5DM}V+OF<3@}R#&!rvmkJ*IWg_7-@(gog$ftnucpb|l<}E%^65bSk7_WV zoza3#Sz0!z0m2g#L9a;)0-s)w=U?Xtrez11k9RrqQo4wQc{OLP-}iw~o`L>BMp{}Q zQc9=jFJO~sCJTPfp4s`8>jfT4WgrEg^K4kF!i_x?0k#dKd`4~h4Kqi;y&-BrOV{(u z3O8_FLnUZgvr#r;0d}Q1W*R$>=jRz7aIJ%p#y;mXZNUzvpb|w9n#|X{M+~kRz_l&6 z4LeLY&mg=V93uH}9uBVKz;z7~2Z0<=p!X66x0o)VxHGVl*id+!C!)Nr4#z}}lH NB_=OgB5dIIKL7<74O{>K diff --git a/site/graphics/discovery2.png b/site/graphics/discovery2.png deleted file mode 100755 index 14d350884a83fe7f29b8477475596620e9210389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37928 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

XO141LOhA7`%DN&ZVMlW++ptwu zi5RDJOQ^a2#DFOLo6-8+N19P93G#?fzk@SILOGZtdDdRWh{tEKRelnZC;oNRgIgFL z26=m^2g(Dz_eNJEuujwvH%XH^U2`bsH3`c6o8H7K2Sq;31b72j?|^_C$?}~cj6FyI zf7Dbj3oP7lxT#Al5Xid*1H)1u6ZglJ5bVrNdul6i3mv6%RLcb+E_{F5;=W%cfKz2a zy@o`hXPn;Kd7aym^Pm#Whum#$Yy=!z<4PX~3Nkq(ycW&2Z>rrPOn#xkV7oUan_3Oj zn~~>E`0y&U5dIc0!Vd`Jl>$PxY=H}Rc}VJ_9Rt*bLPL5g-ANIL;*@4%5ST>2{Qe=L z8INNfrh-vqRy;;)0rAzZ?MhM~PM$=Ik$$FrH9`P(jqt^Y3gTfthO?0}G-f$%Wo0}m z@)`q>kHn(Pq-D!nzn)Yn-32fd2lAm%5oJ1vK`}i3dNNehKxXYVy)`y^c3ITX!n~sF zAC=t@Sp#fg3A=F~89m~%CSf(rPRix0Qql79itR%%v8+$j;;A4q^=0mSreu=k*HW73@+mHg zv+D5!LK7Afy+2g-IfvZF6VZB^V#p$23;a=d$cbSGyxq>~6Ll7W1g#!C^ifAPuyDkg z2zs4n>NQ(=6b!lHhjiuXvVh+Ld5m$1s)1mTT05>tQIunHD9BjGM=?`UipoInA{hlh z83L}TJs>6|$93EISh%>7qZ)dqRO4gFwwd^xK|MYCxs6*K8w(c}8gCmFHzA=};O|<2 zrl8rig5XB1FCTY2Md|}d0PKM6 zg%v@)d@v_Ce1>7-kBOG1EU}aGoi-Xt6@;f6NgDZv(xN)j%=pJtaDWu`rGkwk5XlN* zOMx0Q?Q$~#5gKDDxt8%jf3YkKoK{4Ky;MHb9s~SSR(JveoHaXz?Y(-fwXNo@Bm9ea z)=iB#h(Hk=>q@XF*g1w}ZkNbNT2*K*#`;9&Gg96PRTg}0aJUm_Pv+0g^;mK2wmornI7dFL>%0A0A{Yp0asTU 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%0DEWUD@r+wI!!{^4)L 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 diff --git a/site/graphics/fullarchitecture.gliffy b/site/graphics/fullarchitecture.gliffy deleted file mode 100755 index b57d04263..000000000 --- a/site/graphics/fullarchitecture.gliffy +++ /dev/null @@ -1 +0,0 @@ -{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":389.25,"y":752,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":60,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Example Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":558.5,"y":564,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2,1],[-2,31]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":595,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":13,"y":693,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Discovery

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":452.5,"y":356,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[104,134],[104,46.90809452078793]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":490,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Data Loading

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":127,"y":603,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":121,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Housekeeping

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":10,"y":603,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":119,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Monitoring

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2.5,-1],[-2.499999999999943,-106.14394894619477]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":0}}},"linkMap":[]},{"x":113.5,"y":547,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.5,0.5],[140,0.5]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":81,"px":0,"py":0.5}}},"linkMap":[]},{"x":13,"y":510,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Report Engine

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":176.5,"y":420,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":40,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":331.5,"y":423,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":283.5,"y":664,"rotation":0,"id":101,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":150,"height":14,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":216.5,"y":653,"rotation":90,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":180,"height":50,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[],"linkMap":[]},{"x":253.5,"y":768,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":325.5,"y":508,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":34,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.289321881345245,2],[219,-104]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[2.710678118654755,5],[161,-102]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-3.289321881345245,1],[189,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":271.5,"y":543,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[11.289321881345245,-33],[-160,-148]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}}},"linkMap":[]},{"x":284.5,"y":509,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.710678118654755,1],[-224.5,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":1}}},"linkMap":[]},{"x":253.5,"y":510,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[156,130.50000023841858]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":25,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":146,"y":195.00000023841858,"rotation":0,"id":65,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[107.5,46.99999976158142],[-62.5,46.99999976158142],[-62.5,114]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":60,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":22,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Write Database (WDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":136,"y":185.00000023841858,"rotation":0,"id":38,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[117.5,41.99999976158142],[-76,41.99999976158142],[-76,144]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":0}}},"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":0,"endArrowRotation":0,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[0,-3.5],[80,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":0,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[2,-3],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":433.5,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466.5,"y":329.0000002384186,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":10,"y":329.0000002384186,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":59.5,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":486.5,"y":309.0000002384186,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":506.5,"y":291.5000002384186,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":33.5,"y":309.0000002384186,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":273.5,"y":490,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":622,"height":843,"maxWidth":5000,"maxHeight":5000,"nodeIndex":149,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#010B14"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture.png b/site/graphics/fullarchitecture.png deleted file mode 100755 index b5a5148a7f80a6cafce106c39933d270dbf4e061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108103 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 diff --git a/site/graphics/fullarchitecture2.gliffy b/site/graphics/fullarchitecture2.gliffy deleted file mode 100755 index 602573102..000000000 --- a/site/graphics/fullarchitecture2.gliffy +++ /dev/null @@ -1 +0,0 @@ -{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":150,"y":426.1250001192093,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":58,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Example Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":477.5,"y":388,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[62,16.00000023841858],[62,-50.62499988079071]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[627.5,-431.8750001192093],[513.5,-386]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0,"py":0.5}}},"linkMap":[]},{"x":793,"y":211.12499988079128,"rotation":0,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":130,"height":50,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":156,"uid":null,"width":126,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":923,"y":198.62499988079128,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":333.5,"y":446,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[339.5,-169.34199153021825],[256,-146.1249998807907]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":1,"py":0.5}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[351.5,-228.34199153021825],[265.5,-221]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[345.5,-232.34199153021825],[263.5,-190]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[163,43.87500011920929]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":56,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":23,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Persistance Database (PDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":180,"endArrowRotation":180,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[-100,-3.5],[-143.5,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":1,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":91.05118074954362,"endArrowRotation":91.05118074954362,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2.5],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":110,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":254.5,"y":60,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":533,"y":260.6249998807907,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[210,-144],[210,-57]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":93,"px":0.5,"py":0}}},"linkMap":[]},{"x":693,"y":41.62499988079071,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

REPORT ENGINE

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":529.5,"y":189.6249998807907,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":624.5,"y":304.6250001192093,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":737,"y":283.6249998807907,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":29,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-64,-38.033008588991066],[-156,-158]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}}},"linkMap":[]},{"x":341.5,"y":387.6249998807907,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[331.5,-142.03300858899107],[239.5,-246]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":1,"py":0.5}}},"linkMap":[]},{"x":673,"y":223.6249998807907,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous GATEWAY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":489.5,"y":262.3750001192093,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":481,"y":104.12499988079071,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":473.5,"y":242.3750001192093,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466,"y":79.12499988079071,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":693,"y":203.6249998807907,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":458.5,"y":224.8750001192093,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":544,"y":478.0000002384186,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[45.5,-36.5],[131,-36.5]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0,"py":0.5}}},"linkMap":[]},{"x":675,"y":391.5000002384186,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":489.5,"y":404.0000002384186,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DATA LOADER

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":157,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,-9],[170.5,-94.37500011920929]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0,"py":0.5}}},"linkMap":[]},{"x":799,"y":408.6250001192093,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":1.9999999999999998,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DISCOVERY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":913,"y":318.6250001192093,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":110.00000000000001,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.2,"y":0,"rotation":0,"id":121,"uid":null,"width":105.60000000000001,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

HOUSEKEEPING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":796,"y":318.6250001192093,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":103,"height":75,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.06,"y":0,"rotation":0,"id":119,"uid":null,"width":98.88,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

MONITORING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":1023,"height":492,"maxWidth":5000,"maxHeight":5000,"nodeIndex":159,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#1B1000"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture2.png b/site/graphics/fullarchitecture2.png deleted file mode 100755 index 7b6ac8067aa5624e9439ad89a3f8014d2e1b618e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113571 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 z%0DyK(f5=HkRX7D?^7z+H9DRI<#yi5t-Al< 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 h_^48KcLYDxK>|G_09Nm#wX8QF5=@& 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 CS7BQK diff --git a/site/graphics/html5frontend.jpg b/site/graphics/html5frontend.jpg deleted file mode 100755 index a5370ac501dbaa6f0ab9f9b19223a975ab46a654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157632 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 z 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 DqQYb^ diff --git a/site/graphics/logo.pdf b/site/graphics/logo.pdf deleted file mode 100755 index f531e5b946b9206105546c5dd353e5b034876d9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212032 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 qBk+jIU1ZY6$W@ByZ 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 H{eb@kmq4+J diff --git a/site/graphics/reporter.png b/site/graphics/reporter.png deleted file mode 100755 index 4120464c5cda7db2615a87868a73b67a45d00777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19542 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 diff --git a/site/graphics/simpletickdiagram.png b/site/graphics/simpletickdiagram.png deleted file mode 100755 index 552d5572818c0add3aeff796c2275a3be2ae6632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16225 zcmeIZbySq!_dhyFNec=LARsDI3XC*Jmx6Sw-Kdl_(%sz+(w)*ncT0EIeFpWd z@89?PS@*8{`~C4(xskSrF*fZ4e0I z`|Vr6FT6Ny7{GrB7P6uOpuC>@tH2i|J$?y(5U4N!<3bY|_>N}wQpExU!ft~9A+(uh zXoEmJN3VqV5-^duhgVnE19$XGqP6=katPiL-UYNTXJrTFoi zIAT-}FNe$DDO6c+W*)h?=n0Y;kY;_2rKB0Q>#{l!=s_hBu=!c^p6WY{B zUCyJqE>J*xcL7DI6<_Rm+JJ`SZo<=Ed_Ip z1~HQ|qRbA$3JsKT9o+P8ftYE4@9QV0p0~sJ&MvDOY>Ci7IPeuE#iltL@L!^NO6_!k zKBl3xf*vQV@8}pRC2%9vfj~PTMwAB#$a-``t!9hLXup3!C71Nl&g-+X1xwum*#Zh1 z=sM78^emoCvX!q2H4X{1gUN`JAXpVQIM!yNK8)x>^dyBjT)*O^9zg>QICxaexqXRK ze@NgzKa`D5U7TTSQ-cu;$bhMcY##YnsL${DA}Hg45&IBYHPjeUG`QhYfsqxLyn%@t znDzF6xUh{2tDMi@woCth4tBL`0Dn9LRFbp;GI>Vu&my0mS&x`FVGyCWf^txO5q^N6 zj10fYz1_&0zCihB=)dWye%rG88n7*b1`L@KHVV%cl_hL-E};@qbvx z$?lTw51S^KBekFZT4!p>NS)u~GX%5_91CYX_&dfgHtPwh#Fb11|HGp!y7E8N-?f@y z{6ierZm5#UpC!$p8MVm&Ve|BgGymenoxxP#za{85w}m}X5U|8H#eM6$^NYy^w0{Egzu*=_9w}Q0`sZs>!>AHgT5~~*NIN|rPC}Yu_s_c@-V6hU0!BFVVKs6;|bCqbvFQLa*Xudrs$_=qq0A0ihQ+dMMV~S5W}?lEnwQl zImRY+9Y0U(753JTr(#ygoOR1;<+RL7Q*V~kOk;l^yBV~?7VFPOo>@~8=Km*!YgG7K z;bN=I@c*8uN0-O<-)ZWOj|@iHs=wzxV!c)0U$Q|FgiTmQB$j-aoDeaDo=$5B~8j z|6bnf??)AonB2b&ShZn{_K(#506JAV;0BWe=Z;7aKIA($&{TpjMD$NT468TRTia`ozQ;aR{p!|A~tE-x~N4VQXu|Pz{**i8hojEC**ZMI1?INVwwSUa(YsXuGqa2L!Lc{sA zv8$9rekTD@Yc2Gx3Hk!1x5B|Q&ei)Cbvh80=!>}XM>=vd!tT__vU52ES^l&V-cjOM z?GoNetB=n(;x%SIg2j@%RJ5I=loT`& zhDjRv*o;ZmgZXMsx3*`(Vqf##BdOGE^|V0YVX52~Y&6W)mtR4psyVkcyPoMLKf2iK zm{OA1E;ZO~>z{*aDFsZFzo($Fvr$$Q!5qwN6cnZ;GE}`f6VU%|0`L%3{DDj7j!B|G z$gNB>Me)gTG;9rx71 z@p;vC1bJLblC3y%w6YTf9twd!)+#tsAgfvANWI zTH^epOWneD`E@q#bhT;~`bFc98DC-YhKwxH#C6uz>T9>HM1MT6vg_Z$c3}ISLrXK; zq^UG|GIM?9;nZAZOa%nVkK5NDj$b+|w^Q|I6L!|~)V(1ZwOCo6ot)g%37108em_XN z^^(@-b?NXX#{+GnH!|rNMlk+yZKT6Xzsl{BS4jwonsbQSOrs|l;_0O=H;X1HI$z99 zCyw@cag#wY=0{Be^5Xir3`UBI@xLjkhdRi`^2GIi4$gF{ixfbS%0Afh5L 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 diff --git a/site/graphics/torq-logo.png b/site/graphics/torq-logo.png deleted file mode 100755 index 767a5cebc1262fecfe976d59b9ccce3a7be1ac81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18931 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 u - - - - - - - - - - - Handlers - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
-
- - - -
- -
-
- - -
-
- -

Message Handlers

-

There is a separate code directory containing message handler -customizations. This is found at $KDBCODE/handlers. Much of the code is -derived from Simon Garland’s contributions to -code.kx.

-

Every external interaction with a process goes through a message -handler, and these can be modified to, for example, log or restrict -access. Passing through a bespoke function defined in a message handler -will add extra processing time and therefore latency to the message. All -the customizations we have provided aim to minimise additional latency, -but if a bespoke process is latency sensitive then some or all of the -customizations could be switched off. We would argue though that -generally it is better to switch on all the message handler functions -which provide diagnostic information, as for most non-latency sensitive -processes (HDBs, Gateways, some RDBs etc.) the extra information upon -failure is worth the cost. The message handlers can be globally switched -off by setting .proc.loadhandlers to 0b in the configuration file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ScriptNSDiagFunctionModifies
logusage.q.usageYLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updatespw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer
controlaccess.q.accessNRestrict access for set of users/user groups to a list of functions, and from a defined set of serverspw, pg, ps, ws, ph, pp, pi
trackclients.q.clientsYTrack client process details including then number of requests and cumulative data size returnedpo, pg, ps, ws, pc
trackservers.q.serversYDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.pc, timer
zpsignore.q.zpsignoreNOverride async message handler based on certain message patternsps
writeaccess.q.readonlyNRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.pg, ps, ws, ph, pp
-

Each customization can be turned on or off individually from the -configuration file(s). Each script can be extensively customised using -the configuration file. Example customization for logusage.q, taken from -$KDBCONFIG/settings/default.q is below. Please see default.q for the -remaining configuration of the other message handler files.

-
/- Configuration used by the usage functions - logging of client interaction
-\d .usage
-enabled:1b      /- whether the usage logging is enabled
-logtodisk:1b        /- whether to log to disk or not
-logtomemory:1b      /- write query logs to memory
-ignore:1b       /- check the ignore list for functions to ignore
-ignorelist:(`upd;"upd") /- the list of functions to ignore in async calls
-flushtime:1D00      /- default value for how long to persist the
-            /- in-memory logs. Set to 0D for no flushing
-suppressalias:0b    /- whether to suppress the log file alias creation
-logtimestamp:{[].z.d}   /- function to generate the log file timestamp suffix
-LEVEL:3         /- log level. 0=none;1=errors;2=errors+complete
-            /- queries;3=errors+before a query+after
-logroll:1b      /- Whether or not to roll the log file
-            /- automatically (on a daily schedule)
-
-

-

logusage.q

-

logusage.q is probably the most important of the scripts from a -diagnostic perspective. It is a modified version of the logusage.q -script on code.kx.

-

In its most verbose mode it will log information to an in-memory table -(.usage.usage) and an on-disk ASCII file, both before and after every -client interaction and function executed on the timer. These choices -were made because:

-
    -
  • -

    logging to memory enables easy interrogation of client interaction;

    -
  • -
  • -

    logging to disk allows persistence if the process fails or locks up. - ASCII text files allow interrogation using OS tools such as vi, grep - or tail;

    -
  • -
  • -

    logging before a query ensures any query that adversely effects the - process is definitely captured, as well as capturing some state - information before the query execution;

    -
  • -
  • -

    logging after a query captures the time taken, result set size and - resulting state;

    -
  • -
  • -

    logging timer calls ensures a full history of what the process is - actually doing. Also, timer call performance degradation over time - is a common source of problems in kdb+ systems.

    -
  • -
-

The following fields are logged in .usage.usage:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldDescription
timeTime the row was added to the table
idID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication
timerExecution time. Null for rows with status=b (before)
zcmd.z handler the query arrived through
statusQuery status. One of b, c or e (before, complete, error)
aAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname
uUsername of sender
wHandle of sender
cmdCommand sent
memMemory statistics
szSize of result. Null for rows with status of b or e
errorError message
-

-

controlaccess.q

-

controlaccess.q is used to restrict client access to the process. It is -modified version of controlaccess.q from code.kx. The script allows -control of several aspects:

-
    -
  • -

    the host/ip address of the servers which are allowed to access the - process;

    -
  • -
  • -

    definition of three user groups (default, poweruser and superuser) - and the actions each group is allowed to do;

    -
  • -
  • -

    the group(s) each user is a member of, and any additional actions an - individual user is allowed/disallowed outside of the group - permissions;

    -
  • -
  • -

    the maximum size of the result set returned to a client.

    -
  • -
-

The access restrictions are loaded from csv files. The permissions files -are stored in $KDBCONFIG/permissions.

- - - - - - - - - - - - - - - - - - - - - -
FileDescription
*_hosts.csvContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed
*_users.csvContains individual users and the user groups they are are a member of
*_functions.csvContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users
-

The permissions files are loaded using a similar hierarchical approach -as for the configuration and code loading. Three files can be provided- -default_.csv, [proctype]_.csv, and [procname]_.csv. All of the -files will be loaded, but permissions for the same entity (hostpattern, -user, or function) defined in [procname]_.csv will override those in -[proctype]_.csv which will in turn override [procname]_.csv.

-

When a client makes a query which is refused by the permissioning layer, -an error will be raised and logged in .usuage.usage if it is enabled.

-

-

trackclients.q

-

trackclients.q is used to track client interaction. It is a slightly -modified version of trackclients.q from code.kx, and extends the -functionality to handle interaction with the discovery service.

-

Whenever a client opens a connection to the q process, it will be -registered in the .clients.clients table. Various details are logged, -but from a diagnostic perspective the most important information are the -client details, the number of queries it has run, the last time it ran a -query, the number of failed queries and the cumulative size of results -returned to it.

-

-

trackservers.q

-

trackservers.q is used to register and maintain handles to external -servers. It is a heavily modified version of trackservers.q from -code.kx. It is explained more in section connectionmanagement.

-

-

zpsignore.q

-

zpsignore.q is used to check incoming async calls for certain patterns -and to bypass all further message handler checks for messages matching -the pattern. This is useful for handling update messages published to a -process from a data source.

-

-

writeaccess.q

-

writeaccess.q is used to restrict client write access to data within a -process. The script uses the reval function, released in KDB+ 3.3, to -prevent client queries from modifying any data in place. At present only -queries in the form of strings are passed through the reval function. -Additonally the script disables any form of HTTP access. If using -versions of KDB+ prior to 3.3, this feature must be disabled. An attempt -to use this feature on previous KDB+ versions will result in an error -and the relevant process exiting.

-

permissions.q

-

permissions.q is used to control client access to a server process. It -allows:

-
    -
  • -

    Access control via username/password access, either in combination - with the -u/U process flags or in place of them.

    -
  • -
  • -

    Definition of user groups, which control variable access.

    -
  • -
  • -

    Definition of user roles, which allow control over function - execution.

    -
  • -
  • -

    Deeper control over table subsetting through the use of “virtual - tables”, using enforced where clauses.

    -
  • -
-

Access restriction in TorQ can be enabled on all processes, each of -which can then load the default.q in $KDBCONFIG/permissions/, which -adds users, groups and roles allowing standard operation of TorQ. The -admin user and role by default can access all functions, and each of the -system processes has access only to the required system functions.

-

Permissions are enabled or disabled on a per-process basis through -setting .pm.enabled as 1b or 0b at process load (set to 0b by default). -A permissioned process can safely interact with a non-permissioned -process while still controlling access to itself.

-

The access schema consists of 7 control tables:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptions
UserUsername, locality, encryption type and password hash
UsergroupUser and their group.
UserroleUser and role.
FunctiongroupFunctions and their group
FunctionFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.
AccessVariable names, the groups which can access them, and the read or write access level.
VirtualtableVirtual table name, main table name, and the where clause it enforces on access to that table.
-

In addition to groupinfo and roleinfo tables, which contain the -group/role name and a string describing each group and role. A user can -belong to multiple groups, and have multiple roles. In particular the -schema supports group hierarchy, where a user group can be listed as a -user in the group table, and inherit all the permissions from another -other group, effectively inheriting the second group itself.

-

A user belonging to a group listed in the access table will have the -specified level of access (read or write) to that group’s variables, -e.g.

- - - - - - - - - - - - - - - - - - - - -
TableGroupLevel
quoteheadtraderwrite
tradejuniortraderread
-

Here, users in headtrader will have write access to the quote table, -while juniortrader group has read access to the trade table. If -headtraders have been set to inherit the juniortrader group, they will -also have read access to trade. Note that read access is distinct from -write access. Headtraders in this circumstance do not have implicit read -access to the quote table. This control is for direct name access only. -Selects, execs and updates are controlled via the function table, as -below.

-

The permissions script can be set to have permissive mode enabled with -permissivemode:1b (disabled by default). When enabled at script loading, -this bypasses access checks on variables which are not listed in the -access table, effectively auto-whitelisting any variables not listed in -the access table for all users, which may be useful in partly restricted -development environments.

-

Function access is controlled through non-hierarchical roles. A user -attempting to run a named function will have their access checked -against the function table through their role, for example, trying to -run a function timedata[syms;bkttype], which selects from a table by a -time bucket type bkttype on xbar:

- - - - - - - - - - - - - - - - - - - - - - - - - -
FunctionRoleParam. Check
timedataquant{1b}
timedatanormal user{x[`bkttype] in `hh}
selectquant{1b}
-

The parameter check in the third column must be a lambda accepting a -dictionary of parameters and their values, which can then return a -boolean if some parameter condition is met. Here, any normal user must -have their bucket type as an hour. If they try anything else, the -function is not permitted. This could be extended to restriction to -certain syms as well, in this example, the quant can run this function -with any parameters. Anything passed to the param. check function -returns 1b. A quant having general select access is listed as having -1b in the param. check.

-

Further restriction of data can be achieved with virtual tables, via -which users can be restricted to having a certain subset of data from a -main table available. To avoid the need to replicate a potentially large -subset of a table into a separately-controlled variable, this is done -through pointing to the table under a different name via a where clause, -e.g.

- - - - - - - - - - - - - - - - - - - - -
Virtual TableTableWhere Clause
trade_lsetrade,(in;`src;“L”)
quote_newquote,(>;`time;(-;`.z.p;01:00))
-

When a select from trade_lse is performed, a select on trade is -modified to contain the where clause above. Access to virtual tables can -be controlled identically to access to real tables through the access -table.

-

If the process is given the flag “-public 1”, it will run in public -access mode. This allows a user to log in without a password and be -given the publicuser role and membership of the public group, which can -be configured as any other group or role.

-

The permissions control has a default size restriction of 2GB, set (as -bytes) on .pm.maxsize. This is a global restriction and is not affected -by user permissions.

-

Adding to the groups and roles is handled by the functions:

-
adduser[`user;`locality;`hash type; md5"password"]
-removeuser[`user]
-addgroup[`groupname; "description"]
-removegroup[`groupname]
-addrole[`rolename; "description"]
-removerole[`rolename]
-addtogroup[`user;`groupname]
-removefromgroup[`user; `groupname]
-assignrole[`user; `rolename]
-unassignrole[`user; `rolename]
-addfunction[`function; `functiongroup]
-removefunction[`function; `functiongroup]
-grantaccess[`variable; `groupname; `level]
-revokeaccess[`variable; `groupname; `level]
-grantfunction[`function; `rolename; {paramCheckFn}]
-revokefunction[`function; `rolename]
-createvirtualtable[`vtablename; `table; ,(whereclause)]
-removevirtualtable[`vtablename]
-cloneuser[`user;`newuser;"password"]
-
-

which are further explained in the script API.

-

Permission control operates identically on the gateway. A user connected -to the gateway must have access to the gateway, and their roles must -have access to the .gw.syncexec or .gw.asyncexec functions.

-

Usage Example

-

To connect to a permissioned RDB in the TorQ system, a group and role -for the user must be established. If the RDB contains the tables trade, -quote, and depth, and the process contains the functions getdata[syms, -bkttype,bktsize] and hloc[table], restricted access would be -configured like so:

-
.pm.adduser[`adam;`local;`md5;md5"pass"]
-.pm.adduser[`bob;`local;`md5;md5"pass"]
-
-.pm.addtogroup[`adam;`fulluser]
-.pm.addtogroup[`bob;`partuser]
-.pm.addtogroup[`fulluser;`partuser]
-.pm.grantaccess[`quote;`fulluser;`read]
-.pm.grantaccess[`trade;`partuser;`read]
-
-.pm.createvirtualtable[`quotenew;`quote;enlist(>;`time;(-;`.z.p;01:00))]
-.pm.grantaccess[`quotenew;`partuser;`read]
-
-.pm.assignrole[`adam;`toplevel]
-.pm.assignrole[`bob;`lowlevel]
-.pm.grantfunction[`getdata;`toplevel;{1b}]
-.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]
-.pm.grantfunction[`hloc;`toplevel;{1b}]
-.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]
-
-

This provides a system in which Bob can access only the trade table, -while Adam has access to the trade table and quote table (through -inheritance from Bob’s group). Through a virtual table, if Bob runs -“select from quotenew”, he is able to get a table of the last hour of -quotes. When the system is started in normal mode, there is no IPC -access to the depth table, however if the system was started in -permissive mode, in this case any user who could log in could access -depth.

-

Adam can run the getdata function however he wants, and Bob can only run -it against sym GOOG. Similarly Adam can run hloc against any table, but -Bob can only look at trade with it.

-

Additionally, any system calls would need to be actively permissioned in -the same way, after defining a systemuser role (or expanding the default -role in TorQ). The superuser is given global function access by -assigning them .pm.ALL in the function table, for example a tickerplant -pushing to the RDB would need to have a user and role defined:

-
.pm.adduser[`ticker;`local;`md5;md5"plant"]
-.pm.assignrole[`ticker;`tp]
-
-

And then grant that role access to the .u.upd function:

-
.pm.grantfunction[`.u.upd;`tp;{1b}]
-
-

Although the .u.upd function updates to a table, there is no need to -grant direct access to that table.

-

Gateway Example

-

The gateway user will have superuser role by default. The execution of a -function passed through the gateway is checked against the user who sent -the call. This should not be modified.

-

Within the gateway itself, access to target processes can be controlled -via the function table. For example, if Adam in the previous example was -allowed to access only the RDB with .gw.syncexec, you could use:

-
.pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]
-
-

Since .gw.syncexec is a projection, the arguments supplied are checked -in order, with dictionary keys `0`1`2... etc. This could be further -extended to restrict access to queries with the -.pm.allowed[user;query] function, which checks permissions of the -current user as listed on the gateway permission tables:

-
.pm.grantfunction[`.gw.syncexec;`toplevel;
-    {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]
-
-

-

Diagnostic Reporting

-

The message handler modifications provide a wealth of diagnostic -information including:

-
    -
  • -

    the timings and memory usage for every query run on a process;

    -
  • -
  • -

    failed queries;

    -
  • -
  • -

    clients trying to do things they are not permissioned for;

    -
  • -
  • -

    the clients which are querying often and/or regularly extracting - large datasets;

    -
  • -
  • -

    the number of clients currently connected;

    -
  • -
  • -

    timer calls and how long they take.

    -
  • -
-

Although not currently implemented, it would be straightforward to use -this information to implement reports on the behaviour of each process -and the overall health of the system. Similarly it would be -straightforward to set up periodic publication to a central repository -to have a single point for system diagnostic statistics.

- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/site/index.html b/site/index.html deleted file mode 100644 index 467a431be..000000000 --- a/site/index.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- -
- -
-
-
- -

TorQ

- -

-

The TorQ framework created by AquaQ Analytics forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from code.kx.com (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.

-

The easiest way to get a production capture started is to download and install one of the Starter Packs (here's a short video to get going), or read the manual. We also have a Google Group for questions/discussions.

-

For recent updates to TorQ please check out our blog.

-

For email support contact support@aquaq.co.uk

- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/site/mkdocs/js/lunr.min.js b/site/mkdocs/js/lunr.min.js deleted file mode 100644 index b0198dff9..000000000 --- a/site/mkdocs/js/lunr.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.0 - * Copyright (C) 2016 Oliver Nightingale - * MIT Licensed - * @license - */ -!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n":">",'"':""","'":"'","/":"/"};function escapeHtml(string){return String(string).replace(/[&<>"'\/]/g,function(s){return entityMap[s]})}var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tags){if(typeof tags==="string")tags=tags.split(spaceRe,2);if(!isArray(tags)||tags.length!==2)throw new Error("Invalid tags: "+tags);openingTagRe=new RegExp(escapeRegExp(tags[0])+"\\s*");closingTagRe=new RegExp("\\s*"+escapeRegExp(tags[1]));closingCurlyRe=new RegExp("\\s*"+escapeRegExp("}"+tags[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function(){return this.tail===""};Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||match.index!==0)return"";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={".":this.view};this.parent=parentContext}Context.prototype.push=function(view){return new Context(view,this)};Context.prototype.lookup=function(name){var cache=this.cache;var value;if(name in cache){value=cache[name]}else{var context=this,names,index,lookupHit=false;while(context){if(name.indexOf(".")>0){value=context.view;names=name.split(".");index=0;while(value!=null&&index")value=this._renderPartial(token,context,partials,originalTemplate);else if(symbol==="&")value=this._unescapedValue(token,context);else if(symbol==="name")value=this._escapedValue(token,context);else if(symbol==="text")value=this._rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype._renderSection=function(token,context,partials,originalTemplate){var self=this;var buffer="";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;jthis.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&& -(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a= -this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f); -if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval", -"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b, -a);this.check()}));this.errback?q(a,"error",u(this,this.errback)):this.events.error&&q(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b, -registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a); -b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n, -q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d, -e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==e&&(!("."===k||".."===k)||1e.attachEvent.toString().indexOf("[native code"))&& -!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"), -s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"=== -b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this); diff --git a/site/mkdocs/js/search-results-template.mustache b/site/mkdocs/js/search-results-template.mustache deleted file mode 100644 index a8b3862f2..000000000 --- a/site/mkdocs/js/search-results-template.mustache +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/site/mkdocs/js/search.js b/site/mkdocs/js/search.js deleted file mode 100644 index d5c866164..000000000 --- a/site/mkdocs/js/search.js +++ /dev/null @@ -1,88 +0,0 @@ -require([ - base_url + '/mkdocs/js/mustache.min.js', - base_url + '/mkdocs/js/lunr.min.js', - 'text!search-results-template.mustache', - 'text!../search_index.json', -], function (Mustache, lunr, results_template, data) { - "use strict"; - - function getSearchTerm() - { - var sPageURL = window.location.search.substring(1); - var sURLVariables = sPageURL.split('&'); - for (var i = 0; i < sURLVariables.length; i++) - { - var sParameterName = sURLVariables[i].split('='); - if (sParameterName[0] == 'q') - { - return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); - } - } - } - - var index = lunr(function () { - this.field('title', {boost: 10}); - this.field('text'); - this.ref('location'); - }); - - data = JSON.parse(data); - var documents = {}; - - for (var i=0; i < data.docs.length; i++){ - var doc = data.docs[i]; - doc.location = base_url + doc.location; - index.add(doc); - documents[doc.location] = doc; - } - - var search = function(){ - - var query = document.getElementById('mkdocs-search-query').value; - var search_results = document.getElementById("mkdocs-search-results"); - while (search_results.firstChild) { - search_results.removeChild(search_results.firstChild); - } - - if(query === ''){ - return; - } - - var results = index.search(query); - - if (results.length > 0){ - for (var i=0; i < results.length; i++){ - var result = results[i]; - doc = documents[result.ref]; - doc.base_url = base_url; - doc.summary = doc.text.substring(0, 200); - var html = Mustache.to_html(results_template, doc); - search_results.insertAdjacentHTML('beforeend', html); - } - } else { - search_results.insertAdjacentHTML('beforeend', "

No results found

"); - } - - if(jQuery){ - /* - * We currently only automatically hide bootstrap models. This - * requires jQuery to work. - */ - jQuery('#mkdocs_search_modal a').click(function(){ - jQuery('#mkdocs_search_modal').modal('hide'); - }); - } - - }; - - var search_input = document.getElementById('mkdocs-search-query'); - - var term = getSearchTerm(); - if (term){ - search_input.value = term; - search(); - } - - search_input.addEventListener("keyup", search); - -}); diff --git a/site/mkdocs/js/text.js b/site/mkdocs/js/text.js deleted file mode 100644 index 17921b6e5..000000000 --- a/site/mkdocs/js/text.js +++ /dev/null @@ -1,390 +0,0 @@ -/** - * @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/requirejs/text for details - */ -/*jslint regexp: true */ -/*global require, XMLHttpRequest, ActiveXObject, - define, window, process, Packages, - java, location, Components, FileUtils */ - -define(['module'], function (module) { - 'use strict'; - - var text, fs, Cc, Ci, xpcIsWindows, - progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], - xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, - bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, - hasLocation = typeof location !== 'undefined' && location.href, - defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), - defaultHostName = hasLocation && location.hostname, - defaultPort = hasLocation && (location.port || undefined), - buildMap = {}, - masterConfig = (module.config && module.config()) || {}; - - text = { - version: '2.0.12', - - strip: function (content) { - //Strips declarations so that external SVG and XML - //documents can be added to a document without worry. Also, if the string - //is an HTML document, only the part inside the body tag is returned. - if (content) { - content = content.replace(xmlRegExp, ""); - var matches = content.match(bodyRegExp); - if (matches) { - content = matches[1]; - } - } else { - content = ""; - } - return content; - }, - - jsEscape: function (content) { - return content.replace(/(['\\])/g, '\\$1') - .replace(/[\f]/g, "\\f") - .replace(/[\b]/g, "\\b") - .replace(/[\n]/g, "\\n") - .replace(/[\t]/g, "\\t") - .replace(/[\r]/g, "\\r") - .replace(/[\u2028]/g, "\\u2028") - .replace(/[\u2029]/g, "\\u2029"); - }, - - createXhr: masterConfig.createXhr || function () { - //Would love to dump the ActiveX crap in here. Need IE 6 to die first. - var xhr, i, progId; - if (typeof XMLHttpRequest !== "undefined") { - return new XMLHttpRequest(); - } else if (typeof ActiveXObject !== "undefined") { - for (i = 0; i < 3; i += 1) { - progId = progIds[i]; - try { - xhr = new ActiveXObject(progId); - } catch (e) {} - - if (xhr) { - progIds = [progId]; // so faster next time - break; - } - } - } - - return xhr; - }, - - /** - * Parses a resource name into its component parts. Resource names - * look like: module/name.ext!strip, where the !strip part is - * optional. - * @param {String} name the resource name - * @returns {Object} with properties "moduleName", "ext" and "strip" - * where strip is a boolean. - */ - parseName: function (name) { - var modName, ext, temp, - strip = false, - index = name.indexOf("."), - isRelative = name.indexOf('./') === 0 || - name.indexOf('../') === 0; - - if (index !== -1 && (!isRelative || index > 1)) { - modName = name.substring(0, index); - ext = name.substring(index + 1, name.length); - } else { - modName = name; - } - - temp = ext || modName; - index = temp.indexOf("!"); - if (index !== -1) { - //Pull off the strip arg. - strip = temp.substring(index + 1) === "strip"; - temp = temp.substring(0, index); - if (ext) { - ext = temp; - } else { - modName = temp; - } - } - - return { - moduleName: modName, - ext: ext, - strip: strip - }; - }, - - xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, - - /** - * Is an URL on another domain. Only works for browser use, returns - * false in non-browser environments. Only used to know if an - * optimized .js version of a text resource should be loaded - * instead. - * @param {String} url - * @returns Boolean - */ - useXhr: function (url, protocol, hostname, port) { - var uProtocol, uHostName, uPort, - match = text.xdRegExp.exec(url); - if (!match) { - return true; - } - uProtocol = match[2]; - uHostName = match[3]; - - uHostName = uHostName.split(':'); - uPort = uHostName[1]; - uHostName = uHostName[0]; - - return (!uProtocol || uProtocol === protocol) && - (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && - ((!uPort && !uHostName) || uPort === port); - }, - - finishLoad: function (name, strip, content, onLoad) { - content = strip ? text.strip(content) : content; - if (masterConfig.isBuild) { - buildMap[name] = content; - } - onLoad(content); - }, - - load: function (name, req, onLoad, config) { - //Name has format: some.module.filext!strip - //The strip part is optional. - //if strip is present, then that means only get the string contents - //inside a body tag in an HTML string. For XML/SVG content it means - //removing the declarations so the content can be inserted - //into the current doc without problems. - - // Do not bother with the work if a build and text will - // not be inlined. - if (config && config.isBuild && !config.inlineText) { - onLoad(); - return; - } - - masterConfig.isBuild = config && config.isBuild; - - var parsed = text.parseName(name), - nonStripName = parsed.moduleName + - (parsed.ext ? '.' + parsed.ext : ''), - url = req.toUrl(nonStripName), - useXhr = (masterConfig.useXhr) || - text.useXhr; - - // Do not load if it is an empty: url - if (url.indexOf('empty:') === 0) { - onLoad(); - return; - } - - //Load the text. Use XHR if possible and in a browser. - if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { - text.get(url, function (content) { - text.finishLoad(name, parsed.strip, content, onLoad); - }, function (err) { - if (onLoad.error) { - onLoad.error(err); - } - }); - } else { - //Need to fetch the resource across domains. Assume - //the resource has been optimized into a JS module. Fetch - //by the module name + extension, but do not include the - //!strip part to avoid file system issues. - req([nonStripName], function (content) { - text.finishLoad(parsed.moduleName + '.' + parsed.ext, - parsed.strip, content, onLoad); - }); - } - }, - - write: function (pluginName, moduleName, write, config) { - if (buildMap.hasOwnProperty(moduleName)) { - var content = text.jsEscape(buildMap[moduleName]); - write.asModule(pluginName + "!" + moduleName, - "define(function () { return '" + - content + - "';});\n"); - } - }, - - writeFile: function (pluginName, moduleName, req, write, config) { - var parsed = text.parseName(moduleName), - extPart = parsed.ext ? '.' + parsed.ext : '', - nonStripName = parsed.moduleName + extPart, - //Use a '.js' file name so that it indicates it is a - //script that can be loaded across domains. - fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; - - //Leverage own load() method to load plugin value, but only - //write out values that do not have the strip argument, - //to avoid any potential issues with ! in file names. - text.load(nonStripName, req, function (value) { - //Use own write() method to construct full module value. - //But need to create shell that translates writeFile's - //write() to the right interface. - var textWrite = function (contents) { - return write(fileName, contents); - }; - textWrite.asModule = function (moduleName, contents) { - return write.asModule(moduleName, fileName, contents); - }; - - text.write(pluginName, nonStripName, textWrite, config); - }, config); - } - }; - - if (masterConfig.env === 'node' || (!masterConfig.env && - typeof process !== "undefined" && - process.versions && - !!process.versions.node && - !process.versions['node-webkit'])) { - //Using special require.nodeRequire, something added by r.js. - fs = require.nodeRequire('fs'); - - text.get = function (url, callback, errback) { - try { - var file = fs.readFileSync(url, 'utf8'); - //Remove BOM (Byte Mark Order) from utf8 files if it is there. - if (file.indexOf('\uFEFF') === 0) { - file = file.substring(1); - } - callback(file); - } catch (e) { - if (errback) { - errback(e); - } - } - }; - } else if (masterConfig.env === 'xhr' || (!masterConfig.env && - text.createXhr())) { - text.get = function (url, callback, errback, headers) { - var xhr = text.createXhr(), header; - xhr.open('GET', url, true); - - //Allow plugins direct access to xhr headers - if (headers) { - for (header in headers) { - if (headers.hasOwnProperty(header)) { - xhr.setRequestHeader(header.toLowerCase(), headers[header]); - } - } - } - - //Allow overrides specified in config - if (masterConfig.onXhr) { - masterConfig.onXhr(xhr, url); - } - - xhr.onreadystatechange = function (evt) { - var status, err; - //Do not explicitly handle errors, those should be - //visible via console output in the browser. - if (xhr.readyState === 4) { - status = xhr.status || 0; - if (status > 399 && status < 600) { - //An http 4xx or 5xx error. Signal an error. - err = new Error(url + ' HTTP status: ' + status); - err.xhr = xhr; - if (errback) { - errback(err); - } - } else { - callback(xhr.responseText); - } - - if (masterConfig.onXhrComplete) { - masterConfig.onXhrComplete(xhr, url); - } - } - }; - xhr.send(null); - }; - } else if (masterConfig.env === 'rhino' || (!masterConfig.env && - typeof Packages !== 'undefined' && typeof java !== 'undefined')) { - //Why Java, why is this so awkward? - text.get = function (url, callback) { - var stringBuffer, line, - encoding = "utf-8", - file = new java.io.File(url), - lineSeparator = java.lang.System.getProperty("line.separator"), - input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), - content = ''; - try { - stringBuffer = new java.lang.StringBuffer(); - line = input.readLine(); - - // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 - // http://www.unicode.org/faq/utf_bom.html - - // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: - // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 - if (line && line.length() && line.charAt(0) === 0xfeff) { - // Eat the BOM, since we've already found the encoding on this file, - // and we plan to concatenating this buffer with others; the BOM should - // only appear at the top of a file. - line = line.substring(1); - } - - if (line !== null) { - stringBuffer.append(line); - } - - while ((line = input.readLine()) !== null) { - stringBuffer.append(lineSeparator); - stringBuffer.append(line); - } - //Make sure we return a JavaScript string and not a Java string. - content = String(stringBuffer.toString()); //String - } finally { - input.close(); - } - callback(content); - }; - } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && - typeof Components !== 'undefined' && Components.classes && - Components.interfaces)) { - //Avert your gaze! - Cc = Components.classes; - Ci = Components.interfaces; - Components.utils['import']('resource://gre/modules/FileUtils.jsm'); - xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); - - text.get = function (url, callback) { - var inStream, convertStream, fileObj, - readData = {}; - - if (xpcIsWindows) { - url = url.replace(/\//g, '\\'); - } - - fileObj = new FileUtils.File(url); - - //XPCOM, you so crazy - try { - inStream = Cc['@mozilla.org/network/file-input-stream;1'] - .createInstance(Ci.nsIFileInputStream); - inStream.init(fileObj, 1, 0, false); - - convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] - .createInstance(Ci.nsIConverterInputStream); - convertStream.init(inStream, "utf-8", inStream.available(), - Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); - - convertStream.readString(inStream.available(), readData); - convertStream.close(); - inStream.close(); - callback(readData.value); - } catch (e) { - throw new Error((fileObj && fileObj.path || '') + ': ' + e); - } - }; - } - return text; -}); diff --git a/site/mkdocs/search_index.json b/site/mkdocs/search_index.json deleted file mode 100644 index 16698adee..000000000 --- a/site/mkdocs/search_index.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "docs": [ - { - "location": "/", - "text": "The TorQ framework created by \nAquaQ Analytics\n forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from \ncode.kx.com\n (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.\n\n\nThe easiest way to get a production capture started is to download and install one of the \nStarter Packs\n (here's a \nshort video\n to get going), or read the manual. We also have a \nGoogle Group for questions/discussions\n.\n\n\nFor recent updates to TorQ please check out our \nblog\n.\n\n\nFor email support contact", - "title": "Home" - }, - { - "location": "/Overview/", - "text": "Overview\n\n\n\n\nWhat is kdb+?\n\n\nkdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.\n\n\n\n\nWhat is AquaQ TorQ?\n\n\nAquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document.\n\n\nAquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are:\n\n\n\n\n\n\nProcess Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level.\n\n\n\n\n\n\nCode Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped.\n\n\n\n\n\n\nConfiguration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously.\n\n\n\n\n\n\nUsage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message.\n\n\n\n\n\n\nIncoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level.\n\n\n\n\n\n\nAccess Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management.\n\n\n\n\n\n\nTimer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers.\n\n\n\n\n\n\nStandard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled.\n\n\n\n\n\n\nError Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue.\n\n\n\n\n\n\nVisualisation: Utilities to ease GUI development using websockets\n and HTML5.\n\n\n\n\n\n\nDocumentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included.\n\n\n\n\n\n\nUtilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have:\n\n\n\n\n\n\nCaching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame;\n\n\n\n\n\n\nTimezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones;\n\n\n\n\n\n\nEmail: an library to send emails;\n\n\n\n\n\n\nAsync Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions;\n\n\n\n\n\n\nHeartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment;\n\n\n\n\n\n\nData Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks;\n\n\n\n\n\n\nSubscriptions: allow processes to dynamically detect and\n subscribe to datasources;\n\n\n\n\n\n\nTickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files;\n\n\n\n\n\n\nDatabase Writing: utility functions for writing to, sorting and\n parting on disk databases;\n\n\n\n\n\n\nCompression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression.\n\n\n\n\n\n\n\n\n\n\nAquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own:\n\n\n\n\n\n\nDiscovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process;\n\n\n\n\n\n\nGateway: A fully synchronous and asynchronous gateway is provided.\n\n\nThe gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client;\n\n\n\n\n\n\nReal Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes.\n\n\n\n\n\n\nWrite Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n \nw.q\n\n\n\n\n\n\nTickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.;\n\n\n\n\n\n\nReporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports.\n\n\n\n\n\n\nHousekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks.\n\n\n\n\n\n\nFile Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed.\n\n\n\n\n\n\nMonitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks;\n\n\n\n\n\n\nKill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.\n\n\n\n\n\n\n\n\nA Large Scale Data Processing Platform\n\n\nOne of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. \nkdb+tick\n\nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this:\n\n\n\n\nHowever, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this:\n\n\n\n\nA common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms.\n\n\nOther common production features include:\n\n\n\n\n\n\nA modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc.\n\n\n\n\n\n\nA Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job\n\n\n\n\n\n\nProcesses that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter])\n\n\n\n\n\n\nA Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system\n\n\n\n\n\n\nA Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system.\n\n\n\n\n\n\nBasic Monitoring (section [sec:monitor]) of process availability\n\n\n\n\n\n\nHousekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.\n\n\n\n\n\n\n\n\nDo I Really Have to Read This Whole Document?\n\n\nHopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition:\n\n\n\n\n\n\nWe have added a load of usage information:\n\n\naquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ...\n\n\n\nIf sourcing from another script there are hooks to modify and extend\nthe usage information as required.\n\n\n\n\n\n\nWe have some pretty extensive logging:\n\n\naquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ...\n\n\n\n\n\n\n\nWe have added functionality to find functions or variables defined\n in the session, and also to search function definitions.\n\n\nq).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api ..\n\n\n\n\n\n\n\nWe have incorporated help.q.\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\n\n\nWe have separated and commented all of our config:\n\n\naquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...\n\n\n\n\n\n\n\n\n\nOperating System and kdb+ Version\n\n\nAquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.\n\n\n\n\nLicense\n\n\nThis code is released under the MIT license.", - "title": "About" - }, - { - "location": "/Overview/#overview", - "text": "", - "title": "Overview" - }, - { - "location": "/Overview/#what-is-kdb", - "text": "kdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.", - "title": "What is kdb+?" - }, - { - "location": "/Overview/#what-is-aquaq-torq", - "text": "AquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document. AquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are: Process Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level. Code Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped. Configuration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously. Usage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message. Incoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level. Access Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management. Timer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers. Standard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled. Error Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue. Visualisation: Utilities to ease GUI development using websockets\n and HTML5. Documentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included. Utilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have: Caching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame; Timezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones; Email: an library to send emails; Async Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions; Heartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment; Data Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks; Subscriptions: allow processes to dynamically detect and\n subscribe to datasources; Tickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files; Database Writing: utility functions for writing to, sorting and\n parting on disk databases; Compression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression. AquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own: Discovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process; Gateway: A fully synchronous and asynchronous gateway is provided. The gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client; Real Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes. Write Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n w.q Tickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.; Reporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports. Housekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks. File Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed. Monitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks; Kill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.", - "title": "What is AquaQ TorQ?" - }, - { - "location": "/Overview/#a-large-scale-data-processing-platform", - "text": "One of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. kdb+tick \nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this: However, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this: A common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms. Other common production features include: A modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc. A Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job Processes that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter]) A Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system A Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system. Basic Monitoring (section [sec:monitor]) of process availability Housekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.", - "title": "A Large Scale Data Processing Platform" - }, - { - "location": "/Overview/#do-i-really-have-to-read-this-whole-document", - "text": "Hopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition: We have added a load of usage information: aquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ... If sourcing from another script there are hooks to modify and extend\nthe usage information as required. We have some pretty extensive logging: aquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ... We have added functionality to find functions or variables defined\n in the session, and also to search function definitions. q).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api .. We have incorporated help.q. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions We have separated and commented all of our config: aquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...", - "title": "Do I Really Have to Read This Whole Document?" - }, - { - "location": "/Overview/#operating-system-and-kdb-version", - "text": "AquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.", - "title": "Operating System and kdb+ Version" - }, - { - "location": "/Overview/#license", - "text": "This code is released under the MIT license.", - "title": "License" - }, - { - "location": "/gettingstarted/", - "text": "Getting Started\n\n\nkdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented.\n\n\nWe provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will:\n\n\n\n\n\n\nensure the environment is set up correctly;\n\n\n\n\n\n\ndefine some common utility functions (such as logging);\n\n\n\n\n\n\nexecute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files;\n\n\n\n\n\n\nload configuration;\n\n\n\n\n\n\nload the shared code based;\n\n\n\n\n\n\nset up the message handlers;\n\n\n\n\n\n\nload any required bespoke scripts.\n\n\n\n\n\n\nThe behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.\n\n\n\n\nUsing torq.q\n\n\ntorq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below.\n\n\n$ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1\n\n\n\nTo load a file, do:\n\n\n$ q torq.q -load myfile.q -debug -proctype testproc -procname test1\n\n\n\nIt can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script.\n\n\nmyvar:@[value;`myvar;1 2 3]\n\n\n\nThe available command line parameters are:\n\n\n\n\n\n\n\n\nCmd Line Param\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n-procname x -proctype y\n\n\nThe process name and process type\n\n\n\n\n\n\n-procfile x\n\n\nThe name of the file to get the process information from\n\n\n\n\n\n\n-load x [y..z]\n\n\nThe files or database directory to load\n\n\n\n\n\n\n-loaddir x [y..z]\n\n\nLoad all .q, .k files in specified directories\n\n\n\n\n\n\n-localtime\n\n\nSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P\n\n\n\n\n\n\n-trap\n\n\nAny errors encountered during initialization when loading external files will be caught and logged, processing will continue\n\n\n\n\n\n\n-stop\n\n\nStop loading the file if an error is encountered but do not exit\n\n\n\n\n\n\n-noredirect\n\n\nDo not redirect std out/std err to a file (useful for debugging)\n\n\n\n\n\n\n-noredirectalias\n\n\nDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)\n\n\n\n\n\n\n-noconfig\n\n\nDo not load configuration\n\n\n\n\n\n\n-nopi\n\n\nReset the definition of .z.pi to the initial value (useful for debugging)\n\n\n\n\n\n\n-debug\n\n\nEquivalent to [-nopi -noredirect]\n\n\n\n\n\n\n-usage\n\n\nPrint usage info and exit\n\n\n\n\n\n\n\n\nIn addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.\n\n\n\n\nEnvironment Variables\n\n\nFive environment variables are required:\n\n\n\n\n\n\n\n\nEnvironment Variable\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nKDBCONFIG\n\n\nThe base configuration directory\n\n\n\n\n\n\nKDBCODE\n\n\nThe base code directory\n\n\n\n\n\n\nKDBLOGS\n\n\nWhere standard out/error and usage logs are written\n\n\n\n\n\n\nKDBHTML\n\n\nContains HTML files\n\n\n\n\n\n\nKDBLIB\n\n\nContains supporting library files\n\n\n\n\n\n\n\n\ntorq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.\n\n\n\n\nProcess Identification\n\n\nAt the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded.\n\n\nThe most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways:\n\n\n\n\n\n\nFrom the process file in the default location of\n $KDBCONFIG/process.csv;\n\n\n\n\n\n\nFrom the process file defined using the command line parameter\n -procfile;\n\n\n\n\n\n\nFrom the port number it is started on, by referring to the process\n file for further process details;\n\n\n\n\n\n\nUsing the command line parameters -proctype and -procname;\n\n\n\n\n\n\nBy defining .proc.proctype and .proc.procname in a script which\n loads torq.q.\n\n\n\n\n\n\nFor options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file).\n\n\nFor option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry.\n\n\nThe process file has format as below.\n\n\naquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2\n\n\n\nThe process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.\n\n\n\n\nLogging\n\n\nBy default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are:\n\n\n\n\n\n\n\n\nLog File\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nout_[procname]_[date].log\n\n\nTimestamped out log\n\n\n\n\n\n\nerr_[procname]_[date].log\n\n\nTimestamped error log\n\n\n\n\n\n\nout_[procname].log\n\n\nAlias to current log log\n\n\n\n\n\n\nerr_[procname].log\n\n\nAlias to current error log\n\n\n\n\n\n\n\n\nThe date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.\n\n\n\n\nConfiguration Loading\n\n\nDefault Configuration Loading\n\n\nDefault process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:-\n\n\n\n\n\n\ndefault.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments;\n\n\n\n\n\n\n[[proctype]]{}.q: configuration for a specific process type;\n\n\n\n\n\n\n[[procname]]{}.q: configuration for a specific named process.\n\n\n\n\n\n\nThe only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.\n\n\nApplication Configuration Loading\n\n\nApplication specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:-\n\n\n\n\n\n\ndefault.q: Application default configuration loaded by all\n processes.\n\n\n\n\n\n\n[[proctype]]{}.q: Application specific configuration for a\n specific process type.\n\n\n\n\n\n\n[[procname]]{}.q: Appliction specific configuration for a specific\n named process.\n\n\n\n\n\n\nAll loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory.\n\n\nAll configuration is loaded before code.\n\n\n\n\nCode Loading\n\n\nCode is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder:\n\n\n\n\n\n\n$KDBCODE/common: shared codebase loaded by all processes;\n\n\n\n\n\n\n$KDBCODE/[proctype]: code for a specific process type;\n\n\n\n\n\n\n$KDBCODE/[procname]: code for a specific process name;\n\n\n\n\n\n\nFor any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded.\n\n\nAdditional directories can be loaded using the -loaddir command line\nparameter.\n\n\n\n\nInitialization Errors\n\n\nInitialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", - "title": "Getting Started" - }, - { - "location": "/gettingstarted/#getting-started", - "text": "kdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented. We provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will: ensure the environment is set up correctly; define some common utility functions (such as logging); execute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files; load configuration; load the shared code based; set up the message handlers; load any required bespoke scripts. The behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.", - "title": "Getting Started" - }, - { - "location": "/gettingstarted/#using-torqq", - "text": "torq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below. $ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1 To load a file, do: $ q torq.q -load myfile.q -debug -proctype testproc -procname test1 It can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script. myvar:@[value;`myvar;1 2 3] The available command line parameters are: Cmd Line Param Description -procname x -proctype y The process name and process type -procfile x The name of the file to get the process information from -load x [y..z] The files or database directory to load -loaddir x [y..z] Load all .q, .k files in specified directories -localtime Sets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P -trap Any errors encountered during initialization when loading external files will be caught and logged, processing will continue -stop Stop loading the file if an error is encountered but do not exit -noredirect Do not redirect std out/std err to a file (useful for debugging) -noredirectalias Do not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix) -noconfig Do not load configuration -nopi Reset the definition of .z.pi to the initial value (useful for debugging) -debug Equivalent to [-nopi -noredirect] -usage Print usage info and exit In addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.", - "title": "Using torq.q" - }, - { - "location": "/gettingstarted/#environment-variables", - "text": "Five environment variables are required: Environment Variable Description KDBCONFIG The base configuration directory KDBCODE The base code directory KDBLOGS Where standard out/error and usage logs are written KDBHTML Contains HTML files KDBLIB Contains supporting library files torq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.", - "title": "Environment Variables" - }, - { - "location": "/gettingstarted/#process-identification", - "text": "At the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded. The most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways: From the process file in the default location of\n $KDBCONFIG/process.csv; From the process file defined using the command line parameter\n -procfile; From the port number it is started on, by referring to the process\n file for further process details; Using the command line parameters -proctype and -procname; By defining .proc.proctype and .proc.procname in a script which\n loads torq.q. For options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file). For option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry. The process file has format as below. aquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2 The process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.", - "title": "Process Identification" - }, - { - "location": "/gettingstarted/#logging", - "text": "By default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are: Log File Description out_[procname]_[date].log Timestamped out log err_[procname]_[date].log Timestamped error log out_[procname].log Alias to current log log err_[procname].log Alias to current error log The date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.", - "title": "Logging" - }, - { - "location": "/gettingstarted/#configuration-loading", - "text": "", - "title": "Configuration Loading" - }, - { - "location": "/gettingstarted/#default-configuration-loading", - "text": "Default process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:- default.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments; [[proctype]]{}.q: configuration for a specific process type; [[procname]]{}.q: configuration for a specific named process. The only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.", - "title": "Default Configuration Loading" - }, - { - "location": "/gettingstarted/#application-configuration-loading", - "text": "Application specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:- default.q: Application default configuration loaded by all\n processes. [[proctype]]{}.q: Application specific configuration for a\n specific process type. [[procname]]{}.q: Appliction specific configuration for a specific\n named process. All loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory. All configuration is loaded before code.", - "title": "Application Configuration Loading" - }, - { - "location": "/gettingstarted/#code-loading", - "text": "Code is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder: $KDBCODE/common: shared codebase loaded by all processes; $KDBCODE/[proctype]: code for a specific process type; $KDBCODE/[procname]: code for a specific process name; For any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded. Additional directories can be loaded using the -loaddir command line\nparameter.", - "title": "Code Loading" - }, - { - "location": "/gettingstarted/#initialization-errors", - "text": "Initialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", - "title": "Initialization Errors" - }, - { - "location": "/utilities/", - "text": "Utilities\n\n\nWe have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.\n\n\n\n\napi.q\n\n\nThis provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order.\n\n\nDefinitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition.\n\n\nWhether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace.\n\n\n.api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done.\n\n\n\n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 \n ..\n mmax | function .q 1 \n ..\n .clients.MAXIDLE | variable .clients 0 \n ..\n .access.MAXSIZE | variable .access 0 \n ..\n .cache.maxsize | variable .cache 1 \nThe maximum size in..\n .cache.maxindividual| variable .cache 1 \nThe maximum size in..\n max | primitive 1 \n ..\n q).api.f\nmax*\n \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n \n \n \n max | primitive 1 \n \n \n \n\n\n\n\n\n.api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches.\n\n\n.api.s is used to search function definitions for specific values.\n\n\nq).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE\ns:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n..\n\n\n\n.api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views.\n\n\nq).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n..\n\n\n\n.api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging.\n\n\nq)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g\n\n\n\n\n\ntimer.q\n\n\nkdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms).\n\n\nThere are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen\n\n\n\n\n\n\nmode 0 will reschedule for T0+P;\n\n\n\n\n\n\nmode 1 will reschedule for T1+P;\n\n\n\n\n\n\nmode 2 will reschedule for T2+P.\n\n\n\n\n\n\nBoth mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.\n\n\n\n\nasync.q\n\n\nkdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway):\n\n\n\n\n\n\ndeferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed;\n\n\n\n\n\n\nasynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result.\n\n\n\n\n\n\nThe code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results).\n\n\nq).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\"\n\n\n\n.async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready.\n\n\nq).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3\n\n\n\nFor more details, see .api.p\u201c.async.*\u201d.\n\n\n\n\ncache.q\n\n\ncache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries.\n\n\nThe result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold:\n\n\n\n\n\n\nthe function is run multiple times with the same parameters (perhaps\n different clients all want the same result set);\n\n\n\n\n\n\nthe result set changes infrequently or the clients can accept\n slightly out-of-date values;\n\n\n\n\n\n\nthe result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts.\n\n\n\n\n\n\nThe cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size.\n\n\nIf a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored.\n\n\nThe main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache.\n\n\nThe function is run and the result placed in the cache:\n\n\nq)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3\n\n\n\nThe second time round, the result set is returned immediately from the\ncache as we are within the staletime value:\n\n\nq)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3\n\n\n\nIf the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned:\n\n\nq)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3\n\n\n\nThe cache performance is tracked:\n\n\nq).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2\n\n\n\nSee .api.p.cache.*for more details.\n\n\n\n\nemail.q\n\n\nA library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details.\n\n\nThe main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nurl\n\n\nY\n\n\nsymbol\n\n\nURL of mail server e.g. smtp://mail.example.com\n\n\n\n\n\n\nuser\n\n\nY\n\n\nsymbol\n\n\nUsername of user to login as\n\n\n\n\n\n\npassword\n\n\nY\n\n\nsymbol\n\n\nPassword for user\n\n\n\n\n\n\nusessl\n\n\nN\n\n\nboolean\n\n\nConnect using SSL/TLS, defaults to false\n\n\n\n\n\n\nfrom\n\n\nN\n\n\nsymbol\n\n\nEmail from field, defaults to torq@aquaq.co.uk\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i\n\n\n\nThe email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nto\n\n\nY\n\n\nsymbol (list)\n\n\naddresses to send to\n\n\n\n\n\n\nsubject\n\n\nY\n\n\nchar list\n\n\nemail subject\n\n\n\n\n\n\nbody\n\n\nY\n\n\nlist of char lists\n\n\nemail body\n\n\n\n\n\n\ncc\n\n\nN\n\n\nsymbol (list)\n\n\ncc list\n\n\n\n\n\n\nbodyType\n\n\nN\n\n\nsymbol\n\n\ntype of email body. Can be `text or `html. Default is `text\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i\n\n\n\nNote that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time.\n\n\nTwo further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection.\n\n\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i\n\n\n\n.email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information.\n\n\nq).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n...\n\n\n\nAdditionally functions are available within the email library. See\n.api.p.email.*for more details.\n\n\nEmails with SSL certificates from Windows\n\n\nIf you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are:\n\n\n\n\n\n\ndownload\n \nthis\n\n and save it to your PC\n\n\n\n\n\n\nset\n\n\n CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt\n\n\n\n\n\n\n\nMore information is available\n\nhere\n\nand \nhere\n\n\n\n\ntimezone.q\n\n\nA slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.\n\n\n\n\ncompress.q\n\n\ncompress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table.\n\n\nThe utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed.\n\n\nCompression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.)\n\n\nThe compressionconfig.csv file should have the following format:\n\n\ntable,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7\n\n\n\nThis file can be placed in the config folder, or a path to the file\ngiven at run time.\n\n\nThe compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file.\n\n\nThis utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed:\n\n\n.cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nThis function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already.\n\n\nfullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n....\n\n\n\nTo then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles):\n\n\n.cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nTo run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use:\n\n\n.cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file\n\n\n\nLogs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio:\n\n\n|comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file.\n\n\n\nA table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab:\n\n\nfile algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n.....\n\n\n\nA note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.\n\n\n\n\ndataloader.q\n\n\nThis script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of \nthe data loader example on\ncode.kx\n.\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields:\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nheaders\n\n\nY\n\n\nsymbol list\n\n\nNames of the header columns in the file\n\n\n\n\n\n\ntypes\n\n\nY\n\n\nchar list\n\n\nData types to read from the file\n\n\n\n\n\n\nseparator\n\n\nY\n\n\nchar[list]\n\n\nDelimiting character. Enlist it if first line of file is header data\n\n\n\n\n\n\ntablename\n\n\nY\n\n\nsymbol\n\n\nName of table to write data to\n\n\n\n\n\n\ndbdir\n\n\nY\n\n\nsymbol\n\n\nDirectory to write data to\n\n\n\n\n\n\npartitiontype\n\n\nN\n\n\nsymbol\n\n\nPartitioning to use. Must be one of\n\n\n\n\n\n\n`date`month`year`int. Default is `date\n\n\n\n\n\n\n\n\n\n\n\n\npartitioncol\n\n\nN\n\n\nsymbol\n\n\nColumn to use to extract partition information.Default is `time\n\n\n\n\n\n\ndataprocessfunc\n\n\nN\n\n\nfunction\n\n\nDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}\n\n\n\n\n\n\nchunksize\n\n\nN\n\n\nint\n\n\nData size in bytes to read in one chunk. Default is 100 MB\n\n\n\n\n\n\ncompression\n\n\nN\n\n\nint list\n\n\nCompression parameters to use e.g. 17 2 6. Default is empty list for no compression\n\n\n\n\n\n\ngc\n\n\nN\n\n\nboolean\n\n\nWhether to run garbage collection at appropriate points. Default is 0b (false)\n\n\n\n\n\n\n\n\nExample usage:\n\n\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]\n\n\n\n\n\nsubscriptions.q\n\n\nThe subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions).\n\n\n.sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant:\n\n\n.sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\n.sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants:\n\n\n.sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nThe subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants:\n\n\n.sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nSee .api.p\u201c.sub.*\u201d for more details.\n\n\n\n\npubsub.q\n\n\npubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.\n\n\n\n\ntplogutils.q\n\n\ntplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.\n\n\n\n\nmonitoringchecks.q\n\n\nmonitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure:\n\n\n\n\n\n\ntable sizes are increasing during live capture\n\n\n\n\n\n\nthe HDB data saves down correctly\n\n\n\n\n\n\nthe allocated memory of a process does not increase past a certain\n size\n\n\n\n\n\n\nthe size of the symbol list in memory doesn\u2019t grow to big\n\n\n\n\n\n\nthe process does not have too much on its pending subscriber queue\n\n\n\n\n\n\nThese checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.\n\n\n\n\nheartbeat.q\n\n\nheartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.\n\n\n\n\ndbwriteutils.q\n\n\nThis contains a set of utility functions for writing data to historic\ndatabases.\n\n\nSorting and Attributes\n\n\nThe sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration).\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\n\n\n\nAs an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true):\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0\n\n\n\nTo invoke the sort utilities, supply a list of (tablename; partitions)\ne.g.\n\n\nq).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table\n\n\n\nA different sort configuration file can be loaded with\n\n\n.sort.getsortcsv[`:file]\n\n\n\nGarbage Collection\n\n\nThe garbage collection utility prints some debug information before and\nafter the garbage collection.\n\n\nq).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n\n\n\nTable Manipulation\n\n\nThe table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.\n\n\n\n\nhelp.q\n\n\nThe standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[\ncode.kx\n].\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\nhtml.q\n\n\nAn HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the \n.html\n namespace.\n\n\n\n\nAdditional Utilities\n\n\nThere are some additional user contributed utility scripts available on\ncode.kx which are good candidates for inclusion. These could either be\ndropped into the common code directory, or if not globally applicable\nthen in the code directory for either the process type or name. The full\nset of user contributed code is documented\n\nhere\n.\n\n\n\n\nFull API\n\n\nThe full public api can be found by running\n\n\nq).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n..\n\n\n\nCombined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions.\n\n\n\n\n\n\n\n\nNamespace\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.proc\n\n\nProcess API\n\n\n\n\n\n\n.lg\n\n\nStandard out/error logging API\n\n\n\n\n\n\n.err\n\n\nError throwing API\n\n\n\n\n\n\n.usage\n\n\nUsage logging API\n\n\n\n\n\n\n.access\n\n\nPermissions API\n\n\n\n\n\n\n.clients\n\n\nClient tracking API\n\n\n\n\n\n\n.servers\n\n\nServer tracking API\n\n\n\n\n\n\n.async\n\n\nAsync communication API\n\n\n\n\n\n\n.timer\n\n\nTimer API\n\n\n\n\n\n\n.cache\n\n\nCaching API\n\n\n\n\n\n\n.tz\n\n\nTimezone conversions API\n\n\n\n\n\n\n.checks\n\n\nMonitoring API\n\n\n\n\n\n\n.cmp\n\n\nCompression API\n\n\n\n\n\n\n.ps\n\n\nPublish and Subscribe API\n\n\n\n\n\n\n.hb\n\n\nHeartbeating API\n\n\n\n\n\n\n.loader\n\n\nData Loader API\n\n\n\n\n\n\n.sort\n\n\nData sorting and attribute setting API\n\n\n\n\n\n\n.sub\n\n\nSubscription API\n\n\n\n\n\n\n.gc\n\n\nGarbage Collection API\n\n\n\n\n\n\n.tplog\n\n\nTickerplant Log Replay API\n\n\n\n\n\n\n.api\n\n\nAPI management API\n\n\n\n\n\n\n\n\n\n\nModified u.q\n\n\nStarting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.", - "title": "Utilities" - }, - { - "location": "/utilities/#utilities", - "text": "We have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.", - "title": "Utilities" - }, - { - "location": "/utilities/#apiq", - "text": "This provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order. Definitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition. Whether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace. .api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done. \n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 ..\n mmax | function .q 1 ..\n .clients.MAXIDLE | variable .clients 0 ..\n .access.MAXSIZE | variable .access 0 ..\n .cache.maxsize | variable .cache 1 The maximum size in..\n .cache.maxindividual| variable .cache 1 The maximum size in..\n max | primitive 1 ..\n q).api.f max* \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n max | primitive 1 .api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches. .api.s is used to search function definitions for specific values. q).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE s:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n.. .api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views. q).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n.. .api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging. q)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g", - "title": "api.q" - }, - { - "location": "/utilities/#timerq", - "text": "kdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms). There are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen mode 0 will reschedule for T0+P; mode 1 will reschedule for T1+P; mode 2 will reschedule for T2+P. Both mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.", - "title": "timer.q" - }, - { - "location": "/utilities/#asyncq", - "text": "kdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway): deferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed; asynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result. The code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results). q).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\" .async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready. q).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3 For more details, see .api.p\u201c.async.*\u201d.", - "title": "async.q" - }, - { - "location": "/utilities/#cacheq", - "text": "cache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries. The result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold: the function is run multiple times with the same parameters (perhaps\n different clients all want the same result set); the result set changes infrequently or the clients can accept\n slightly out-of-date values; the result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts. The cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size. If a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored. The main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache. The function is run and the result placed in the cache: q)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3 The second time round, the result set is returned immediately from the\ncache as we are within the staletime value: q)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3 If the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned: q)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3 The cache performance is tracked: q).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2 See .api.p.cache.*for more details.", - "title": "cache.q" - }, - { - "location": "/utilities/#emailq", - "text": "A library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details. The main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure. Parameter Req Type Description url Y symbol URL of mail server e.g. smtp://mail.example.com user Y symbol Username of user to login as password Y symbol Password for user usessl N boolean Connect using SSL/TLS, defaults to false from N symbol Email from field, defaults to torq@aquaq.co.uk debug N integer Debug level. 0=no output, 1=normal output, 2=verbose output. Default is 1 An example is: q).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i The email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure. Parameter Req Type Description to Y symbol (list) addresses to send to subject Y char list email subject body Y list of char lists email body cc N symbol (list) cc list bodyType N symbol type of email body. Can be `text or `html. Default is `text debug N integer Debug level. 0=no output, 1=normal output,2=verbose output. Default is 1 An example is: q).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i Note that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time. Two further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection. q).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i .email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information. q).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n... Additionally functions are available within the email library. See\n.api.p.email.*for more details.", - "title": "email.q" - }, - { - "location": "/utilities/#emails-with-ssl-certificates-from-windows", - "text": "If you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are: download\n this \n and save it to your PC set CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt More information is available here \nand here", - "title": "Emails with SSL certificates from Windows" - }, - { - "location": "/utilities/#timezoneq", - "text": "A slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.", - "title": "timezone.q" - }, - { - "location": "/utilities/#compressq", - "text": "compress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table. The utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed. Compression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.) The compressionconfig.csv file should have the following format: table,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7 This file can be placed in the config folder, or a path to the file\ngiven at run time. The compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file. This utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed: .cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file This function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already. fullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n.... To then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles): .cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file To run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use: .cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file Logs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio: |comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file. A table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab: file algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n..... A note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.", - "title": "compress.q" - }, - { - "location": "/utilities/#dataloaderq", - "text": "This script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of the data loader example on\ncode.kx .\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields: Parameter Req Type Description headers Y symbol list Names of the header columns in the file types Y char list Data types to read from the file separator Y char[list] Delimiting character. Enlist it if first line of file is header data tablename Y symbol Name of table to write data to dbdir Y symbol Directory to write data to partitiontype N symbol Partitioning to use. Must be one of `date`month`year`int. Default is `date partitioncol N symbol Column to use to extract partition information.Default is `time dataprocessfunc N function Diadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y} chunksize N int Data size in bytes to read in one chunk. Default is 100 MB compression N int list Compression parameters to use e.g. 17 2 6. Default is empty list for no compression gc N boolean Whether to run garbage collection at appropriate points. Default is 0b (false) Example usage: .loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]", - "title": "dataloader.q" - }, - { - "location": "/utilities/#subscriptionsq", - "text": "The subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions). .sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant: .sub.getsubscriptionhandles[`tickerplant;`;()!()] .sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants: .sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] The subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants: .sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] See .api.p\u201c.sub.*\u201d for more details.", - "title": "subscriptions.q" - }, - { - "location": "/utilities/#pubsubq", - "text": "pubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.", - "title": "pubsub.q" - }, - { - "location": "/utilities/#tplogutilsq", - "text": "tplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.", - "title": "tplogutils.q" - }, - { - "location": "/utilities/#monitoringchecksq", - "text": "monitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure: table sizes are increasing during live capture the HDB data saves down correctly the allocated memory of a process does not increase past a certain\n size the size of the symbol list in memory doesn\u2019t grow to big the process does not have too much on its pending subscriber queue These checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.", - "title": "monitoringchecks.q" - }, - { - "location": "/utilities/#heartbeatq", - "text": "heartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.", - "title": "heartbeat.q" - }, - { - "location": "/utilities/#dbwriteutilsq", - "text": "This contains a set of utility functions for writing data to historic\ndatabases.", - "title": "dbwriteutils.q" - }, - { - "location": "/utilities/#sorting-and-attributes", - "text": "The sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration). aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1 As an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true): aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0 To invoke the sort utilities, supply a list of (tablename; partitions)\ne.g. q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table A different sort configuration file can be loaded with .sort.getsortcsv[`:file]", - "title": "Sorting and Attributes" - }, - { - "location": "/utilities/#garbage-collection", - "text": "The garbage collection utility prints some debug information before and\nafter the garbage collection. q).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB", - "title": "Garbage Collection" - }, - { - "location": "/utilities/#table-manipulation", - "text": "The table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.", - "title": "Table Manipulation" - }, - { - "location": "/utilities/#helpq", - "text": "The standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[ code.kx ]. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions", - "title": "help.q" - }, - { - "location": "/utilities/#htmlq", - "text": "An HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the .html namespace.", - "title": "html.q" - }, - { - "location": "/utilities/#additional-utilities", - "text": "There are some additional user contributed utility scripts available on\ncode.kx which are good candidates for inclusion. These could either be\ndropped into the common code directory, or if not globally applicable\nthen in the code directory for either the process type or name. The full\nset of user contributed code is documented here .", - "title": "Additional Utilities" - }, - { - "location": "/utilities/#full-api", - "text": "The full public api can be found by running q).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n.. Combined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions. Namespace Description .proc Process API .lg Standard out/error logging API .err Error throwing API .usage Usage logging API .access Permissions API .clients Client tracking API .servers Server tracking API .async Async communication API .timer Timer API .cache Caching API .tz Timezone conversions API .checks Monitoring API .cmp Compression API .ps Publish and Subscribe API .hb Heartbeating API .loader Data Loader API .sort Data sorting and attribute setting API .sub Subscription API .gc Garbage Collection API .tplog Tickerplant Log Replay API .api API management API", - "title": "Full API" - }, - { - "location": "/utilities/#modified-uq", - "text": "Starting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.", - "title": "Modified u.q" - }, - { - "location": "/handlers/", - "text": "Message Handlers\n\n\nThere is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to\n\ncode.kx\n.\n\n\nEvery external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file.\n\n\n\n\n\n\n\n\nScript\n\n\nNS\n\n\nDiag\n\n\nFunction\n\n\nModifies\n\n\n\n\n\n\n\n\n\n\nlogusage.q\n\n\n.usage\n\n\nY\n\n\nLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates\n\n\npw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer\n\n\n\n\n\n\ncontrolaccess.q\n\n\n.access\n\n\nN\n\n\nRestrict access for set of users/user groups to a list of functions, and from a defined set of servers\n\n\npw, pg, ps, ws, ph, pp, pi\n\n\n\n\n\n\ntrackclients.q\n\n\n.clients\n\n\nY\n\n\nTrack client process details including then number of requests and cumulative data size returned\n\n\npo, pg, ps, ws, pc\n\n\n\n\n\n\ntrackservers.q\n\n\n.servers\n\n\nY\n\n\nDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.\n\n\npc, timer\n\n\n\n\n\n\nzpsignore.q\n\n\n.zpsignore\n\n\nN\n\n\nOverride async message handler based on certain message patterns\n\n\nps\n\n\n\n\n\n\nwriteaccess.q\n\n\n.readonly\n\n\nN\n\n\nRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.\n\n\npg, ps, ws, ph, pp\n\n\n\n\n\n\n\n\nEach customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files.\n\n\n/- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)\n\n\n\n\n\nlogusage.q\n\n\nlogusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx.\n\n\nIn its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because:\n\n\n\n\n\n\nlogging to memory enables easy interrogation of client interaction;\n\n\n\n\n\n\nlogging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail;\n\n\n\n\n\n\nlogging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution;\n\n\n\n\n\n\nlogging after a query captures the time taken, result set size and\n resulting state;\n\n\n\n\n\n\nlogging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems.\n\n\n\n\n\n\nThe following fields are logged in .usage.usage:\n\n\n\n\n\n\n\n\nField\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\ntime\n\n\nTime the row was added to the table\n\n\n\n\n\n\nid\n\n\nID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication\n\n\n\n\n\n\ntimer\n\n\nExecution time. Null for rows with status=b (before)\n\n\n\n\n\n\nzcmd\n\n\n.z handler the query arrived through\n\n\n\n\n\n\nstatus\n\n\nQuery status. One of b, c or e (before, complete, error)\n\n\n\n\n\n\na\n\n\nAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname\n\n\n\n\n\n\nu\n\n\nUsername of sender\n\n\n\n\n\n\nw\n\n\nHandle of sender\n\n\n\n\n\n\ncmd\n\n\nCommand sent\n\n\n\n\n\n\nmem\n\n\nMemory statistics\n\n\n\n\n\n\nsz\n\n\nSize of result. Null for rows with status of b or e\n\n\n\n\n\n\nerror\n\n\nError message\n\n\n\n\n\n\n\n\n\n\ncontrolaccess.q\n\n\ncontrolaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects:\n\n\n\n\n\n\nthe host/ip address of the servers which are allowed to access the\n process;\n\n\n\n\n\n\ndefinition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do;\n\n\n\n\n\n\nthe group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions;\n\n\n\n\n\n\nthe maximum size of the result set returned to a client.\n\n\n\n\n\n\nThe access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions.\n\n\n\n\n\n\n\n\nFile\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n*_hosts.csv\n\n\nContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed\n\n\n\n\n\n\n*_users.csv\n\n\nContains individual users and the user groups they are are a member of\n\n\n\n\n\n\n*_functions.csv\n\n\nContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users\n\n\n\n\n\n\n\n\nThe permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv.\n\n\nWhen a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.\n\n\n\n\ntrackclients.q\n\n\ntrackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service.\n\n\nWhenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.\n\n\n\n\ntrackservers.q\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.\n\n\n\n\nzpsignore.q\n\n\nzpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.\n\n\n\n\nwriteaccess.q\n\n\nwriteaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.\n\n\npermissions.q\n\n\npermissions.q is used to control client access to a server process. It\nallows:\n\n\n\n\n\n\nAccess control via username/password access, either in combination\n with the -u/U process flags or in place of them.\n\n\n\n\n\n\nDefinition of user groups, which control variable access.\n\n\n\n\n\n\nDefinition of user roles, which allow control over function\n execution.\n\n\n\n\n\n\nDeeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses.\n\n\n\n\n\n\nAccess restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions.\n\n\nPermissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself.\n\n\nThe access schema consists of 7 control tables:\n\n\n\n\n\n\n\n\nName\n\n\nDescriptions\n\n\n\n\n\n\n\n\n\n\nUser\n\n\nUsername, locality, encryption type and password hash\n\n\n\n\n\n\nUsergroup\n\n\nUser and their group.\n\n\n\n\n\n\nUserrole\n\n\nUser and role.\n\n\n\n\n\n\nFunctiongroup\n\n\nFunctions and their group\n\n\n\n\n\n\nFunction\n\n\nFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.\n\n\n\n\n\n\nAccess\n\n\nVariable names, the groups which can access them, and the read or write access level.\n\n\n\n\n\n\nVirtualtable\n\n\nVirtual table name, main table name, and the where clause it enforces on access to that table.\n\n\n\n\n\n\n\n\nIn addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself.\n\n\nA user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g.\n\n\n\n\n\n\n\n\nTable\n\n\nGroup\n\n\nLevel\n\n\n\n\n\n\n\n\n\n\nquote\n\n\nheadtrader\n\n\nwrite\n\n\n\n\n\n\ntrade\n\n\njuniortrader\n\n\nread\n\n\n\n\n\n\n\n\nHere, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow.\n\n\nThe permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments.\n\n\nFunction access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar:\n\n\n\n\n\n\n\n\nFunction\n\n\nRole\n\n\nParam. Check\n\n\n\n\n\n\n\n\n\n\ntimedata\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\ntimedata\n\n\nnormal user\n\n\n{x[`bkttype] in `hh}\n\n\n\n\n\n\nselect\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\n\n\nThe parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check.\n\n\nFurther restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g.\n\n\n\n\n\n\n\n\nVirtual Table\n\n\nTable\n\n\nWhere Clause\n\n\n\n\n\n\n\n\n\n\ntrade_lse\n\n\ntrade\n\n\n,(in;`src;\u201cL\u201d)\n\n\n\n\n\n\nquote_new\n\n\nquote\n\n\n,(\n;`time;(-;`.z.p;01:00))\n\n\n\n\n\n\n\n\nWhen a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable.\n\n\nIf the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role.\n\n\nThe permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions.\n\n\nAdding to the groups and roles is handled by the functions:\n\n\nadduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"]\n\n\n\nwhich are further explained in the script API.\n\n\nPermission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.\n\n\nUsage Example\n\n\nTo connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so:\n\n\n.pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist(\n;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]\n\n\n\nThis provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth.\n\n\nAdam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it.\n\n\nAdditionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined:\n\n\n.pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp]\n\n\n\nAnd then grant that role access to the .u.upd function:\n\n\n.pm.grantfunction[`.u.upd;`tp;{1b}]\n\n\n\nAlthough the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.\n\n\nGateway Example\n\n\nThe gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified.\n\n\nWithin the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]\n\n\n\nSince .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]\n\n\n\n\n\nDiagnostic Reporting\n\n\nThe message handler modifications provide a wealth of diagnostic\ninformation including:\n\n\n\n\n\n\nthe timings and memory usage for every query run on a process;\n\n\n\n\n\n\nfailed queries;\n\n\n\n\n\n\nclients trying to do things they are not permissioned for;\n\n\n\n\n\n\nthe clients which are querying often and/or regularly extracting\n large datasets;\n\n\n\n\n\n\nthe number of clients currently connected;\n\n\n\n\n\n\ntimer calls and how long they take.\n\n\n\n\n\n\nAlthough not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", - "title": "Handlers" - }, - { - "location": "/handlers/#message-handlers", - "text": "There is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to code.kx . Every external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file. Script NS Diag Function Modifies logusage.q .usage Y Log all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates pw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer controlaccess.q .access N Restrict access for set of users/user groups to a list of functions, and from a defined set of servers pw, pg, ps, ws, ph, pp, pi trackclients.q .clients Y Track client process details including then number of requests and cumulative data size returned po, pg, ps, ws, pc trackservers.q .servers Y Discover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service. pc, timer zpsignore.q .zpsignore N Override async message handler based on certain message patterns ps writeaccess.q .readonly N Restrict client write access to prevent any modification to data in place. Also disables all HTTP access. pg, ps, ws, ph, pp Each customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files. /- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)", - "title": "Message Handlers" - }, - { - "location": "/handlers/#logusageq", - "text": "logusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx. In its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because: logging to memory enables easy interrogation of client interaction; logging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail; logging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution; logging after a query captures the time taken, result set size and\n resulting state; logging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems. The following fields are logged in .usage.usage: Field Description time Time the row was added to the table id ID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication timer Execution time. Null for rows with status=b (before) zcmd .z handler the query arrived through status Query status. One of b, c or e (before, complete, error) a Address of sender. .dotz.ipa can be used to convert from the integer format to a hostname u Username of sender w Handle of sender cmd Command sent mem Memory statistics sz Size of result. Null for rows with status of b or e error Error message", - "title": "logusage.q" - }, - { - "location": "/handlers/#controlaccessq", - "text": "controlaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects: the host/ip address of the servers which are allowed to access the\n process; definition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do; the group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions; the maximum size of the result set returned to a client. The access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions. File Description *_hosts.csv Contains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed *_users.csv Contains individual users and the user groups they are are a member of *_functions.csv Contains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users The permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv. When a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.", - "title": "controlaccess.q" - }, - { - "location": "/handlers/#trackclientsq", - "text": "trackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service. Whenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.", - "title": "trackclients.q" - }, - { - "location": "/handlers/#trackserversq", - "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.", - "title": "trackservers.q" - }, - { - "location": "/handlers/#zpsignoreq", - "text": "zpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.", - "title": "zpsignore.q" - }, - { - "location": "/handlers/#writeaccessq", - "text": "writeaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.", - "title": "writeaccess.q" - }, - { - "location": "/handlers/#permissionsq", - "text": "permissions.q is used to control client access to a server process. It\nallows: Access control via username/password access, either in combination\n with the -u/U process flags or in place of them. Definition of user groups, which control variable access. Definition of user roles, which allow control over function\n execution. Deeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses. Access restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions. Permissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself. The access schema consists of 7 control tables: Name Descriptions User Username, locality, encryption type and password hash Usergroup User and their group. Userrole User and role. Functiongroup Functions and their group Function Function names, the roles which can access them, and a lambda checking the parameters those roles can use. Access Variable names, the groups which can access them, and the read or write access level. Virtualtable Virtual table name, main table name, and the where clause it enforces on access to that table. In addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself. A user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g. Table Group Level quote headtrader write trade juniortrader read Here, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow. The permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments. Function access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar: Function Role Param. Check timedata quant {1b} timedata normal user {x[`bkttype] in `hh} select quant {1b} The parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check. Further restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g. Virtual Table Table Where Clause trade_lse trade ,(in;`src;\u201cL\u201d) quote_new quote ,( ;`time;(-;`.z.p;01:00)) When a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable. If the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role. The permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions. Adding to the groups and roles is handled by the functions: adduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"] which are further explained in the script API. Permission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.", - "title": "permissions.q" - }, - { - "location": "/handlers/#usage-example", - "text": "To connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so: .pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist( ;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}] This provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth. Adam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it. Additionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined: .pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp] And then grant that role access to the .u.upd function: .pm.grantfunction[`.u.upd;`tp;{1b}] Although the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.", - "title": "Usage Example" - }, - { - "location": "/handlers/#gateway-example", - "text": "The gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified. Within the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use: .pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}] Since .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables: .pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]", - "title": "Gateway Example" - }, - { - "location": "/handlers/#diagnostic-reporting", - "text": "The message handler modifications provide a wealth of diagnostic\ninformation including: the timings and memory usage for every query run on a process; failed queries; clients trying to do things they are not permissioned for; the clients which are querying often and/or regularly extracting\n large datasets; the number of clients currently connected; timer calls and how long they take. Although not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", - "title": "Diagnostic Reporting" - }, - { - "location": "/conn/", - "text": "Connection Management\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk\n\n\n\nConnections\n\n\nProcesses locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available.\n\n\nThe main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.\n\n\nProcess Attributes\n\n\nEach process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include:\n\n\n\n\n\n\nrange of data contained in the process;\n\n\n\n\n\n\navailable tables;\n\n\n\n\n\n\ninstrument universe;\n\n\n\n\n\n\nphysical location;\n\n\n\n\n\n\nany other fields of relevance.\n\n\n\n\n\n\nConnection Passwords\n\n\nThe password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.\n\n\nRetrieving and Using Handles\n\n\nA function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters:\n\n\n\n\n\n\ntype-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname);\n\n\n\n\n\n\ntypes-or-names: the types or names to retrieve e.g. hdb;\n\n\n\n\n\n\nrequired-attributes: the dictionary of attributes to match on;\n\n\n\n\n\n\nopen-dead-connections: whether to re-open dead connections;\n\n\n\n\n\n\nonly-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter.\n\n\n\n\n\n\n.servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes).\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\n\n\n\n.servers.getservers will try to automatically re-open connections if\nrequired.\n\n\nq).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n\n\nThere are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters:\n\n\n\n\n\n\ntypes: the type to retrieve e.g. hdb;\n\n\n\n\n\n\nselection-algorithm: can be one of any, last or roundrobin.\n\n\n\n\n\n\nConnecting To Non-TorQ Processes\n\n\nConnections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required.\n\n\nNon-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b.\n\n\nExample of nontorqprocess.csv file:\n\n\nhost,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02\n\n\n\nManually Adding And Using Connections\n\n\nConnections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.\n\n\nIPC types\n\n\nIn version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE.\n\n\nIn the settings example below, everything that connects to the\ntickerplant will use unix domain sockets.\n\n\n\\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix\n\n\n\nAttempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns.\n\n\nAt the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", - "title": "Connection Management" - }, - { - "location": "/conn/#connection-management", - "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk", - "title": "Connection Management" - }, - { - "location": "/conn/#connections", - "text": "Processes locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available. The main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.", - "title": "Connections" - }, - { - "location": "/conn/#process-attributes", - "text": "Each process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include: range of data contained in the process; available tables; instrument universe; physical location; any other fields of relevance.", - "title": "Process Attributes" - }, - { - "location": "/conn/#connection-passwords", - "text": "The password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.", - "title": "Connection Passwords" - }, - { - "location": "/conn/#retrieving-and-using-handles", - "text": "A function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters: type-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname); types-or-names: the types or names to retrieve e.g. hdb; required-attributes: the dictionary of attributes to match on; open-dead-connections: whether to re-open dead connections; only-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter. .servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes). q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$())) .servers.getservers will try to automatically re-open connections if\nrequired. q).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!() There are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters: types: the type to retrieve e.g. hdb; selection-algorithm: can be one of any, last or roundrobin.", - "title": "Retrieving and Using Handles" - }, - { - "location": "/conn/#connecting-to-non-torq-processes", - "text": "Connections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required. Non-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b. Example of nontorqprocess.csv file: host,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02", - "title": "Connecting To Non-TorQ Processes" - }, - { - "location": "/conn/#manually-adding-and-using-connections", - "text": "Connections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.", - "title": "Manually Adding And Using Connections" - }, - { - "location": "/conn/#ipc-types", - "text": "In version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE. In the settings example below, everything that connects to the\ntickerplant will use unix domain sockets. \\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix Attempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns. At the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", - "title": "IPC types" - }, - { - "location": "/Processes/", - "text": "Processes\n\n\nA set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is:\n\n\naquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1\n\n\n\n\n\nDiscovery Service\n\n\nOverview\n\n\nProcesses use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections.\n\n\nThe discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery.\n\n\nTo run the discovery service, use a start line such as:\n\n\naquaq $ q torq.q -load code/processes/discovery.q -p 9995\n\n\n\nModify the configuration as required.\n\n\nOperation\n\n\n\n\n\n\nProcesses register with the discovery service.\n\n\n\n\n\n\n\n\nProcesses use the discovery service to locate other processes.\n\n\n\n\n\n\n\n\nWhen new services register, any processes which have registered an\n interest in that process type are notified.\n\n\n\n\n\n\n\n\nAvailable Processes\n\n\nThe list of available processes can be found in the .servers.SERVERS\ntable.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()\n\n\n\n\n\nGateway\n\n\nA synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.\n\n\n\n\nAsynchronous Behaviour\n\n\nAsynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens:\n\n\n\n\n\n\nthe query is placed in a queue;\n\n\n\n\n\n\nthe list of available servers is retrieved;\n\n\n\n\n\n\nthe queue is prioritised, so those queries with higher priority are\n serviced first;\n\n\n\n\n\n\nqueries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query;\n\n\n\n\n\n\nwhen all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client.\n\n\n\n\n\n\nThe two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc.\n\n\nAn asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.\n\n\nSynchronous Behaviour\n\n\nWhen using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.\n\n\nProcess Discovery\n\n\nThe gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.\n\n\nError Handling\n\n\nWhen synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when:\n\n\n\n\n\n\nthe client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately);\n\n\n\n\n\n\nthe query is timed out;\n\n\n\n\n\n\na back end server returns an error;\n\n\n\n\n\n\na back end server fails;\n\n\n\n\n\n\nthe join function fails.\n\n\n\n\n\n\nIf postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).\n\n\nClient Calls\n\n\nThere are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details.\n\n\n\n\n\n\n\n\nFunction\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.gw.syncexec[query; servertypes]\n\n\nExecute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.\n\n\n\n\n\n\n.gw.syncexecj[query; servertypes; joinfunction]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results.\n\n\n\n\n\n\n.gw.asyncexec[query; servertypes]\n\n\nExecute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.\n\n\n\n\n\n\n.gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.\n\n\n\n\n\n\n\n\nFor the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it.\n\n\nq).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk\n\n\n\nBoth the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB.\n\n\nq)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017\n\n\n\nRun the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line.\n\n\nq torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb\n\n\n\nStart a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds.\n\n\nq)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009\n\n\n\nIf a query is done for a server type which is not registered, an error\nis returned:\n\n\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other\n\n\n\nCustom join functions can be specified:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1\n\n\n\nCustom joins can fail with appropriate errors:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b\n\n\n\nAsynchronous queries must be sent in async and blocked:\n\n\nq)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\n\n\n\nWe can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time.\n\n\nq)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003\n\n\n\nAlternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function.\n\n\nq)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n\n\nAsynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required.\n\n\nq)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550\n\n\n\nNon kdb+ Clients\n\n\nAll the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the \nJava Grid\nViewer\n:\n\n\nimport java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n}\n\n\n\nSome of the unofficially supported APIs may only allow synchronous calls\nto be made.\n\n\n\n\nReal Time Database (RDB)\n\n\nThe Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include:\n\n\n\n\n\n\nTickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file;\n\n\n\n\n\n\nAutomatic re-connection and resubscription to tickerplant;\n\n\n\n\n\n\nList of tables to subscribe to supplied as configuration setting;\n\n\n\n\n\n\nMore pre-built flexibility in end-of-day;\n\n\n\n\n\n\nMore verbose end-of-day logging;\n\n\n\n\n\n\nReload multiple authenticated HDBs after end-of-day;\n\n\n\n\n\n\nEnd-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay\n\n\n\n\n\n\nSee the top of the file for more information.\n\n\n\n\nWrite Database (WDB)\n\n\nThe Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q:\n\n\n\n\n\n\nProvides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting;\n\n\n\n\n\n\nGreater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options;\n\n\n\n\n\n\nUse of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes;\n\n\n\n\n\n\nChecks whether to persist data to disk on a timer rather than on\n each tick;\n\n\n\n\n\n\nInforms other RDB, HDB and GW processes that end of day save and\n sort has completed;\n\n\n\n\n\n\nMore log information supplied.\n\n\n\n\n\n\nThe WDB process can broken down into two main functions:\n\n\n\n\n\n\nPeriodically saving data to disk and\n\n\n\n\n\n\nSorting data at end of day\n\n\n\n\n\n\nThe WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day).\n\n\nThe behaviour of the WDB process is controlled by the \n.wdb.mode\n\nparameter. This should be set to one of following three values:\n\n\n\n\n\n\nsaveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc.\n\n\n\n\n\n\nsave - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data\n\n\n\n\n\n\nsort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes\n\n\n\n\n\n\nWhen running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data.\n\n\nThe wdb process provides two methods for persisting data to disk and\nsorting at the end of the day.\n\n\n\n\n\n\ndefault - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to.\n\n\n\n\n\n\npartbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory.\n\n\nAt the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters.\n\n\n\n\n\n\nThe optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.\n\n\n\n\nTickerplant Log Replay\n\n\nThe Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for:\n\n\n\n\n\n\nhandling end of day save down failures;\n\n\n\n\n\n\nhandling large volumes of data (larger than can fit into RAM).\n\n\n\n\n\n\nThe process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can:\n\n\n\n\n\n\nreplay specific message ranges;\n\n\n\n\n\n\nreplay in manageable message chunks;\n\n\n\n\n\n\nrecover as many messages as possible from a log file rather than\n just stopping at the first bad message;\n\n\n\n\n\n\nignore specific tables;\n\n\n\n\n\n\nmodify the tables before or after they are saved;\n\n\n\n\n\n\napply sorting and parting after all the data is written out.\n\n\n\n\n\n\nThe process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be:\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1\n\n\n\nThe tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage.\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage\n\n\n\n\n\nHousekeeping\n\n\nThe housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process:\n\n\n\n\n\n\nAllows for removing and zipping of directory files;\n\n\n\n\n\n\nProvides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter;\n\n\n\n\n\n\nReads all tasks from a single CSV;\n\n\n\n\n\n\nRuns on a user defined timer;\n\n\n\n\n\n\nCan be run immediately from command line or within the process;\n\n\n\n\n\n\nCan be easily extended to include new user defined housekeeping\n tasks.\n\n\n\n\n\n\nThe process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings:\n\n\n\n\n\n\nFunction details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping);\n\n\n\n\n\n\nPath specifies the directory that the files are in;\n\n\n\n\n\n\nMatch provides the search string to the find function, files\n returned will have names that match this string;\n\n\n\n\n\n\nExclude provides a second string to the find function, and these\n files are excluded from the match list;\n\n\n\n\n\n\nAge is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days).\n\n\n\n\n\n\nAn example csv file would be:\n\n\nfunction,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3\n\n\n\nThe process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror.\n\n\nThe remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv.\n\n\nAs well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion.\n\n\nHousekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag:\n\n\nq torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage\n\n\n\n\n\nFile Alerter\n\n\nThe file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can:\n\n\n\n\n\n\nrun more than one function on the specified file.\n\n\n\n\n\n\noptionally move the file to a new directory after running the\n function.\n\n\n\n\n\n\nstore a table of files that have already been processed.\n\n\n\n\n\n\nrun the function only on new files or run it every time the file is\n modified.\n\n\n\n\n\n\nignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified.\n\n\n\n\n\n\nThe file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows.\n\n\ninputcsv\n - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv.\n\n\npolltime\n - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute.\n\n\nalreadyprocessed\n - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran.\n\n\nskipallonstart\n - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0.\n\n\nThe files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow.\n\n\npath\n - This is the path to the directory that will be scanned for\nthe file.\n\n\nmatch\n - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d.\n\n\nfunction\n - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non.\n\n\nnewonly\n - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified.\n\n\nmovetodirectory\n - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved.\n\n\nIt is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like:\n\n\npath,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\"\n\n\n\nThe file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files.\n\n\nAfter the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it.\n\n\nThe file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be:\n\n\ncopy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"}\n\n\n\nAlthough the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session.\n\n\nEach stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner.\n\n\nThe file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.\n\n\n\n\nReporter\n\n\nOverview\n\n\nThe reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers.\n\n\n\n\nFeatures:\n\n\n\n\n\n\nEasily create a report for information that you want;\n\n\n\n\n\n\nFully customizable scheduling such as start time, end time and days\n of the week;\n\n\n\n\n\n\nRun reports repeatedly with a custom period between them;\n\n\n\n\n\n\nAsynchronous querying with custom timeout intervals;\n\n\n\n\n\n\nInbuilt result handlers allow reports to be written to file or\n published;\n\n\n\n\n\n\nCustom result handlers can be defined;\n\n\n\n\n\n\nLogs each step of the report process;\n\n\n\n\n\n\nFully integrated with the TorQ gateway to allow reports to be run\n across backend processes.\n\n\n\n\n\n\nThe reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table.\n\n\nTo run the reporter process:\n\n\nq torq.q -load code/processes/reporter.q -p 20004\n\n\n\nOnce the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.\n\n\nReport Configuration\n\n\nBy default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema.\n\n\n\n\n\n\n\n\nColumn Header\n\n\nDescription and Example\n\n\n\n\n\n\n\n\n\n\nname\n\n\nReport name e.g. Usage\n\n\n\n\n\n\nquery\n\n\nQuery to be evaluated on that process. It can be a string query or function\n\n\n\n\n\n\nresulthandler\n\n\nResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d]\n\n\n\n\n\n\ngateway\n\n\nIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway\n\n\n\n\n\n\njoinfunction\n\n\nUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze\n\n\n\n\n\n\nproctype\n\n\nThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb\n\n\n\n\n\n\nprocname\n\n\nThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1\n\n\n\n\n\n\nstart\n\n\nTime on that day to start at e.g. 12:00\n\n\n\n\n\n\nend\n\n\nTime on that day that the report will stop at e.g. 23:00\n\n\n\n\n\n\nperiod\n\n\nThe period between each report query e.g. 00:00:10\n\n\n\n\n\n\ntimeoutinterval\n\n\nThe amount of time the reporter waits before timing out a report e.g. 00:00:30\n\n\n\n\n\n\ndaysofweek\n\n\nNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday\n\n\n\n\n\n\n\n\nWhen running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load.\n\n\nListing [code:csvschema] shows an example of the schema needed in the\ninput csv file.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6\n\n\n\nResult Handlers\n\n\nThere are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query).\n\n\nwritetofiletype\n - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be \nusage_rdb_2014_01_02_15_00_12.txt\n e.g.\n\n\nwritetofiletype[\"./output/\";\"usage\";\"csv\"]\n\n\n\nsplaytable\n - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g.\n\n\nsplaytable[\"./output/\";\"usage\"]\n\n\n\nemailalert\n - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions.\n\n\nemailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")]\n\n\n\nemailreport\n - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed.\n\n\nemailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"]\n\n\n\npublishresult\n - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.\n\n\nReport Process Tracking\n\n\nEach step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. \n\n\n\n\n\n\n\n\nStage symbol\n\n\nExplanation\n\n\n\n\n\n\n\n\n\n\nR\n\n\nThe query is currently running\n\n\n\n\n\n\nE\n\n\nAn error has occurred during the query\n\n\n\n\n\n\nC\n\n\nThe query has been completed with no errors\n\n\n\n\n\n\nT\n\n\nThe query has exceeded the timeout interval\n\n\n\n\n\n\nS\n\n\nSystem message e.g. \u201cReporter Process Initialised\u201d\n\n\n\n\n\n\n\n\ntime | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"\n\n\n\nSubscribing for Results\n\n\nTo publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol.\n\n\n/- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)\n\n\n\nExample reports\n\n\nThe following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the \n.Q.w[]\n information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6\n\n\n\n\n\nMonitor\n\n\nThe Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived.\n\n\nRun it with:\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001\n\n\n\nIt is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded.\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap\n\n\n\nThe current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg\n\n\nq)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"\n\n\n\nHTML5 front end\n\n\nA HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include:\n\n\n\n\n\n\nHeartbeat table with processes that have warnings highlighted in\n orange and errors in red\n\n\n\n\n\n\nLog message table displaying the last 30 errors\n\n\n\n\n\n\nLog message error chart that is by default displayed in 5 minute\n bins\n\n\n\n\n\n\nChart\u2019s bin value can be changed on the fly\n\n\n\n\n\n\nResponsive design so works on all main devices i.e. phones, tablets\n and desktop\n\n\n\n\n\n\nIt is accessible by going to the url \nhttp://HOST:PORT/.non?monitorui\n\n\n\n\nCompression\n\n\nThe compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify\n\n\n\n\n\n\nthe compression configuration file to use\n\n\n\n\n\n\nthe database directory to compress\n\n\n\n\n\n\nthe maximum age of data to attempt to compress\n\n\n\n\n\n\nwhether the process should exit upon completion\n\n\n\n\n\n\nThe process is run like other TorQ processes:\n\n\nq torq.q -load code/processes/compression.q -p 20005\n\n\n\nModify the settings file or override variables from the command line as\nappropriate.\n\n\n\n\nKill\n\n\nThe kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way.\n\n\nIf run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable.\n\n\nq torq.q -load code/processes/kill.q -p 20000\n\n\n\n.servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable):\n\n\nq torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant\n\n\n\nThe kill process can also be used to kill only specific named processes\nwithin the process types:\n\n\nq torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2\n\n\n\n\n\nChained Tickerplant\n\n\nIn tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis.\n\n\nThe chained tickerplant can:\n\n\n\n\n\n\nsubscribe to specific tables and syms\n\n\n\n\n\n\nbatch publish at an interval or publish tick by tick\n\n\n\n\n\n\ncreate a tickerplant log that its real time subscribers can replay\n\n\n\n\n\n\nreplay the source tickerplant log\n\n\n\n\n\n\nTo launch the chained tickerplant\n\n\nq torq.q -load code/processes/chainedtp.q -p 12009\n\n\n\nChained tickerplant settings are found in \nconfig/settings/chainedtp.q\n\nand are under the \n.ctp\n namespace.\n\n\n\n\n\n\n\n\nSetting\n\n\nExplanation\n\n\nDefault\n\n\n\n\n\n\n\n\n\n\ntickerplantname\n\n\nlist of tickerplant names to try and make a connection to\n\n\n`tickerplant1\n\n\n\n\n\n\npubinterval\n\n\npublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick\n\n\n0D00:00:00\n\n\n\n\n\n\ntpconnsleep\n\n\nnumber of seconds between attempts to connect to the source tickerplant\n\n\n10\n\n\n\n\n\n\ncreatelogfile\n\n\ncreate a log file\n\n\n0b\n\n\n\n\n\n\nlogdir\n\n\ndirectory containing chained tickerplant logs\n\n\n`:hdb\n\n\n\n\n\n\nsubscribeto\n\n\nsubscribe to these tables only (null for all)\n\n\n`\n\n\n\n\n\n\nsubscribesyms\n\n\nsubscribe to these syms only (null for all)\n\n\n`\n\n\n\n\n\n\nreplay\n\n\nreplay the tickerplant log file\n\n\n0b\n\n\n\n\n\n\nschema\n\n\nretrieve schema from tickerplant\n\n\n1b\n\n\n\n\n\n\nclearlogonsubscription\n\n\nclear log on subscription, only called if createlogfile is also enabled\n\n\n0b\n\n\n\n\n\n\n\n\n\n\nIntegration with kdb+tick\n\n\nAquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", - "title": "Processes" - }, - { - "location": "/Processes/#processes", - "text": "A set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is: aquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1", - "title": "Processes" - }, - { - "location": "/Processes/#discovery-service", - "text": "", - "title": "Discovery Service" - }, - { - "location": "/Processes/#overview", - "text": "Processes use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections. The discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery. To run the discovery service, use a start line such as: aquaq $ q torq.q -load code/processes/discovery.q -p 9995 Modify the configuration as required.", - "title": "Overview" - }, - { - "location": "/Processes/#operation", - "text": "Processes register with the discovery service. Processes use the discovery service to locate other processes. When new services register, any processes which have registered an\n interest in that process type are notified.", - "title": "Operation" - }, - { - "location": "/Processes/#available-processes", - "text": "The list of available processes can be found in the .servers.SERVERS\ntable. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()", - "title": "Available Processes" - }, - { - "location": "/Processes/#gateway", - "text": "A synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.", - "title": "Gateway" - }, - { - "location": "/Processes/#asynchronous-behaviour", - "text": "Asynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens: the query is placed in a queue; the list of available servers is retrieved; the queue is prioritised, so those queries with higher priority are\n serviced first; queries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query; when all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client. The two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc. An asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.", - "title": "Asynchronous Behaviour" - }, - { - "location": "/Processes/#synchronous-behaviour", - "text": "When using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.", - "title": "Synchronous Behaviour" - }, - { - "location": "/Processes/#process-discovery", - "text": "The gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.", - "title": "Process Discovery" - }, - { - "location": "/Processes/#error-handling", - "text": "When synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when: the client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately); the query is timed out; a back end server returns an error; a back end server fails; the join function fails. If postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).", - "title": "Error Handling" - }, - { - "location": "/Processes/#client-calls", - "text": "There are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details. Function Description .gw.syncexec[query; servertypes] Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed. .gw.syncexecj[query; servertypes; joinfunction] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. .gw.asyncexec[query; servertypes] Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results. .gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded. For the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it. q).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk Both the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB. q)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017 Run the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line. q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb Start a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds. q)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009 If a query is done for a server type which is not registered, an error\nis returned: q)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other Custom join functions can be specified: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1 Custom joins can fail with appropriate errors: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b Asynchronous queries must be sent in async and blocked: q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq) We can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time. q)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003 Alternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function. q)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016 Asynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required. q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550", - "title": "Client Calls" - }, - { - "location": "/Processes/#non-kdb-clients", - "text": "All the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the Java Grid\nViewer : import java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n} Some of the unofficially supported APIs may only allow synchronous calls\nto be made.", - "title": "Non kdb+ Clients" - }, - { - "location": "/Processes/#real-time-database-rdb", - "text": "The Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include: Tickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file; Automatic re-connection and resubscription to tickerplant; List of tables to subscribe to supplied as configuration setting; More pre-built flexibility in end-of-day; More verbose end-of-day logging; Reload multiple authenticated HDBs after end-of-day; End-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay See the top of the file for more information.", - "title": "Real Time Database (RDB)" - }, - { - "location": "/Processes/#write-database-wdb", - "text": "The Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q: Provides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting; Greater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options; Use of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes; Checks whether to persist data to disk on a timer rather than on\n each tick; Informs other RDB, HDB and GW processes that end of day save and\n sort has completed; More log information supplied. The WDB process can broken down into two main functions: Periodically saving data to disk and Sorting data at end of day The WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day). The behaviour of the WDB process is controlled by the .wdb.mode \nparameter. This should be set to one of following three values: saveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc. save - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data sort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes When running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data. The wdb process provides two methods for persisting data to disk and\nsorting at the end of the day. default - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to. partbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory. At the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters. The optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.", - "title": "Write Database (WDB)" - }, - { - "location": "/Processes/#tickerplant-log-replay", - "text": "The Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for: handling end of day save down failures; handling large volumes of data (larger than can fit into RAM). The process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can: replay specific message ranges; replay in manageable message chunks; recover as many messages as possible from a log file rather than\n just stopping at the first bad message; ignore specific tables; modify the tables before or after they are saved; apply sorting and parting after all the data is written out. The process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be: q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1 The tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage. q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage", - "title": "Tickerplant Log Replay" - }, - { - "location": "/Processes/#housekeeping", - "text": "The housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process: Allows for removing and zipping of directory files; Provides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter; Reads all tasks from a single CSV; Runs on a user defined timer; Can be run immediately from command line or within the process; Can be easily extended to include new user defined housekeeping\n tasks. The process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings: Function details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping); Path specifies the directory that the files are in; Match provides the search string to the find function, files\n returned will have names that match this string; Exclude provides a second string to the find function, and these\n files are excluded from the match list; Age is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days). An example csv file would be: function,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3 The process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror. The remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv. As well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion. Housekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag: q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage", - "title": "Housekeeping" - }, - { - "location": "/Processes/#file-alerter", - "text": "The file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can: run more than one function on the specified file. optionally move the file to a new directory after running the\n function. store a table of files that have already been processed. run the function only on new files or run it every time the file is\n modified. ignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified. The file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows. inputcsv - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv. polltime - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute. alreadyprocessed - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran. skipallonstart - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0. The files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow. path - This is the path to the directory that will be scanned for\nthe file. match - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d. function - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non. newonly - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified. movetodirectory - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved. It is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like: path,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\" The file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files. After the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it. The file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be: copy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"} Although the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session. Each stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner. The file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.", - "title": "File Alerter" - }, - { - "location": "/Processes/#reporter", - "text": "", - "title": "Reporter" - }, - { - "location": "/Processes/#overview_1", - "text": "The reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers. Features: Easily create a report for information that you want; Fully customizable scheduling such as start time, end time and days\n of the week; Run reports repeatedly with a custom period between them; Asynchronous querying with custom timeout intervals; Inbuilt result handlers allow reports to be written to file or\n published; Custom result handlers can be defined; Logs each step of the report process; Fully integrated with the TorQ gateway to allow reports to be run\n across backend processes. The reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table. To run the reporter process: q torq.q -load code/processes/reporter.q -p 20004 Once the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.", - "title": "Overview" - }, - { - "location": "/Processes/#report-configuration", - "text": "By default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema. Column Header Description and Example name Report name e.g. Usage query Query to be evaluated on that process. It can be a string query or function resulthandler Result handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d] gateway If non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway joinfunction Used to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze proctype The type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb procname The name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1 start Time on that day to start at e.g. 12:00 end Time on that day that the report will stop at e.g. 23:00 period The period between each report query e.g. 00:00:10 timeoutinterval The amount of time the reporter waits before timing out a report e.g. 00:00:30 daysofweek Numeric value required for the day of the week. Where 0 is Saturday and 2 is Monday When running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load. Listing [code:csvschema] shows an example of the schema needed in the\ninput csv file. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6", - "title": "Report Configuration" - }, - { - "location": "/Processes/#result-handlers", - "text": "There are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query). writetofiletype - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be usage_rdb_2014_01_02_15_00_12.txt e.g. writetofiletype[\"./output/\";\"usage\";\"csv\"] splaytable - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g. splaytable[\"./output/\";\"usage\"] emailalert - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions. emailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")] emailreport - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed. emailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"] publishresult - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.", - "title": "Result Handlers" - }, - { - "location": "/Processes/#report-process-tracking", - "text": "Each step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. Stage symbol Explanation R The query is currently running E An error has occurred during the query C The query has been completed with no errors T The query has exceeded the timeout interval S System message e.g. \u201cReporter Process Initialised\u201d time | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"", - "title": "Report Process Tracking" - }, - { - "location": "/Processes/#subscribing-for-results", - "text": "To publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol. /- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)", - "title": "Subscribing for Results" - }, - { - "location": "/Processes/#example-reports", - "text": "The following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the .Q.w[] information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6", - "title": "Example reports" - }, - { - "location": "/Processes/#monitor", - "text": "The Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived. Run it with: aquaq $ q torq.q -load code/processes/monitor.q -p 20001 It is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded. aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap The current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg q)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"", - "title": "Monitor" - }, - { - "location": "/Processes/#html5-front-end", - "text": "A HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include: Heartbeat table with processes that have warnings highlighted in\n orange and errors in red Log message table displaying the last 30 errors Log message error chart that is by default displayed in 5 minute\n bins Chart\u2019s bin value can be changed on the fly Responsive design so works on all main devices i.e. phones, tablets\n and desktop It is accessible by going to the url http://HOST:PORT/.non?monitorui", - "title": "HTML5 front end" - }, - { - "location": "/Processes/#compression", - "text": "The compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify the compression configuration file to use the database directory to compress the maximum age of data to attempt to compress whether the process should exit upon completion The process is run like other TorQ processes: q torq.q -load code/processes/compression.q -p 20005 Modify the settings file or override variables from the command line as\nappropriate.", - "title": "Compression" - }, - { - "location": "/Processes/#kill", - "text": "The kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way. If run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable. q torq.q -load code/processes/kill.q -p 20000 .servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable): q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant The kill process can also be used to kill only specific named processes\nwithin the process types: q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2", - "title": "Kill" - }, - { - "location": "/Processes/#chained-tickerplant", - "text": "In tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis. The chained tickerplant can: subscribe to specific tables and syms batch publish at an interval or publish tick by tick create a tickerplant log that its real time subscribers can replay replay the source tickerplant log To launch the chained tickerplant q torq.q -load code/processes/chainedtp.q -p 12009 Chained tickerplant settings are found in config/settings/chainedtp.q \nand are under the .ctp namespace. Setting Explanation Default tickerplantname list of tickerplant names to try and make a connection to `tickerplant1 pubinterval publish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick 0D00:00:00 tpconnsleep number of seconds between attempts to connect to the source tickerplant 10 createlogfile create a log file 0b logdir directory containing chained tickerplant logs `:hdb subscribeto subscribe to these tables only (null for all) ` subscribesyms subscribe to these syms only (null for all) ` replay replay the tickerplant log file 0b schema retrieve schema from tickerplant 1b clearlogonsubscription clear log on subscription, only called if createlogfile is also enabled 0b", - "title": "Chained Tickerplant" - }, - { - "location": "/Processes/#integration-with-kdbtick", - "text": "AquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", - "title": "Integration with kdb+tick" - }, - { - "location": "/visualisation/", - "text": "Visualisation\n\n\nkdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.\n\n\n\n\nkdb+ Utilities\n\n\nThe server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes:\n\n\n\n\n\n\njson.k provides two way conversion between kdb+ data structures and\n JSON;\n\n\n\n\n\n\nu.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript;\n\n\n\n\n\n\nfunctions for reformatting temporal types to be JSON compliant;\n\n\n\n\n\n\npage serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.\n\n\n\n\n\n\n\n\nJavaScript Utilities\n\n\nThe JavaScript utilities are contained in kdbconnect.js. The library\nallows you to:\n\n\n\n\n\n\ncreate a connection to the kdb+ process;\n\n\n\n\n\n\ndisplay the socket status;\n\n\n\n\n\n\nsending queries;\n\n\n\n\n\n\nbinding results returned from kdb+ to updates in the webpage.\n\n\n\n\n\n\n\n\nOutline\n\n\nAll communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form:\n\n\n`name`data!(\"dataID\";dataObject)\n\n\n\nAll the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap.\n\n\nq)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nWe have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like:\n\n\n`name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))\n\n\n\nThis can be packed with .html.updformat:\n\n\nq).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nTo utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using\n\n\n.html.wssub[`tablename]\n\n\n\nPublications from the kdb+ side are done with\n\n\n.html.pub[`tablename;tabledata]\n\n\n\nOn the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data.\n\n\n/* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nSimilarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different:\n\n\nKDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nTo display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status.\n\n\n// Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected.\n\n\n\nErrors can be displayed by binding the event called \u201cerror\u201d.\n\n\nKDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});\n\n\n\n\n\nExample\n\n\nA basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.\n\n\n\n\nFurther Work\n\n\nFurther work planned includes:\n\n\n\n\n\n\nallow subscriptions on a key basis- currently all subscribers\n receive all updates;\n\n\n\n\n\n\nadd JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table;\n\n\n\n\n\n\nallow multiple websocket connections to be maintained at the same\n time.", - "title": "Visualisation" - }, - { - "location": "/visualisation/#visualisation", - "text": "kdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.", - "title": "Visualisation" - }, - { - "location": "/visualisation/#kdb-utilities", - "text": "The server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes: json.k provides two way conversion between kdb+ data structures and\n JSON; u.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript; functions for reformatting temporal types to be JSON compliant; page serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.", - "title": "kdb+ Utilities" - }, - { - "location": "/visualisation/#javascript-utilities", - "text": "The JavaScript utilities are contained in kdbconnect.js. The library\nallows you to: create a connection to the kdb+ process; display the socket status; sending queries; binding results returned from kdb+ to updates in the webpage.", - "title": "JavaScript Utilities" - }, - { - "location": "/visualisation/#outline", - "text": "All communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form: `name`data!(\"dataID\";dataObject) All the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap. q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a We have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like: `name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14))) This can be packed with .html.updformat: q).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a To utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using .html.wssub[`tablename] Publications from the kdb+ side are done with .html.pub[`tablename;tabledata] On the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data. /* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); Similarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different: KDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); To display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status. // Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected. Errors can be displayed by binding the event called \u201cerror\u201d. KDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});", - "title": "Outline" - }, - { - "location": "/visualisation/#example", - "text": "A basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.", - "title": "Example" - }, - { - "location": "/visualisation/#further-work", - "text": "Further work planned includes: allow subscriptions on a key basis- currently all subscribers\n receive all updates; add JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table; allow multiple websocket connections to be maintained at the same\n time.", - "title": "Further Work" - } - ] -} \ No newline at end of file diff --git a/site/sitemap.xml b/site/sitemap.xml deleted file mode 100644 index dc8593544..000000000 --- a/site/sitemap.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - / - 2017-01-12 - daily - - - - - - /Overview/ - 2017-01-12 - daily - - - - - - /gettingstarted/ - 2017-01-12 - daily - - - - - - /utilities/ - 2017-01-12 - daily - - - - - - /handlers/ - 2017-01-12 - daily - - - - - - /conn/ - 2017-01-12 - daily - - - - - - /Processes/ - 2017-01-12 - daily - - - - - - /visualisation/ - 2017-01-12 - daily - - - - \ No newline at end of file diff --git a/site/utilities/index.html b/site/utilities/index.html deleted file mode 100644 index c663c3aa3..000000000 --- a/site/utilities/index.html +++ /dev/null @@ -1,1423 +0,0 @@ - - - - - - - - - - - - Utilities - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- - -
-
- -

-

Utilities

-

We have provided several utility scripts, which either implement -developer aids or standard operations which are useful across processes.

-

-

api.q

-

This provides a mechanism for documenting and publishing -function/variable/table or view definitions within the kdb+ process. It -provides a search facility both by name and definition (in the case of -functions). There is also a function for returning the approximate -memory usage of each variable in the process in descending order.

-

Definitions are added using the .api.add function. A variable can be -marked as public or private, and given a description, parameter list and -return type. The search functions will return all the values found which -match the pattern irrespective of them having a pre-defined definition.

-

Whether a value is public or private is defined in the definitions -table. If not found then by default all values are private, except those -which live in the .q or top level namespace.

-

.api.f is used to find a function, variable, table or view based on a -case-insensitive pattern search. If a symbol parameter is supplied, a -wildcard search of *[suppliedvalue]* is done. If a string is -supplied, the value is used as is, meaning other non-wildcard regex -pattern matching can be done.

-

-    q).api.f`max                                                                                                                                                                                                                    
-    name                | vartype   namespace public descrip             ..
-    --------------------| -----------------------------------------------..
-    maxs                | function  .q        1      ""                  ..
-    mmax                | function  .q        1      ""                  ..
-    .clients.MAXIDLE    | variable  .clients  0      ""                  ..
-    .access.MAXSIZE     | variable  .access   0      ""                  ..
-    .cache.maxsize      | variable  .cache    1      "The maximum size in..
-    .cache.maxindividual| variable  .cache    1      "The maximum size in..
-    max                 | primitive           1      ""                  ..
-    q).api.f"max*"                                                                                                                                                                                                                  
-    name| vartype   namespace public descrip params return
-    ----| ------------------------------------------------
-    maxs| function  .q        1      ""      ""     ""    
-    max | primitive           1      ""      ""     ""    
-
-
- -

.api.p is the same as .api.f, but only returns public functions. .api.u -is as .api.p, but only includes user defined values i.e. it excludes q -primitives and values found in the .q, .Q, .h and .o namespaces. -.api.find is a more general version of .api.f which can be used to do -case sensitive searches.

-

.api.s is used to search function definitions for specific values.

-
q).api.s"*max*"                                                                                                                                                                                                                 
-function            definition                                       ..
----------------------------------------------------------------------..
-.Q.w                "k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\"..
-.clients.cleanup    "{if[count w0:exec w from`.clients.clients where ..
-.access.validsize   "{[x;y;z] $[superuser .z.u;x;MAXSIZE>s:-22!x;x;'\..
-.servers.getservers "{[nameortype;lookups;req;autoopen;onlyone]\n r:$..
-.cache.add          "{[function;id;status]\n \n res:value function;\n..
-
-

.api.m is used to return the approximate memory usage of variables and -views in the process, retrieved using -22!. Views will be re-evaluated -if required. Use .api.mem[0b] if you do not want to evaluate and -return views.

-
q).api.m[]                                                                                                                                                                                                                      
-variable          size    sizeMB
---------------------------------
-.tz.t             1587359 2     
-.help.TXT         15409   0     
-.api.detail       10678   0     
-.proc.usage       3610    0     
-.proc.configusage 1029    0     
-..
-
-

.api.whereami[lambda] can be used to retrieve the name of a function -given its definition. This can be useful in debugging.

-
q)g:{x+y}                                                                                                                                                                                                                                                                     
-q)f:{20 + g[x;10]}                                                                                                                                                                                                                                                            
-q)f[10]                                                                                                                                                                                                                                                                       
-40
-q)f[`a]                                                                                                                                                                                                                                                                       
-{x+y}
-`type
-+
-`a
-10
-q)).api.whereami[.z.s]                                                                                                                                                                                                                                                        
-`..g
-
-

-

timer.q

-

kdb+ provides a single timer function, .z.ts which is triggered with the -frequency specified by -t. We have provided an extension to allow -multiple functions to be added to the timer and fired when required. The -basic concept is that timer functions are registered in a table, with -.z.ts periodically checking the table and running whichever functions -are required. This is not a suitable mechanism where very high frequency -timers are required (e.g. sub 500ms).

-

There are two ways a function can be added to a timer- either as a -repeating timer, or to fire at a specific time. When a repeating timer -is specified, there are three options as to how the timer can be -rescheduled. Assuming that a timer function with period P is scheduled -to fire at time T0, actually fires at time T1 and finishes at time T2, -then

-
    -
  • -

    mode 0 will reschedule for T0+P;

    -
  • -
  • -

    mode 1 will reschedule for T1+P;

    -
  • -
  • -

    mode 2 will reschedule for T2+P.

    -
  • -
-

Both mode 0 and mode 1 have the potential for causing the timer to back -up if the finish time T2 is after the next schedule time. See -.api.p“.timer.*”for more details.

-

-

async.q

-

kdb+ processes can communicate with each using either synchronous or -asynchronous calls. Synchronous calls expect a response and so the -server must process the request when it is received to generate the -result and return it to the waiting client. Asynchronous calls do not -expect a response so allow for greater flexibility. The effect of -synchronous calls can be replicated with asynchronous calls in one of -two ways (further details in section gateway):

-
    -
  • -

    deferred synchronous: the client sends an async request, then blocks - on the handle waiting for the result. This allows the server more - flexibility as to how and when the query is processed;

    -
  • -
  • -

    asynchronous postback: the client sends an async request which is - wrapped in a function to be posted back to the client when the - result is ready. This allows the server flexibility as to how and - when the query is processed, and allows the client to continue - processing while the server is generating the result.

    -
  • -
-

The code for both of these can get a little tricky, largely due to the -amount of error trapping required. We have provided two functions to -allow these methods to be used more easily. .async.deferred takes a list -of handles and a query, and will return a two item list of -(success;results).

-
q).async.deferred[3 5;({system"sleep 1";system"p"};())]                                                                                                                                                                                     
-1    1   
-9995 9996
-q).async.deferred[3 5;({x+y};1;2)]                                                                                                                                                                                                          
-1 1
-3 3
-q).async.deferred[3 5;({x+y};1;`a)]                                                                                                                                                                                                         
-0                         0                        
-"error: server fail:type" "error: server fail:type"
-q).async.deferred[3 5 87;({system"sleep 1";system"p"};())]                                                                                                                                                                                  
-1     1     0                                       
-9995i 9996i "error: comm fail: failed to send query"
-
-

.async.postback takes a list of handles, a query, and the name or lambda -of the postback function to return the result to. It will immediately -return a success vector, and the results will be posted back to the -client when ready.

-
q).async.postback[3 5;({system"sleep 1";system"p"};());`showresult]                                                                                                                                                                         
-11b
-q)                                                                                                                                                                                                                                          
-q)9995i
-9996i
-
-q).async.postback[3 5;({x+y};1;2);`showresult]                                                                                                                                                                                              
-11b
-q)3
-3
-
-q).async.postback[3 5;({x+y};1;`a);`showresult]                                                                                                                                                                                             
-11b
-q)"error: server fail:type"
-"error: server fail:type"
-
-q).async.postback[3 5;({x+y};1;`a);showresult]                                                                                                                                                                                              
-11b
-q)"error: server fail:type"
-"error: server fail:type"
-
-q).async.postback[3 5 87;({x+y};1;2);showresult]                                                                                                                                                                                            
-110b
-q)3
-3
-
-

For more details, see .api.p“.async.*”.

-

-

cache.q

-

cache.q provides a mechanism for storing function results in a cache and -returning them from the cache if they are available and non stale. This -can greatly boost performance for frequently run queries.

-

The result set cache resides in memory and as such takes up space. It is -up to the programmer to determine which functions are suitable for -caching. Likely candidates are those where some or all of the following -conditions hold:

-
    -
  • -

    the function is run multiple times with the same parameters (perhaps - different clients all want the same result set);

    -
  • -
  • -

    the result set changes infrequently or the clients can accept - slightly out-of-date values;

    -
  • -
  • -

    the result set is not too large and/or is relatively expensive to - produce. For example, it does not make sense to cache raw data - extracts.

    -
  • -
-

The cache has a maximum size and a minimum size for any individual -result set, both of which are defined in the configuration file. Size -checks are done with -22! which will give an approximation (but -underestimate) of the result set size. In the worst case the estimate -could be half the size of the actual size.

-

If a new result set is to be cached, the size is checked. Assuming it -does not exceed the maximum individual size then it is placed in the -cache. If the new cache size would exceed the maximum allowed space, -other result sets are evicted from the cache. The current eviction -policy is to remove the least recently accessed result sets until the -required space is freed. The cache performance is tracked in a table. -Cache adds, hits, fails, reruns and evictions are monitored.

-

The main function to use the cache is .cache.execute[function; -staletime]. If the function has been executed within the last -staletime, then the result is returned from the cache. Otherwise the -function is executed and placed in the cache.

-

The function is run and the result placed in the cache:

-
q)\t r:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                     
-2023
-q)r                                                                                                                                                                                                                             
-3
-
-

The second time round, the result set is returned immediately from the -cache as we are within the staletime value:

-
q)\t r1:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                    
-0
-q)r1                                                                                                                                                                                                                            
-3
-
-

If the time since the last execution is greater than the required stale -time, the function is re-run, the cached result is updated, and the -result returned:

-
q)\t r2:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:00]                                                                                                                                                                    
-2008
-q)r2                                                                                                                                                                                                                            
-3
-
-

The cache performance is tracked:

-
q).cache.getperf[]                                                                                                                                                                                                              
-time                          id status function                  
-------------------------------------------------------------------
-2013.11.06D12:41:53.103508000 2  add    {system"sleep 2"; x+y} 1 2
-2013.11.06D12:42:01.647731000 2  hit    {system"sleep 2"; x+y} 1 2
-2013.11.06D12:42:53.930404000 2  rerun  {system"sleep 2"; x+y} 1 2
-
-

See .api.p.cache.*for more details.

-

-

email.q

-

A library file is provided to allow TorQ processes to send emails using -an SMTP server. This is a wrapper around the standard libcurl library. -The library file is currently available for Windows (32 bit), Linux (32 -and 64 bit) and OSX (32 and 64 bit). The associated q script contains -two main methods for creating a connection and sending emails. The email -library requires a modification to the path to find the required libs - -see the top of email.q for details.

-

The main connection method .email.connect takes a single dictionary -parameter and returns 0i for success and -1i for failure.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterReqTypeDescription
urlYsymbolURL of mail server e.g. smtp://mail.example.com
userYsymbolUsername of user to login as
passwordYsymbolPassword for user
usesslNbooleanConnect using SSL/TLS, defaults to false
fromNsymbolEmail from field, defaults to torq@aquaq.co.uk
debugNintegerDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1
-

An example is:

-
q).email.connect[`url`user`password`from`usessl`debug!(`$"smtp://mail.example.com:80";`$"torquser@aquaq.co.uk";`hello;`$"torquser@aquaq.co.uk";0b;1i)]
-02 Jan 2015 11:45:19   emailConnect: url is set to smtp://mail.example.com:80
-02 Jan 2015 11:45:19   emailConnect: user is set to torquser@aquaq.co.uk
-02 Jan 2015 11:45:19   emailConnect: password is set
-02 Jan 2015 11:45:19   emailConnect: from is set torquser@aquaq.co.uk
-02 Jan 2015 11:45:19   emailConnect: trying to connect
-02 Jan 2015 11:45:19   emailConnect: connected, socket is 5
-0i
-
-

The email sending function .email.send takes a single dictionary -parameter containing the details of the email to send. A connection must -be established before an email can be sent. The send function returns an -integer of the email length on success, or -1 on failure.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterReqTypeDescription
toYsymbol (list)addresses to send to
subjectYchar listemail subject
bodyYlist of char listsemail body
ccNsymbol (list)cc list
bodyTypeNsymboltype of email body. Can be `text or `html. Default is `text
debugNintegerDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1
-

An example is:

-
q).email.send[`to`subject`body`debug!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq");1i)]
-02 Jan 2015 12:39:29   sending email with subject: test email
-02 Jan 2015 12:39:29   email size in bytes is 16682
-02 Jan 2015 12:39:30   emailSend: email sent
-16682i
-
-

Note that if emails are sent infrequently the library must re-establish -the connection to the mail server (this will be done automatically after -the initial connection). In some circumstances it may be better to batch -emails together to send, or to offload email sending to separate -processes as communication with the SMTP server can take a little time.

-

Two further functions are available, .email.connectdefault and -.email.senddefault. These are as above but will use the default -configuration defined within the configuration files as the relevant -parameters passed to the methods. In addition, .email.senddefault will -automatically establish a connection.

-
q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq"))]
-2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email
-2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful
-2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent
-16673i
-q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq"))]
-2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
-2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
-16675i
-q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq");`"$/home/ashortt/example.txt")]
-2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
-2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
-47338i
-
-

.email.test will attempt to establish a connection to the default -configured email server and send a test email to the specified address. -debug should be set to 2i (verbose) to extract the full information.

-
q).email.debug:2i
-q).email.test `$"test@aquaq.co.uk"
-...
-
-

Additionally functions are available within the email library. See -.api.p.email.*for more details.

-

Emails with SSL certificates from Windows

-

If you wish to send emails via an account which requires authentication -from Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps -as usessl must be true and Windows does not usually find the correct -certificate. The steps are:

-
    -
  • -

    download - this - and save it to your PC

    -
  • -
  • -

    set

    -
      CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt
    -
    -
  • -
-

More information is available -here -and here

-

-

timezone.q

-

A slightly customised version of the timezone conversion functionality -from code.kx. It loads a table of timezone information from -$KDBCONFIG. See .api.p.tz.*for more details.

-

-

compress.q

-

compress.q applies compression to any kdb+ database, handles all -partition types including date, month, year, int, and can deal with top -level splayed tables. It will also decompress files as required. Once -the compression/decompression is complete, summary statistics are -returned, with detailed statistics for each compressed or decompressed -file held in a table.

-

The utility is driven by the configuration specified within a csv file. -Default parameters can be given, and these can be used to compress all -files within the database. However, the compress.q utility also provides -the flexibility to compress different tables with different compression -parameters, and different columns within tables using different -parameters. A function is provided which will return a table showing -each file in the database to be compressed, and how, before the -compression is performed.

-

Compression is performed using the -19! operator, which takes 3 -parameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2 -- gzip), the compression blocksize as a power of 2 (between 12 and 19), - and the level of compression to apply (from 0 - 9, applicable only for - gzip). (For further information on -19! and the parameters used, see - code.kx.com.)

-

The compressionconfig.csv file should have the following format:

-
table,minage,column,calgo,cblocksize,clevel
-default,20,default,2,17,6
-trades,20,default,1,17,0
-quotes,20,asize,2,17,7
-quotes,20,bsize,2,17,7
-
-

This file can be placed in the config folder, or a path to the file -given at run time.

-

The compression utility compresses all tables and columns present in the -HDB but not specified in the driver file according the default -parameters. In effect, to compress an entire HDB using the same -compression parameters, a single row with name default would suffice. To -specify that a particular table should be compressed in a certain -different manner, it should be listed in the table. If default is given -as the column for this table, then all of the columns of that table will -be compressed accordingly. To specify the compression parameters for -particular columns, these should be listed individually. For example, -the file above will compress trades tables 20 days old or more with an -algorithm of 1, and a blocksize of 17. The asize and bsize columns of -any quotes tables older than 20 days old will be compressed using -algorithm 2, blocksize 17 and level 7. All other files present will be -compressed according to the default, using an algorithm 2, blocksize 17 -and compression level 6. To leave files uncompressed, you must specify -them explicitly in the table with a calgo of 0. If the file is already -compressed, note that an algorithm of 0 will decompress the file.

-

This utility should be used with caution. Before running the compression -it is recommended to run the function .cmp.showcomp, which takes three -parameters - the path to the database, the path to the csv file, and the -maximum age of the files to be compressed:

-
.cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
-        /- for using the csv file in the config folder
-.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
-        /- to specify a file
-
-

This function produces a table of the files to be compressed, the -parameters with which they will be compressed, and the current size of -the file. Note that the current size column is calculated using hcount; -on a file which is already compressed this returns the uncompressed -length, i.e. this cannot be used as a signal as to whether the file is -compressed already.

-
fullpath                        column table  partition  age calgo cblocksize clevel compressage currentsize
--------------------------------------------------------------------------------------
-:/home/hdb/2013.11.05/depth/asize1 asize1 depth  2013.11.05 146 0     17         8      1           787960
-:/home/hdb/2013.11.05/depth/asize2 asize2 depth  2013.11.05 146 0     17         8      1           787960
-:/home/hdb/2013.11.05/depth/asize3 asize3 depth  2013.11.05 146 0     17         8      1           787960
-:/home/hdb/2013.11.05/depth/ask1   ask1   depth  2013.11.05 146 0     17         8      1           1575904
-....
-
-

To then run the compression function, use .cmp.compressmaxage with the -same parameters as .cmp.showcomp (hdb path, csv path, maximum age of -files):

-
.cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
-        /- for using the csv file in the config folder
-.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
-        /- to specify a file
-
-

To run compression on all files in the database disregarding the maximum -age of the files (i.e. from minage as specified in the configuration -file to infinitely old), then use:

-
.cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv]   
-        /- for using the csv file in the config folder
-.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile]    
-        /- to specify a file
-
-

Logs are produced for each file which is compressed or decompressed. -Once the utility is complete, the statistics of the compression are also -logged. This includes the memory savings in MB from compression, the -additional memory usage in MB for decompression, the total compression -ratio, and the total decompression ratio:

-
|comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.
-|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .
-|comp1|INF|compression|Check .cmp.statstab for info on each file.
-
-

A table with the compressed and decompressed length for each individual -file, in descending order of compression ratio, is also produced. This -can be found in .cmp.statstab:

-
file                    algo compressedLength uncompressedLength compressionratio
------------------------------------------------------------------------------------
-:/hdb/2014.03.05/depth/asize1 2    89057            772600             8.675343
-:/hdb/2014.01.06/depth/asize1 2    114930           995532             8.662073
-:/hdb/2014.03.05/depth/bsize1 2    89210            772600             8.660464
-:/hdb/2014.03.12/depth/bsize1 2    84416            730928             8.658643
-:/hdb/2014.01.06/depth/bsize1 2    115067           995532             8.651759
-.....
-
-

A note for windows users - windows supports compression only with a -compression blocksize of 16 or more.

-

-

dataloader.q

-

This script contains some utility functions to assist in loading data -from delimited files (e.g. comma separated, tab delimited). It is a more -generic version of the data loader example on -code.kx. -The supplied functions allow data to be read in configurable size chunks -and written out to the database. When all the data is written, the -on-disk data is re-sorted and the attributes are applied. The main -function is .loader.loadalldata which takes two parameters- a dictionary -of loading parameters and a directory containing the files to read. The -dictionary should/can have the following fields:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterReqTypeDescription
headersYsymbol listNames of the header columns in the file
typesYchar listData types to read from the file
separatorYchar[list]Delimiting character. Enlist it if first line of file is header data
tablenameYsymbolName of table to write data to
dbdirYsymbolDirectory to write data to
partitiontypeNsymbolPartitioning to use. Must be one of
`date`month`year`int. Default is `date
partitioncolNsymbolColumn to use to extract partition information.Default is `time
dataprocessfuncNfunctionDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}
chunksizeNintData size in bytes to read in one chunk. Default is 100 MB
compressionNint listCompression parameters to use e.g. 17 2 6. Default is empty list for no compression
gcNbooleanWhether to run garbage collection at appropriate points. Default is 0b (false)
-

Example usage:

-
.loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;"SP  FI";",";`trade;`:hdb); `:TDC/toload]
-.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;"SP  FI";enlist",";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]
-
-

-

subscriptions.q

-

The subscription utilities allow multiple subscriptions to different -data sources to be managed and maintained. Automatic resubscriptions in -the event of failure are possible, along as specifying whether the -process will get the schema and replay the log file from the remote -source (e.g. in the case of tickerplant subscriptions).

-

.sub.getsubscriptionhandles is used to get a table of processes to -subscribe to. The following can be used to return a table of all -connected processes of type tickerplant:

-
.sub.getsubscriptionhandles[`tickerplant;`;()!()]
-
-

.sub.subscribe is used to subscribe to a process for the supplied list -of tables and instruments. For example, to subscribe to instruments A, B -and C for the quote table from all tickerplants:

-
.sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
-
-

The subscription method uses backtick for “all” (which is the same as -kdb+tick). To subscribe to all tables, all instruments, from all -tickerplants:

-
.sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
-
-

See .api.p“.sub.*” for more details.

-

-

pubsub.q

-

pubsub.q is essentially a placeholder script to allow publish and -subscribe functionality to be implemented. Licenced kdb+tick users can -use the publish and subscribe functionality implemented in u.[k|q]. If -u.[k|q] is placed in the common code directory and loaded before -pubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt) -then publish and subscribe will be implemented. You can also build out -this file to add your own publish and subscribe routines as required.

-

-

tplogutils.q

-

tplogutils.q contains functions for recovering tickerplant log files. -Under certain circumstances the tickerplant log file can become corrupt -by having an invalid sequence of bytes written to it. A log file can be -recovered using a simple recovery method. However, this will only -recover messages up to the first invalid message. The recovery functions -defined in tplogutils.q allow all valid messages to be recovered from -the tickerplant log file.

-

-

monitoringchecks.q

-

monitoringchecks.q implements a set of standard, basic monitoring -checks. They include checks to ensure:

-
    -
  • -

    table sizes are increasing during live capture

    -
  • -
  • -

    the HDB data saves down correctly

    -
  • -
  • -

    the allocated memory of a process does not increase past a certain - size

    -
  • -
  • -

    the size of the symbol list in memory doesn’t grow to big

    -
  • -
  • -

    the process does not have too much on its pending subscriber queue

    -
  • -
-

These checks are intended to be run by the reporter process on a -schedule, and any alerts emailed to an appropriate recipient list.

-

-

heartbeat.q

-

heartbeat.q implements heartbeating, and relies on both timer.q and -pubsub.q. A table called heartbeat will be published periodically, -allowing downstream processes to detect the availability of upstream -components. The heartbeat table contains a heartbeat time and counter. -The heartbeat script contains functions to handle and process heartbeats -and manage upstream process failures. See .api.p.hb.*for details.

-

-

dbwriteutils.q

-

This contains a set of utility functions for writing data to historic -databases.

-

Sorting and Attributes

-

The sort utilities allow the sort order and attributes of tables to be -globally defined. This helps to manage the code base when the data can -potentially be written from multiple locations (e.g. written from the -RDB, loaded from flat file, replayed from the tickerplant log). The -configuration is defined in a csv which defaults to $KDBCONFG/sort.csv. -The default setup is that every table is sorted by sym and time, with a -p attribute on sym (this is the standard kdb+ tick configuration).

-
aquaq$ tail config/sort.csv 
-tabname,att,column,sort
-default,p,sym,1
-default,,time,1
-
-

As an example, assume we have an optiontrade table which we want to be -different from the standard set up. We would like the table to be sorted -by optionticker and then time, with a p attribute on optionticker. We -also have a column called underlyingticker which we can put an attribute -on as it is derived from optionticker (so there is an element of -de-normalisation present in the table). We also have an exchange field -which we would like to put a g attribute on. All other tables we want to -be sorted and parted in the standard way. The configuration file would -look like this (sort order is derived from the order within the file -combined with the sort flag being set to true):

-
aquaq$ tail config/sort.csv                
-tabname,att,column,sort
-default,p,sym,1
-default,,time,1
-optiontrade,p,optionticker,1
-optiontrade,,exchtime,1
-optiontrade,p,underlyingticker,0
-optiontrade,g,exchange,0
-
-

To invoke the sort utilities, supply a list of (tablename; partitions) -e.g.

-
q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)
-2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table
-2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters
-2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time
-2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/
-2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time
-2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/
-2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table
-
-

A different sort configuration file can be loaded with

-
.sort.getsortcsv[`:file]
-
-

Garbage Collection

-

The garbage collection utility prints some debug information before and -after the garbage collection.

-
q).gc.run[]                                                                                                                                                      
-2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
-2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
-
-

Table Manipulation

-

The table manipulation utilities allow table manipulation routines to be -defined in a single place. This is useful when data can be written from -mutliple different processes e.g. RDB, WDB, or tickerplant log replay. -Instead of having to create a separate definition of customised -manipulation in each process, it can be done in a single location and -invokved in each process.

-

-

help.q

-

The standard help.q from code.kx provides help utilities in the console. -This should be kept up to date with -[code.kx].

-
q)help`                                                                                                                                                                                                                         
-adverb    | adverbs/operators
-attributes| data attributes
-cmdline   | command line parameters
-data      | data types
-define    | assign, define, control and debug
-dotz      | .z locale contents
-errors    | error messages
-save      | save/load tables
-syscmd    | system commands
-temporal  | temporal - date & time casts
-verbs     | verbs/functions
-
-

-

html.q

-

An HTML utility has been added to accompany the HTML5 front end for the -Monitoring process. It includes functions to format dates, tables to csv -to configure the HTML file to work on the correct process. It is -accessible from the .html namespace.

-

-

Additional Utilities

-

There are some additional user contributed utility scripts available on -code.kx which are good candidates for inclusion. These could either be -dropped into the common code directory, or if not globally applicable -then in the code directory for either the process type or name. The full -set of user contributed code is documented -here.

-

-

Full API

-

The full public api can be found by running

-
q).api.u`                                                                                                                                                                                                                       
-name             | vartype  namespace public descrip                 ..
------------------| --------------------------------------------------..
-.proc.createlog  | function .proc     1      "Create the standard out..
-.proc.rolllogauto| function .proc     1      "Roll the standard out/e..
-.proc.loadf      | function .proc     1      "Load the specified file..
-.proc.loaddir    | function .proc     1      "Load all the .q and .k ..
-.lg.o            | function .lg       1      "Log to standard out"   ..
-..
-
-

Combined with the commented configuration file, this should give a good -overview of the functionality available. A description of the individual -namespaces is below- run .api.u namespace*to list the functions.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NamespaceDescription
.procProcess API
.lgStandard out/error logging API
.errError throwing API
.usageUsage logging API
.accessPermissions API
.clientsClient tracking API
.serversServer tracking API
.asyncAsync communication API
.timerTimer API
.cacheCaching API
.tzTimezone conversions API
.checksMonitoring API
.cmpCompression API
.psPublish and Subscribe API
.hbHeartbeating API
.loaderData Loader API
.sortData sorting and attribute setting API
.subSubscription API
.gcGarbage Collection API
.tplogTickerplant Log Replay API
.apiAPI management API
-

-

Modified u.q

-

Starting in kdb+ v3.4, the new broadcast feature has some performance -benefits. It works by serialising a message once before sending it -asynchronously to a list of subscribers whereas the previous method -would serialise it separately for each subscriber. To take advantage of -this, we’ve modified u.q. This can be turned off by setting .u.broadcast -to false. It is enabled by default, but will only override default -publishing if the kdb+ version being used is 3.4 or after.

- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/site/visualisation/index.html b/site/visualisation/index.html deleted file mode 100644 index dadf072b3..000000000 --- a/site/visualisation/index.html +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - - - - - - - Visualisation - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - -
- -
-
- - -
-
- -

Visualisation

-

kdb+ supports websockets and so HTML5 GUIs can be built. We have -incorporated a set of server side and client side utilities to ease HTML -GUI development.

-

-

kdb+ Utilities

-

The server side utilities are contained in html.q. These utilise some -community code, specifically json.k and a modified version of u.q, both -from Kx Systems. The supplied functionality includes:

-
    -
  • -

    json.k provides two way conversion between kdb+ data structures and - JSON;

    -
  • -
  • -

    u.q is the standard pub/sub functionality provided with kdb+tick, - and a modified version is incorporated to publish data structures - which can be easily interpreted in JavaScript;

    -
  • -
  • -

    functions for reformatting temporal types to be JSON compliant;

    -
  • -
  • -

    page serving to utilise the inbuilt kdb+ webserver to serve custom - web pages. An example would be instead of having to serve a page - with a hardcoded websocket connection host and port, the kdb+ - process can serve a page connecting back to itself no matter which - host or port it is running on.

    -
  • -
-

-

JavaScript Utilities

-

The JavaScript utilities are contained in kdbconnect.js. The library -allows you to:

-
    -
  • -

    create a connection to the kdb+ process;

    -
  • -
  • -

    display the socket status;

    -
  • -
  • -

    sending queries;

    -
  • -
  • -

    binding results returned from kdb+ to updates in the webpage.

    -
  • -
-

-

Outline

-

All communication between websockets and kdb+ is asynchronous. The -approach we have adopted is to ensure that all data sent to the web -browser is encoded as a JSON object containing a tag to enable the web -page to decipher what the data relates to. The format we have chosen is -for kdb+ to send dictionaries of the form:

-
`name`data!("dataID";dataObject)
-
-

All the packing can be done by .html.dataformat. Please note that the -temporal types are converted to longs which can easily be converted to -JavaScript Date types. This formatting can be modified in the formating -dictionary .html.typemap.

-
q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)
-q).html.dataformat["start";(enlist `tradegraph)!enlist a]
-name| "start"
-data| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a)
-q)first (.html.dataformat["start";(enlist `tradegraph)!enlist a])[`data;`tradegraph]                                                                                     
-minute   | 32400000
-time     | 32400000
-date     | 1396828800000
-month    | 1396310400000
-timestamp| "2014-04-07T13:23:01Z"
-timespan | 48181023
-datetime | "2014-04-07T13:23:01Z"
-float    | 20f
-sym      | `a
-
-

We have also extended this structure to allow web pages to receive data -in a way similar to the standard kdb+tick pub/sub format. In this case, -the data object looks like:

-
`name`data!("upd";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))
-
-

This can be packed with .html.updformat:

-
q).html.updformat["upd";`tablename`tabledata!(`trade;a)]                                                                                                                 
-name| "upd"
-data| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a))
-q)first(.html.updformat["upd";`tablename`tabledata!(`trade;a)])[`data;`tabledata]                                                                                        
-minute   | 32400000
-time     | 32400000
-date     | 1396828800000
-month    | 1396310400000
-timestamp| "2014-04-07T13:23:01Z"
-timespan | 48181023
-datetime | "2014-04-07T13:23:01Z"
-float    | 20f
-sym      | `a
-
-

To utilise the pub/sub functionality, the web page must connect to the -kdb+ process and subscribe for updates. Subscriptions are done using

-
.html.wssub[`tablename]
-
-

Publications from the kdb+ side are done with

-
.html.pub[`tablename;tabledata]
-
-

On the JavaScript side the incoming messages (data events) must be bound -to page updates. For example, there might be an initialisation event -called “start” which allows the web page to retrieve all the initial -data from the process. The code below redraws the areas of the page with -the received data.

-
/* Bind data - Data type "start" will execute the callback function */
-KDBCONNECT.bind("data","start",function(data){
-  // Check that data is not empty
-  if(data.hbtable.length !== 0)
-   // Write HTML table to div element with id heartbeat-table
-   { $("#heartbeat-table").html(MONITOR.jsonTable(data.hbtable));}
-  if(data.lmtable.length !== 0)
-   // Write HTML table to div element with id logmsg-table
-   { $("#logmsg-table").html(MONITOR.jsonTable(data.lmtable));}  
-  if(data.lmchart.length !== 0)
-   // Log message error chart
-   { MONITOR.barChart(data.lmchart,"logmsg-chart","Error Count","myTab"); }
-  });
-
-

Similarly the upd messages must be bound to page updates. In this case, -the structure is slightly different:

-
KDBCONNECT.bind("data","upd",function(data){
-  if(data.tabledata.length===0) return;
-  if(data.tablename === "heartbeat")
-    { $("#heartbeat-table").html(MONITOR.jsonTable(data.tabledata));}
-  if(data.tablename === "logmsg")
-    { $("#logmsg-table").html(MONITOR.jsonTable(data.tabledata));}
-  if(data.tablename === "lmchart")
-    { MONITOR.barChart(data.tabledata,"logmsg-chart","Error Count","myTab"); }
- });
-
-

To display the WebSocket connection status the event “ws_event” must be -bound and it will output one of these default messages: “Connecting...”, -“Connected” and “Disconnected” depending on the connection state of the -WebSocket. Alternatively the value of the readyState attribute will -determine the WebSocket status.

-
// Select html element using jQuery
-var $statusMsg = $("#status-msg");  
-KDBCONNECT.bind("ws_event",function(data){
-  // Data is the default message string
-  $statusMsg.html(data);
-});
-KDBCONNECT.core.websocket.readyState // Returns 1 if connected.
-
-

Errors can be displayed by binding the event called “error”.

-
KDBCONNECT.bind("error",function(data){
-  $statusMsg.html("Error - " + data);
-});
-
-

-

Example

-

A basic example is provided with the Monitor process. To get this to -work, u.q from kdb+tick should be placed in the code/common directory to -allow all processes to publish updates. It should be noted that this is -not intended as a production monitoring visualisation screen, moreso a -demonstration of functionality. See section monitorgui for more -details.

-

-

Further Work

-

Further work planned includes:

-
    -
  • -

    allow subscriptions on a key basis- currently all subscribers - receive all updates;

    -
  • -
  • -

    add JavaScript controls to allow in-place updates based on key - pairs, and scrolling window updates e.g. add N new rows to - top/bottom of the specified table;

    -
  • -
  • -

    allow multiple websocket connections to be maintained at the same - time.

    -
  • -
- - - - -
-
-
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file From 4834fbb86377567c7351664488aa9d4bf6ff583b Mon Sep 17 00:00:00 2001 From: Conal Logan Date: Thu, 12 Jan 2017 16:42:32 +0000 Subject: [PATCH 3/9] added analytics --- mkdocs.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index 4a3d8797e..3a46638c3 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -22,3 +22,7 @@ extra: author: github: 'AquaQAnalytics' twitter: 'AquaQAnalytics' + +google_analytics: + - 'UA-51911331-4' + - 'auto' From 875917bf1741a5527c5eb77af3e73a44fff0ed8d Mon Sep 17 00:00:00 2001 From: Conal Logan Date: Fri, 13 Jan 2017 08:39:12 +0000 Subject: [PATCH 4/9] Made some small changes, added an embedded video --- docs/graphics/favicon.ico | Bin 0 -> 1150 bytes docs/index.md | 6 +- mkdocs.yml | 4 +- site/Overview/index.html | 860 ++++++++ site/Processes/index.html | 1779 +++++++++++++++++ site/assets/fonts/icon.eot | Bin 0 -> 2224 bytes site/assets/fonts/icon.svg | 22 + site/assets/fonts/icon.ttf | Bin 0 -> 2072 bytes site/assets/fonts/icon.woff | Bin 0 -> 2148 bytes site/assets/images/favicon-e565ddfa3b.ico | Bin 0 -> 1150 bytes site/assets/images/favicon.ico | Bin 0 -> 1150 bytes .../javascripts/application-997097ee0c.js | 1 + site/assets/javascripts/application.js | 1 + .../javascripts/modernizr-4ab42b99fd.js | 1 + site/assets/javascripts/modernizr.js | 1 + .../stylesheets/application-a422ff04cc.css | 1 + site/assets/stylesheets/application.css | 1 + .../stylesheets/palettes-05ab2406df.css | 1 + site/assets/stylesheets/palettes.css | 1 + site/conn/index.html | 644 ++++++ site/gettingstarted/index.html | 789 ++++++++ site/graphics/AquaQ-TorQ-symbol.png | Bin 0 -> 125149 bytes site/graphics/TorQ-logo.png | Bin 0 -> 108699 bytes site/graphics/async.png | Bin 0 -> 138698 bytes site/graphics/discovery1.png | Bin 0 -> 30996 bytes site/graphics/discovery2.png | Bin 0 -> 37928 bytes site/graphics/discovery3.png | Bin 0 -> 43736 bytes site/graphics/favicon.ico | Bin 0 -> 1150 bytes site/graphics/fullarchitecture.gliffy | 1 + site/graphics/fullarchitecture.png | Bin 0 -> 108103 bytes site/graphics/fullarchitecture2.gliffy | 1 + site/graphics/fullarchitecture2.png | Bin 0 -> 113571 bytes site/graphics/html5frontend.jpg | Bin 0 -> 157632 bytes site/graphics/logo.pdf | Bin 0 -> 212032 bytes site/graphics/logo.png | Bin 0 -> 14209 bytes site/graphics/reporter.png | Bin 0 -> 19542 bytes site/graphics/simpletickdiagram.png | Bin 0 -> 16225 bytes site/graphics/torq-logo.png | Bin 0 -> 18931 bytes site/handlers/index.html | 1031 ++++++++++ site/index.html | 389 ++++ site/mkdocs/js/lunr.min.js | 7 + site/mkdocs/js/mustache.min.js | 1 + site/mkdocs/js/require.js | 36 + .../js/search-results-template.mustache | 4 + site/mkdocs/js/search.js | 88 + site/mkdocs/js/text.js | 390 ++++ site/mkdocs/search_index.json | 524 +++++ site/sitemap.xml | 68 + site/utilities/index.html | 1455 ++++++++++++++ site/visualisation/index.html | 592 ++++++ 50 files changed, 8696 insertions(+), 3 deletions(-) create mode 100644 docs/graphics/favicon.ico create mode 100644 site/Overview/index.html create mode 100644 site/Processes/index.html create mode 100755 site/assets/fonts/icon.eot create mode 100755 site/assets/fonts/icon.svg create mode 100755 site/assets/fonts/icon.ttf create mode 100755 site/assets/fonts/icon.woff create mode 100644 site/assets/images/favicon-e565ddfa3b.ico create mode 100644 site/assets/images/favicon.ico create mode 100644 site/assets/javascripts/application-997097ee0c.js create mode 100644 site/assets/javascripts/application.js create mode 100644 site/assets/javascripts/modernizr-4ab42b99fd.js create mode 100644 site/assets/javascripts/modernizr.js create mode 100644 site/assets/stylesheets/application-a422ff04cc.css create mode 100644 site/assets/stylesheets/application.css create mode 100644 site/assets/stylesheets/palettes-05ab2406df.css create mode 100644 site/assets/stylesheets/palettes.css create mode 100644 site/conn/index.html create mode 100644 site/gettingstarted/index.html create mode 100755 site/graphics/AquaQ-TorQ-symbol.png create mode 100755 site/graphics/TorQ-logo.png create mode 100755 site/graphics/async.png create mode 100755 site/graphics/discovery1.png create mode 100755 site/graphics/discovery2.png create mode 100755 site/graphics/discovery3.png create mode 100644 site/graphics/favicon.ico create mode 100755 site/graphics/fullarchitecture.gliffy create mode 100755 site/graphics/fullarchitecture.png create mode 100755 site/graphics/fullarchitecture2.gliffy create mode 100755 site/graphics/fullarchitecture2.png create mode 100755 site/graphics/html5frontend.jpg create mode 100755 site/graphics/logo.pdf create mode 100755 site/graphics/logo.png create mode 100755 site/graphics/reporter.png create mode 100755 site/graphics/simpletickdiagram.png create mode 100755 site/graphics/torq-logo.png create mode 100644 site/handlers/index.html create mode 100644 site/index.html create mode 100644 site/mkdocs/js/lunr.min.js create mode 100644 site/mkdocs/js/mustache.min.js create mode 100644 site/mkdocs/js/require.js create mode 100644 site/mkdocs/js/search-results-template.mustache create mode 100644 site/mkdocs/js/search.js create mode 100644 site/mkdocs/js/text.js create mode 100644 site/mkdocs/search_index.json create mode 100644 site/sitemap.xml create mode 100644 site/utilities/index.html create mode 100644 site/visualisation/index.html diff --git a/docs/graphics/favicon.ico b/docs/graphics/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..18949c3c8b683fdaaeeb3d2c6a863b401e074a9a GIT binary patch literal 1150 zcmbW1+fUPH7{|M0ciV;A#V(fUV2ISw0y5D_G-Eo)aEM6dFp)wz7b=GpsV!%0*B07Z zeoziAP!wnx=YtauKw&0ko7u7@m>ptvFz~2P|*C&-=dL_xU^*&y&0o z$t&X8woM|&FiH8V63JTWG(Pi;dY*ocyJ45#NKkK_Ss} z3Dynf2ALPUF)otM_hT?6MpK&=LCaw&1-08Tr0vF-BtuoRgY#)o=oC_#k459y6GxB< z@i`|j$#-EoD5Ioo2UVxTQJ21p{=;yLJHs$VMbMrQNmM|)VRKFjle9^zM>;al$@cNb=vDJx{7S71Z1V-4Gmwn|FtnHVMu zl}uNbpw-FfR(>3+`TOckHW%h_CdATz05C6D_H|;Y9Pb5=UFUQ-c zWJ;&zLQNu*safZQ}L8#u&mSb_uWkZN8kG2Rl>{!@_;uwvw|WF__xJJO=bu8e@Z~F+5a;O>GVm7_aILk48)hTZ zrE2!8g6#EbAM^d8nAHtYT7ILH9ro6K6}fX)>|W*}+V8 z74vmkJiRIg`tup^6mZF0%1pV2nGy}YhH~8QLfm}?^t+WzHdQgJsb + + For recent updates to TorQ please check out our [blog](http://www.aquaq.co.uk/blog/). diff --git a/mkdocs.yml b/mkdocs.yml index 3a46638c3..3c6bae50d 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,8 +17,8 @@ repo_url: 'https://github.com/AquaQAnalytics/TorQ' extra: logo: 'graphics/TorQ-logo.png' palette: - primary: 'indigo' - accent: 'teal' + primary: 'teal' + accent: 'indigo' author: github: 'AquaQAnalytics' twitter: 'AquaQAnalytics' diff --git a/site/Overview/index.html b/site/Overview/index.html new file mode 100644 index 000000000..7ad743c64 --- /dev/null +++ b/site/Overview/index.html @@ -0,0 +1,860 @@ + + + + + + + + + + + + About - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

Overview

+

+

What is kdb+?

+

kdb+ is the market leading timeseries database from Kx Systems. kdb+ +is used predominently in the Financial Services sector to capture, +process and analyse billions of records on a daily basis, with Kx +counting almost all of the top tier investment banks as customers. kdb+ +incorporates a programming language, q, which is known for its +performance and expressive power. Given the unsurpassed data management +and analytical capabilities of kdb+, the applicability of kdb+ +technology extends beyond the financial domain into any sector where +rapid pre-built or adhoc analysis of large datasets is required. Other +sectors which have good use cases for kdb+ include utilities, +pharmaceuticals, telecoms, manufacturing, retail and any sector +utilising telemetry or sensor data.

+

+

What is AquaQ TorQ?

+

AquaQ TorQ is a framework which forms the basis of a production kdb+ +system by implementing some core functionality and utilities on top of +kdb+, allowing developers to concentrate on the application business +logic. We have incorporated as many best practices as possible, with +particular focus on performance, process management, diagnostic +information, maintainability and extensibility. We have kept the code as +readable as possible using descriptive comments, error messages, +function names and variable names. Wherever possible, we have tried to +avoid re-inventing the wheel and instead have used contributed code from +code.kx.com (either directly or modified). All code sections taken from +code.kx.com are referenced in this document.

+

AquaQ TorQ can be extended or modified as required. We have chosen some +default behaviour, but it can all be overridden. The features of AquaQ +TorQ are:

+
    +
  • +

    Process Management: Each process is given a type and name. By + default these are used to determine the code base it loads, the + configuration loaded, log file naming and how it reports itself to + discovery services. Whenever possible we have tried to ensure that + all default behaviour can be overridden at the process type level, + and further at the process name level.

    +
  • +
  • +

    Code Management: Processes can optionally load common or process + type/name specific code bases. All code loading is error trapped.

    +
  • +
  • +

    Configuration Management: Configuration scripts can be loaded as + standard and with specific process type/name configuration + overriding default values. Configuration scripts are loaded in a + specific order; default, then process type specific, then process + name specific. Values loaded last will override values loaded + previously.

    +
  • +
  • +

    Usage Logging: All process usage is logged to a single text log file + and periodically rolled. Logging includes opening/closing of + connections, synchronous and asynchronous queries and functions + executed on the timer. Logged values include the request, the + details of where it came from, the time it was received, the time it + took, memory usage before and after, the size of the result set, the + status and any error message.

    +
  • +
  • +

    Incoming and Outgoing Connection Management: Incoming (client) and + outgoing (server) connections are stored and their usage monitored + through query counts and total data size counts. Connections are + stored and retrieved and can be set to automatically be re-opened as + required. The password used for outgoing connections can be + overridden at default, process type and process name level.

    +
  • +
  • +

    Access Controls: Basic access controls are provided, and could be + extended. These apply restrictions on the IP addresses of remote + connections, the users who can access the process, and the functions + that each user can execute. A similar hierarchical approach is used + for access control management as for configuration management.

    +
  • +
  • +

    Timer Extensions: Mechanism to allow multiple functions to be added + to the timer either on a repeating or one-off basis. Multiple + re-scheduling algorithms supplied for repeating timers.

    +
  • +
  • +

    Standard Out/Error Logging: Functions to print formatted messages to + standard out and error. Hooks are provided to extend these as + required, e.g. publication to centralised logging database. Standard + out and error are redirected to appropriately named, timestamped and + aliased log files, which are periodically rolled.

    +
  • +
  • +

    Error Handling: Different failure options are supplied in case code + fails to load; either exit upon failure, stop at the point of + failure or trap and continue.

    +
  • +
  • +

    Visualisation: Utilities to ease GUI development using websockets + and HTML5.

    +
  • +
  • +

    Documentation and Development Tools: Functionality to document the + system is built into AquaQ TorQ, and can be accessed directly from + every q session. Developers can extend the documentation as they add + new functions. Functionality for searching for functions and + variables by name and definition is provided, and for ordering + variables by memory usage. The standard help.q from code.kx is also + included.

    +
  • +
  • +

    Utilities: We intend to build out and add utilities as we find them + to be suitably useful and generic. So far we have:

    +
      +
    1. +

      Caching: allows a result set cache to be declared and result + sets to be stored and retrieved from the cache. Suitable for + functions which may be run multiple times with the same + parameters, with the underlying data not changing in a short + time frame;

      +
    2. +
    3. +

      Timezone Handling: derived from code.kx, allows conversion + between timestamps in different timezones;

      +
    4. +
    5. +

      Email: an library to send emails;

      +
    6. +
    7. +

      Async Messaging: allows easy use of advanced async messaging + methods such as deferred synchronous communication and async + communication using postback functions;

      +
    8. +
    9. +

      Heartbeating: each process can be set to publish heartbeats, and + subscribe to and manage heartbeats from other processes in the + environment;

      +
    10. +
    11. +

      Data Loading: utility wrapper around .Q.fsn to read a data file + from disk, manipulate it and write it out in chunks;

      +
    12. +
    13. +

      Subscriptions: allow processes to dynamically detect and + subscribe to datasources;

      +
    14. +
    15. +

      Tickerplant Log File Recovery: recover as many messages as + possible from corrupt log files;

      +
    16. +
    17. +

      Database Writing: utility functions for writing to, sorting and + parting on disk databases;

      +
    18. +
    19. +

      Compression: allows compression of a database. This can be + performed using a set of parameters for the entire database, but + also gives the flexibilty of compressing user-specified tables + and/or columns of those tables with different parameters if + required, and also offers decompression.

      +
    20. +
    +
  • +
+

AquaQ TorQ will wrap easily around kdb+tick and therefore around any +tickerplant, RDB, HDB or real time processing application. We currently +have several customised processes of our own:

+
    +
  • +

    Discovery Service: Every process has a type, name and set of + available attributes, which are used by other processes to connect + to it. The Discovery Service is a central point that can be used to + find other available processes. Client processes can subscribe to + updates from the discovery service as new processes become + available- the discovery service will notify its subscribers, which + can then use the supplied hook to implement required behavior e.g. + connect to the newly available process;

    +
  • +
  • +

    Gateway: A fully synchronous and asynchronous gateway is provided.

    +

    The gateway will connect to a defined list of process types (can be +homogenous or heterogeneous processes) and will route queries across +them according to the priority of received requests. The routing +algorithms can be easily modified e.g. give priority to user X, or +only route queries to processes which exist in the same data centre +or geographical region to avoid the WAN (this would entail using the +process attributes). The gateway can either return the result to the +client back down the same handle, or it can wrap it in a callback +function to be invoked on the client;

    +
  • +
  • +

    Real Time Database (RDB): A customized version of the kdb+tick RDB, + to allow dynamic tickerplant subscriptions, reloading of multiple + HDBs using authenticated connections, and customized end-of-day save + downs. The RDB, WDB and tickerplant log replay share a common code + base to ensure that a save-down modification to a table is applied + across each of these processes.

    +
  • +
  • +

    Write Database (WDB): The job of a WDB is to write data to disk + rather than to serve client queries. WDBs usually write data out + periodically throughout the day, and are useful when there is too + much data to fit into memory and/or the end of day save operation + needs to be speeded up. The concept is based on + w.q

    +
  • +
  • +

    Tickerplant Log Replay: A process for replaying tickerplant log + files to create on-disk data sets. Extended features are provided + for only replaying subsets of log files (by message number and/or + table name), replaying in chunks, invoking bespoke final behaviour + etc.;

    +
  • +
  • +

    Reporter: The Reporter Process runs defined reports (q queries or + parameterized functions) against specific database or gateways on a + schedule. The results are retrieved and processed. Processing can be + user defined, or can be a standard operation such as writing the + data to disk, or emailing the results to a list of recipients. This + can be useful for running system checks or generating management + reports.

    +
  • +
  • +

    Housekeeping: A process to undertake housekeeping tasks + periodically, such as compressing and removing files that are no + longer used. Housekeeping looks up a file of instructions and + performs maintenance tasks on directories accordingly. Features + allow selective file deletion and zipping according to file age, + including a search string parameter and the ability to exclude items + from the search. The process can be scheduled, or run immediately + from the command line and can be extended as required to incorporate + more tasks.

    +
  • +
  • +

    File Alerter: A process to periodically scan a set of directories + and execute a function based on the availability of a file. This is + useful where files may arrive to the system during the day and must + be acted upon (e.g. files are uploaded to a shared directory by + users/clients). The functions to execute are defined by the user and + the whole process is driven by a csv file detailing the file to + search for, the function to execute and, optionally, a directory to + move the file to after it has been processed.

    +
  • +
  • +

    Monitor: A basic monitoring process which uses the Discovery Service + to locate the other processes within the system, listens for + heartbeats, and subscribes for log messages. This should be extended + as required but provides a basic central point for system health + checks;

    +
  • +
  • +

    Kill: A process used to kill other processes, optionally using the + Discovery Service to locate them.

    +
  • +
+

+

A Large Scale Data Processing Platform

+

One of the key drivers behind TorQ development has been to ensure all +the tools necessary to build a large scale data processing platform are +available. kdb+tick +provides the basic building blocks, and a standard set-up usually looks +something like this:

+

Simple kdb+tick Setup

+

However, in reality it is usually more complicated. A larger scale +architecture serving large numbers of client queries and receiving data +from multiple sources may look like this:

+

Production Data Capture

+

A common practice is to use a gateway (section gateway) to +manage client queries across back-end processes. The gateway can load +balance across processes and make failures transparent to the client. If +the clients access the gateway with asynchronous calls, then the gateway +can serve many requests at once and additionally implement client +queuing algorithms.

+

Other common production features include:

+
    +
  • +

    A modified version of the RDB (section sec:rdb) which does + different operations at end-of-day, reloads multiple HDB processes + etc.

    +
  • +
  • +

    A Write Database (section [sec:wdb]) which receives data from the + tickerplant and periodically writes it to disk. WDBs are used when + there is too much data in a day to fit into memory and/or to speed + up the end-of-day rollover job

    +
  • +
  • +

    Processes that load data from other sources either into the HDB + directly or to the RDB potentially via the tickerplant (section + [sec:dataloader]). The data may be dropped in specific locations + which have to be monitored (section [sec:filealerter])

    +
  • +
  • +

    A Reporting Engine (section [sec:reporter]) to run periodic + reports and do something with the result (e.g. generate an xls file + from the database and email it to senior management). Reporting + engines can also be used to run periodic checks of the system

    +
  • +
  • +

    A Discovery Service (section [sec:discovery]) to allow processes + to locate each other, and to allow processes to dynamically register + availability and push notifications around the system.

    +
  • +
  • +

    Basic Monitoring (section [sec:monitor]) of process availability

    +
  • +
  • +

    Housekeeping (section [sec:housekeeping]) to ensure log files are + tidied up, tickerplant log files are compressed/moved in a timely + fashion etc.

    +
  • +
+

+

Do I Really Have to Read This Whole Document?

+

Hopefully not. The core of AquaQ TorQ is a script called torq.q and we +have tried to make it as descriptive as possible, so perhaps that will +suffice. The first place to look will be in the config files, the main +one being \$KDBCONFIG/settings/default.q. This should contain a lot of +information on what can be modified. In addition:

+
    +
  • +

    We have added a load of usage information:

    +
    aquaq$ q torq.q -usage
    +KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
    +
    +General:
    + This script should form the basis of a production kdb+ environment.
    + It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags 
    +... etc ...
    +
    +

    If sourcing from another script there are hooks to modify and extend +the usage information as required.

    +
  • +
  • +

    We have some pretty extensive logging:

    +
    aquaq$ q torq.q -p 9999 -debug
    +KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
    +
    +2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0
    +2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0
    +2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv
    +2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1
    +2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found
    +... etc ...
    +
    +
  • +
  • +

    We have added functionality to find functions or variables defined + in the session, and also to search function definitions.

    +
    q).api.f`max                                                                                                                                                                                   
    +name                | vartype   namespace public descrip              ..
    +--------------------| ------------------------------------------------..
    +maxs                | function  .q        1      ""                   ..
    +mmax                | function  .q        1      ""                   ..
    +.clients.MAXIDLE    | variable  .clients  0      ""                   ..
    +.access.MAXSIZE     | variable  .access   0      ""                   ..
    +.cache.maxsize      | variable  .cache    1      "The maximum size in ..
    +.cache.maxindividual| variable  .cache    1      "The maximum size in ..
    +max                 | primitive           1      ""                   ..
    +
    +q)first 0!.api.p`.api                                                                                                                                                                          
    +name     | `.api.f
    +vartype  | `function
    +namespace| `.api
    +public   | 1b
    +descrip  | "Find a function/variable/table/view in the current process"
    +params   | "[string:search string]"
    +return   | "table of matching elements"
    +
    +q).api.p`.api                                                                                                                                                                                  
    +name        | vartype  namespace public descrip                       ..
    +------------| --------------------------------------------------------..
    +.api.f      | function .api      1      "Find a function/variable/tabl..
    +.api.p      | function .api      1      "Find a public function/variab..
    +.api.u      | function .api      1      "Find a non-standard q public ..
    +.api.s      | function .api      1      "Search all function definitio..
    +.api.find   | function .api      1      "Generic method for finding fu..
    +.api.search | function .api      1      "Generic method for searching ..
    +.api.add    | function .api      1      "Add a function to the api des..
    +.api.fullapi| function .api      1      "Return the full function api ..
    +
    +
  • +
  • +

    We have incorporated help.q.

    +
    q)help`                                                                                                                                                                                        
    +adverb    | adverbs/operators
    +attributes| data attributes
    +cmdline   | command line parameters
    +data      | data types
    +define    | assign, define, control and debug
    +dotz      | .z locale contents
    +errors    | error messages
    +save      | save/load tables
    +syscmd    | system commands
    +temporal  | temporal - date & time casts
    +verbs     | verbs/functions
    +
    +
  • +
  • +

    We have separated and commented all of our config:

    +
    aquaq$ head config/default.q 
    +/- Default configuration - loaded by all processes
    +
    +/- Process initialisation
    +\d .proc
    +loadcommoncode:1b   /- whether to load the common code defined at
    +                        /- ${KDBCODE}/common
    +loadprocesscode:0b  /- whether to load the process specific code defined at 
    +                        /- ${KDBCODE}/{process type} 
    +loadnamecode:0b     /- whether to load the name specific code defined at 
    +                    /- ${KDBCODE}/{name of process}
    +loadhandlers:1b     /- whether to load the message handler code defined at 
    +                        /- ${KDBCODE}/handlers
    +logroll:1b      /- whether to roll the std out/err logs daily
    +... etc ...
    +
    +
  • +
+

+

Operating System and kdb+ Version

+

AquaQ TorQ has been built and tested on the linux and OSX operating +systems though as far as we are aware there is nothing that would make +this incompatible with Solaris or Windows. It has also been tested with +kdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+ +versions or operating systems.

+

+

License

+

This code is released under the MIT license.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/site/Processes/index.html b/site/Processes/index.html new file mode 100644 index 000000000..152fa1eef --- /dev/null +++ b/site/Processes/index.html @@ -0,0 +1,1779 @@ + + + + + + + + + + + + Processes - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

+

Processes

+

A set of processes is included. These processes build upon AquaQ TorQ, +providing specific functionality. All the process scripts are contained +in $KDBCODE/processes. All processes should have an entry in +$KDBCONFIG/process.csv. All processes can have any type and name, +except for discovery services which must have a process type of +“discovery”. An example process.csv is:

+
aquaq$ cat config/process.csv
+host,port,proctype,procname
+aquaq,9998,rdb,rdb_europe_1
+aquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1
+aquaq,9996,discovery,discovery1
+aquaq,9995,discovery,discovery2
+aquaq,8000,gateway,gateway1
+aquaq,5010,tickerplant,tickerplant1
+aquaq,5011,rdb,rdb1
+aquaq,5012,hdb,hdb1
+aquaq,5013,hdb,hdb2
+aquaq,9990,tickerlogreplay,tpreplay1
+aquaq,20000,kill,killhdbs
+aquaq,20001,monitor,monitor1
+aquaq,20002,housekeeping,hk1
+
+

+

Discovery Service

+

Overview

+

Processes use the discovery service to register their own availability, +find other processes (by process type) and subscribe to receive updates +for new process availability (by process type). The discovery service +does not manage connections- it simply returns tables of registered +processes, irrespective of their current availability. It is up to each +individual process to manage its own connections.

+

The discovery service uses the process.csv file to make connections to +processes on start up. After start up it is up to each individual +process to attempt connections and register with the discovery service. +This is done automatically, depending on the configuration parameters. +Multiple discovery services can be run in which case each process will +try to register and retrieve process details from each discovery process +it finds in its process.csv file. Discovery services do not replicate +between themselves. A discovery process must have its process type +listed as discovery.

+

To run the discovery service, use a start line such as:

+
aquaq $ q torq.q -load code/processes/discovery.q -p 9995
+
+

Modify the configuration as required.

+

Operation

+
    +
  1. +

    Processes register with the discovery service.

    +

    Discovery service
+registration

    +
  2. +
  3. +

    Processes use the discovery service to locate other processes.

    +

    Process location

    +
  4. +
  5. +

    When new services register, any processes which have registered an + interest in that process type are notified.

    +

    Notification

    +
  6. +
+

Available Processes

+

The list of available processes can be found in the .servers.SERVERS +table.

+
q).servers.SERVERS                                                                                                                                                                                                                                                            
+procname     proctype        hpup            w  hits startp                        lastp                         endp attributes                                                                   
+-------------------------------------------------------------------------------------
+discovery1   discovery       :aquaq:9995     0                                  2014.01.22D17:00:40.947470000      ()!()                                                                        
+discovery2   discovery       :aquaq:9996     0                                  2014.01.22D17:00:40.947517000      ()!()                                                                        
+hdb2         hdb             :aquaq:5013     0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
+killtick     kill            :aquaq:20000    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
+tpreplay1    tickerlogreplay :aquaq:20002    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
+tickerplant1 tickerplant     :aquaq:5010  6  0    2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000      ()!()                                                                        
+monitor1     monitor         :aquaq:20001 9  0    2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000      ()!()                                                                        
+rdb1         rdb             :aquaq:5011  7  0    2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000      `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades)          
+hdb3         hdb             :aquaq:5012  8  0    2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000      `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)
+gateway1     gateway         :aquaq:5020  10 0    2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000      ()!()
+
+

+

Gateway

+

A synchronous and asynchronous gateway is provided. The gateway can be +used for load balancing and/or to join the results of queries across +heterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should +only be used with asynchronous calls. Synchronous calls cause the +gateway to block so limits the gateway to serving one query at a time +(although if querying across multiple backend servers the backend +queries will be run in parallel). When using asynchronous calls the +client can either block and wait for the result (deferred synchronous) +or post a call back function which the gateway will call back to the +client with. With both asynchronous and synchronous queries the backend +servers to execute queries against are selected using process type. The +gateway API can be seen by querying .api.p“.gw.*” within a gateway +process.

+

Gateway behaviour

+

Asynchronous Behaviour

+

Asynchronous queries allow much greater flexibility. They allow multiple +queries to be serviced at once, prioritisation, and queries to be timed +out. When an asynchronous query is received the following happens:

+
    +
  • +

    the query is placed in a queue;

    +
  • +
  • +

    the list of available servers is retrieved;

    +
  • +
  • +

    the queue is prioritised, so those queries with higher priority are + serviced first;

    +
  • +
  • +

    queries are sent to back end servers as they become available. Once + the backend server returns its result, it is given another query;

    +
  • +
  • +

    when all the partial results from the query are returned the results + are aggregated and returned to the client. They are either returned + directly, or wrapped in a callback and posted back asynchronously to + the client.

    +
  • +
+

The two main customisable features of the gateway are the selection of +available servers (.gw.availableservers) and the queue prioritisation +(.gw.getnextqueryid). With default configuration, the available servers +are those servers which are not currently servicing a query from the +gateway, and the queue priority is a simple FIFO queue. The available +servers could be extended to handle process attributes, such as the +available datasets or the location of the process, and the queue +prioritisation could be modified to anything required e.g. based on the +query itself, the username, host of the client etc.

+

An asynchronous query can be timed out using a timeout defined by the +client. The gateway will periodically check if any client queries have +not completed in the alotted time, and return a timeout error to the +client. If the query is already running on any backend servers then they +cannot be timed out other than by using the standard -T flag.

+

Synchronous Behaviour

+

When using synchronous queries the gateway can only handle one query at +a time and cannot timeout queries other than with the standard -T flag. +All synchronous queries will be immediately dispatched to the back end +processes. They will be dispatched using an asyhcnronous call, allowing +them to run in parallel rather than serially. When the results are +received they are aggregated and returned to the client.

+

Process Discovery

+

The gateway uses the discovery service to locate processes to query +across. The discovery service will notify the gateway when new processes +become available and the gateway will automatically connect and start +using them. The gateway can also use the static information in +process.csv, but this limits the gateway to a predefined list of +processes rather than allowing new services to come online as demand +requires.

+

Error Handling

+

When synchronous calls are used, q errors are returned to clients as +they are encountered. When using asynchronous calls there is no way to +return actual errors and appropriately prefixed strings must be used +instead. It is up to the client to check the type of the received result +and if it is a string then whether it contains the error prefix. The +error prefix can be changed, but the default is “error: ”. Errors will +be returned when:

+
    +
  • +

    the client requests a query against a server type which the gateway + does not currently have any active instances of (this error is + returned immediately);

    +
  • +
  • +

    the query is timed out;

    +
  • +
  • +

    a back end server returns an error;

    +
  • +
  • +

    a back end server fails;

    +
  • +
  • +

    the join function fails.

    +
  • +
+

If postback functions are used, the error string will be posted back +within the postback function (i.e. it will be packed the same way as a +valid result).

+

Client Calls

+

There are four main client calls. The .gw.sync* methods should only be +invoked synchronously, and the .gw.async* methods should only be +invoked asynchronously. Each of these are documented more extensively in +the gateway api. Use .api.p“.gw.*” for more details.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionDescription
.gw.syncexec[query; servertypes]Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.
.gw.syncexecj[query; servertypes; joinfunction]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results.
.gw.asyncexec[query; servertypes]Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.
.gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.
+

For the purposes of demonstration, assume that the queries must be run +across an RDB and HDB process, and the gateway has one RDB and two HDB +processes available to it.

+
q).gw.servers                                                                                                                                                                                                                                                                 
+handle| servertype inuse active querycount lastquery                     usage                attributes                   
+------| --------------------------------------------------------------------
+7     | rdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk
+8     | hdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk
+9     | hdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk
+12    | rdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk
+
+

Both the RDB and HDB processes have a function f and table t defined. f +will run for 2 seconds longer on the HDB processes then it will the RDB.

+
q)f                                                                                                                                                                                                                                                                           
+{system"sleep ",string x+$[`hdb=.proc.proctype;2;0]; t}
+q)t                                                                                                                                                                                                                                                                           
+a   
+----
+5013
+5014
+5015
+5016
+5017
+
+

Run the gateway. The main parameter which should be set is the +.servers.CONNECTIONS parameter, which dictates the process types the +gateway queries across. Also, we need to explicitly allow sync calls. We +can do this from the config or from the command line.

+
q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb
+
+

Start a client and connect to the gateway. Start with a sync query. The +HDB query should take 4 seconds and the RDB query should take 2 seconds. +If the queries run in parallel, the total query time should be 4 +seconds.

+
q)h:hopen 8000                                                                                                                                                                                                                                                                
+q)h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                            
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                         
+4009
+
+

If a query is done for a server type which is not registered, an error +is returned:

+
q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other)                                                                                                                                                                                                                                   
+`not all of the requested server types are available; missing other
+
+

Custom join functions can be specified:

+
q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x})                                                                                                                                                                                                  
+a   | x
+----| -
+5014| 2
+5015| 2
+5016| 2
+5017| 1
+5018| 1
+5012| 1
+5013| 1
+
+

Custom joins can fail with appropriate errors:

+
q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x})                                                                                                                                                                                                  
+`failed to apply supplied join function to results: b
+
+

Asynchronous queries must be sent in async and blocked:

+
q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::)                                                                                                                                                                                                                          
+    /- This white space is from pressing return
+    /- the client is blocked and unresponsive
+
+q)q)q)                                                                                                                                                                                                                                                                        
+q)                                                                                                                                                                                                                                                                            
+q)r                                                                                                                                                                                                                                                                           
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+q)
+
+

We can send multiple async queries at once. Given the gateway has two +RDBs and two HDBs avaialble to it, it should be possible to service two +of these queries at the same time.

+
q)h:hopen each 8000 8000                                                                                                                                                                                                                                                      
+q)\t (neg h)@\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\:(::); r:h@\:(::)
+4012
+q)r                                                                                                                                                                                                                                                                           
++(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016
++(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003
+
+

Alternatively async queries can specify a postback so the client does +not have to block and wait for the result. The postback function must +take two parameters- the first is the function that was sent up, the +second is the results. The postback can either be a lambda, or the name +of a function.

+
q)h:hopen 8000                                                                                                                                                                                                                                                                
+q)handleresults:{-1(string .z.z)," got results"; -3!x; show y}                                                                                                                                                                                                                
+q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn)                                                                                                                                                                                                           
+q)
+q)  /- These q prompts are from pressing enter
+q)  /- The q client is not blocked, unlike the previous example
+q)
+q)2014.01.07T16:53:42.481 got results
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+
+/- Can also use a named function rather than a lambda
+q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)
+q)
+q)              
+q)2014.01.07T16:55:12.235 got results
+a   
+----
+5014
+5015
+5016
+5017
+5018
+5012
+5013
+5014
+5015
+5016
+
+

Asynchronous queries can also be timed out. This query will run for 22 +seconds, but should be timed out after 5 seconds. There is a tolerance +of +5 seconds on the timeout value, as that is how often the query list +is checked. This can be reduced as required.

+
q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)
+
+q)q)q)r                                                                                                                                                                                                                                                                       
+"error: query has exceeded specified timeout value"
+q)\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)                                                                                                                                                                                                  
+6550
+
+

Non kdb+ Clients

+

All the examples in the previous section are from clients written in q. +However it should be possible to do most of the above from non kdb+ +clients. The officially supported APIs for Java, C# and C allow the +asynchronous methods above. For example, we can modify the try block in +the main function of the Java Grid +Viewer:

+
import java.awt.BorderLayout;
+import java.awt.Color;
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+import kx.c;
+
+public class Main {
+    public static class KxTableModel extends AbstractTableModel {
+        private c.Flip flip;
+        public void setFlip(c.Flip data) {
+            this.flip = data;
+        }
+
+        public int getRowCount() {
+            return Array.getLength(flip.y[0]);
+        }
+
+        public int getColumnCount() {
+            return flip.y.length;
+        }
+
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            return c.at(flip.y[columnIndex], rowIndex);
+        }
+
+        public String getColumnName(int columnIndex) {
+            return flip.x[columnIndex];
+        }
+    };
+
+    public static void main(String[] args) {
+        KxTableModel model = new KxTableModel();
+        c c = null;
+        try {
+            c = new c("localhost", 8000,"username:password");
+            // Create the query to send
+        String query=".gw.asyncexec[(`f;2);`hdb`rdb]";
+            // Send the query 
+        c.ks(query);
+            // Block on the socket and wait for the result
+        model.setFlip((c.Flip) c.k());
+        } catch (Exception ex) {
+            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
+        } finally {
+            if (c != null) {try{c.close();} catch (IOException ex) {}
+          }
+        }
+        JTable table = new JTable(model);
+        table.setGridColor(Color.BLACK);
+        String title = "kdb+ Example - "+model.getRowCount()+" Rows";
+        JFrame frame = new JFrame(title);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
+        frame.setSize(300, 300);
+        frame.setVisible(true);
+    }
+}
+
+

Some of the unofficially supported APIs may only allow synchronous calls +to be made.

+

+

Real Time Database (RDB)

+

The Real Time Database is a modified version of r.q found in kdb+tick. +The modifications from the standard r.q include:

+
    +
  • +

    Tickerplant (data source) and HDB location derived from processes + defined by the discovery service or from config file;

    +
  • +
  • +

    Automatic re-connection and resubscription to tickerplant;

    +
  • +
  • +

    List of tables to subscribe to supplied as configuration setting;

    +
  • +
  • +

    More pre-built flexibility in end-of-day;

    +
  • +
  • +

    More verbose end-of-day logging;

    +
  • +
  • +

    Reload multiple authenticated HDBs after end-of-day;

    +
  • +
  • +

    End-of-day save down manipulation code is shared between RDB, WDB + and tickerplant log replay

    +
  • +
+

See the top of the file for more information.

+

+

Write Database (WDB)

+

The Write Database or WDB is based on w.q. This process features a +number of modifications and enhancements over w.q:

+
    +
  1. +

    Provides the option to write down to a custom partition scheme, + defined by parted columns in sort.csv, which removes the need for + end of day sorting;

    +
  2. +
  3. +

    Greater configuration options; max rows on a per table basis, list + subscription tables, upd function etc. See the top of the process + file for the options;

    +
  4. +
  5. +

    Use of common code with the RDB and Tickerplant Log Replay process + to manipulate tables before save, sort and apply attributes;

    +
  6. +
  7. +

    Checks whether to persist data to disk on a timer rather than on + each tick;

    +
  8. +
  9. +

    Informs other RDB, HDB and GW processes that end of day save and + sort has completed;

    +
  10. +
  11. +

    More log information supplied.

    +
  12. +
+

The WDB process can broken down into two main functions:

+
    +
  1. +

    Periodically saving data to disk and

    +
  2. +
  3. +

    Sorting data at end of day

    +
  4. +
+

The WDB process provides flexibility so it can be set-up as a +stand-alone process that will both save and sort data or two separate +processes (one that saves the data and another that will sort the data +on disk). This allows greater flexibility around the end of day event as +sorting data can be time consuming. It is also helps when implementing +seemless rollovers (i.e. no outage window at end-of-day).

+

The behaviour of the WDB process is controlled by the .wdb.mode +parameter. This should be set to one of following three values:

+
    +
  • +

    saveandsort - the process will subscribe for data, periodically + write data to disk and at EOD it will flush remaining data to disk + before sorting it and informing GWs, RDBs and HDBs etc.

    +
  • +
  • +

    save - the process will subscribe for data, periodically write data + to disk and at EOD it will flush remaining data to disk. It will + then inform its respective sort mode process to sort the data

    +
  • +
  • +

    sort - the process will wait to get a trigger from its respective + save mode process. When this is triggered it will sort the data on + disk, apply attributes and the trigger a reload on the RDB, HDB and + GW processes

    +
  • +
+

When running a system with separate save and sort process, the sort +process should be configured in the processes.csv file with a proctype +of sort. The save process will check for processes with a proctype of +sort when it attempts to trigger the end of day sort of the data.

+

The wdb process provides two methods for persisting data to disk and +sorting at the end of the day.

+
    +
  • +

    default - Data is persisted into a partition defined by the + [partitiontype] variable, similar to the hdb partition scheme. The + general scheme is of the form + [wdbdir]/[partitiontype]/[table]/. And a typical partition + directory would be similar to wdb/database/2015.11.26/trades/. At + the end of the day, before being moved to the hdb, the data is + sorted according to parameters defined in sort.csv. For each table, + sort.csv will specify the columns to sort (using xasc) and apply + attributes to.

    +
  • +
  • +

    partbyattr - Data is persisted to a custom partition scheme, derived + from parameters in the sort.csv file. The write down scheme is taken + from sort.csv, to reflect the effect of using xasc at the end of + day. For each table, the columns defined in sort.csv, with the + parted attribute, are used to create custom partitions in the wdb. + Multiple columns can be defined with the parted attribute and + distinct combinations of each are generated for custom partitions. + The general partition scheme is of the form + [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a + typical partition directory would be similar to + wdb/database/2015.11.26/trade/MSFT_N. In the above example, the + data is parted by sym and source, and so a unique partition + directory MSFT_N is created in the wdb directory.

    +

    At the end of the day, data is upserted into the hdb without the + need for sorting. The number of rows that are joined at once is + limited by the mergenumrows and mergenumtab parameters.

    +
  • +
+

The optional partbyattr method may provide a significant saving in time +at the end of day, allowing the hdb to be accessed sooner. For large +data sets with a low cardinality (ie. small number of distinct elements) +the optional method may provide a significant time saving, upwards of +50%. The optional method should also reduce the memory usage at the end +of day event, as joining data is generally less memory intensive than +sorting.

+

+

Tickerplant Log Replay

+

The Tickerplant Log Replay script is for replaying tickerplant logs. +This is useful for:

+
    +
  1. +

    handling end of day save down failures;

    +
  2. +
  3. +

    handling large volumes of data (larger than can fit into RAM).

    +
  4. +
+

The process takes as the main input either an individual log file to +replay, or a directory containing a set of log files. Amongst other +functionality, the process can:

+
    +
  • +

    replay specific message ranges;

    +
  • +
  • +

    replay in manageable message chunks;

    +
  • +
  • +

    recover as many messages as possible from a log file rather than + just stopping at the first bad message;

    +
  • +
  • +

    ignore specific tables;

    +
  • +
  • +

    modify the tables before or after they are saved;

    +
  • +
  • +

    apply sorting and parting after all the data is written out.

    +
  • +
+

The process must have some variables set (the tickerplant log file or +directory, the schema file, and the on-disk database directory to write +to) or it will fail on startup. These can either be set in the config +file, or overridden from the command line in the usual way. An example +start line would be:

+
q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1
+
+

The tickerplant log replay script has extended usage information which +can be accessed with -.replay.usage.

+
q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage
+
+

+

Housekeeping

+

The housekeeping process is used to undertake periodic system +housekeeping and maintenance, such as compressing or removing files +which are no longer required. The process will run the housekeeping jobs +periodically on a timer. Amongst other functionality the process:

+
    +
  • +

    Allows for removing and zipping of directory files;

    +
  • +
  • +

    Provides an inbuilt search utility and selectively searches using a + ‘find’ and ‘exclude’ string, and an ‘older than’ parameter;

    +
  • +
  • +

    Reads all tasks from a single CSV;

    +
  • +
  • +

    Runs on a user defined timer;

    +
  • +
  • +

    Can be run immediately from command line or within the process;

    +
  • +
  • +

    Can be easily extended to include new user defined housekeeping + tasks.

    +
  • +
+

The process has two main parameters that should be set prior to use; +runtimes and inputcsv.‘Runtimes’ sets the timer to run housekeeping at +the set time(s), and ‘Inputcsv’ provides the location of the +housekeeping csv file. These can either be set in the config file, or +overridden via the command line. If these are not set, then default +parameters are used; 12.00 and ‘KDBCONFIG/housekeeping.csv’ +respectively. The process is designed to run from a single csv file with +five headings:

+
    +
  • +

    Function details the action that you wish to be carried out on the + files, initially, this can be rm (remove) and zip (zipping);

    +
  • +
  • +

    Path specifies the directory that the files are in;

    +
  • +
  • +

    Match provides the search string to the find function, files + returned will have names that match this string;

    +
  • +
  • +

    Exclude provides a second string to the find function, and these + files are excluded from the match list;

    +
  • +
  • +

    Age is the ‘older than’ parameter, and the function will only be + carried out on files older than the age given (in days).

    +
  • +
+

An example csv file would be:

+
function,path,match,exclude,age
+zip,./logs/,*.log,*tick*,2
+rm,./logs/,*.log*,*tick*,4
+zip,./logs/,*tick*,,1
+rm,./logs/,*tick*,,3
+
+function path      match    exclude  age
+----------------------------------------
+zip      "./logs/" "*.log"  "*tick*" 2
+rm       "./logs/" "*.log*" "*tick*" 4
+zip      "./logs/" "*tick*" ""       1
+rm       "./logs/" "*tick*" ""       3
+
+

The process reads in the csv file, and passes it line by line to a +‘find’ function; providing a dictionary of values that can be used to +locate the files required. The find function takes advantage of system +commands to search for the files according to the specifications in the +dictionary. A search is performed for both the match string and the +exclude string, and cross referenced to produce a list of files that +match the parameters given. The files are then each passed to a further +set of system commands to perform the task of either zipping or +removing. Note that an incomplete csv or non-existant path will throw an +error.

+

The remove and zipping functions form only basic implimentations of the +housekeeping process; it is designed to be exended to include more +actions than those provided. Any user function defined in the +housekeeping code can be employed in the same fashion by providing the +name of the function,search string and age of files to the csv.

+

As well as being scheduled on a timer, the process can also be run +immediately. Adding ‘-hk.runnow 1’ to the command line when starting the +process will force immediate running of the actions in the housekeeping +csv. Likewise, setting runnow to 1b in the config file will immediately +run the cleaning process. Both methods will cause the process to exit +upon completion. Calling hkrun[] from within the q process will also +run the csv instructions immediately. This will not affect any timer +scheduling and the process will remain open upon completion.

+

Housekeeping works both on windows and unix based systems. Since the +process utilizes inbuilt system commands to perform maintenances, a +unix/windows switch detects the operating system of the host and applies +either unix or widows functions appropriately. Extensions need only be +made in the namespace of the hosting operating system (i.e. if you are +using a unix system, and wish to add a new function, you do not need to +add the function to the windows namespace to). Usage information can be +accessed using the ‘-hkusage’ flag:

+
q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage
+
+

+

File Alerter

+

The file alerter process is a long-running process which periodically +scans a set of directories for user-specified files. If a matching file +is found it will then carry out a user-defined function on it. The files +to search for and the functions to run are read in from a csv file. +Additionally, the file alerter process can:

+
    +
  • +

    run more than one function on the specified file.

    +
  • +
  • +

    optionally move the file to a new directory after running the + function.

    +
  • +
  • +

    store a table of files that have already been processed.

    +
  • +
  • +

    run the function only on new files or run it every time the file is + modified.

    +
  • +
  • +

    ignore any matching files already on the system when the process + starts and only run a function if a new file is added or a file is + modified.

    +
  • +
+

The file alerter process has four parameters which should be set prior +to use. These parameters can either be set in the config file or +overridden on the command-line. If they are not set, the default +parameters will be used. The parameters are as follows.

+

inputcsv - The name and location of the csv file which defines the +behaviour of the process. The default is KDBCONFIG/filealerter.csv.

+

polltime - How often the process will scan for matching files. The +default is 0D:00:01, i.e., every minute.

+

alreadyprocessed - The name and location of the already-processed +table. The default is KDBCONFIG/filealerterprocessed. This table will +be created automatically the first time the process is ran.

+

skipallonstart - If this is set to 1, it will ignore all files +already on the system; if it is set to 0, it will not. The default +value is 0.

+

The files to find and the functions to run are read in from a csv file +created by the user. This file has five columns, which are detailed +below.

+

path - This is the path to the directory that will be scanned for +the file.

+

match - This is a search string matching the name of the file to be +found. Wildcards can be used in this search, for example, “file*” will +find all files starting with “fil”.

+

function - This is the name of the function to be run on the file. +This function must be defined in the script +KDBCODE/processes/filealerter.q. If the function is not defined or fails +to run, the process will throw an error and ignore that file from then +on.

+

newonly - This is a boolean value. If it is set to 1, it will +only run the function on the file if it has been newly created. If it is +set to 0, then it will run the function every time the file is +modified.

+

movetodirectory - This is the path of the directory you would like +to move the file to after it has been processed. If this value is left +blank, the file will not be moved.

+

It is possible to run two separate functions on the same file by adding +them as separate lines in the csv file. If the file is to be moved after +it is processed, the file alerter will run both functions on the file +and then attempt to move it. A typical csv file to configure the file +alerter would look like:

+
path,match,function,newonly,movetodirectory
+/path/to/dirA,fileA.*,copy,0,/path/to/newDir
+/path/to/dirB,fileB.txt,email,1,
+/path/to/dirA,fileA.*,delete,0,/path/to/newDir
+
+path        match      function  newonly    movetodirectory
+---------------------------------------------------
+"/path/to/dirA" "fileA.*"   copy    0   "/path/to/newDir"
+"/path/to/dirB" "fileB.txt" email   1   ""
+"/path/to/dirA" "fileA.*"   delete  0   "/path/to/newDir"
+
+

The file alerter process reads in each line of the csv file and searches +files matching the search string specified in that line. Note that there +may be more than one file found if a wildcard is used in the search +string. If it finds any files, it will check that they are not in the +already processed table. If newonly is set to 1, it only checks if +the filename is already in the table. If newonly is set to 0, it +checks against the filename, filesize and a md5 hash of the file. The +md5 hash and the filesize are used to determine if the file has been +modified since it was processed last. If the found files have not been +processed already, it then attempts to run the specified function to +these files.

+

After the process has run through each line of the csv, it generates a +table of all files that were processed on that run. These files are +appended to the already processed table which is then saved to disk. The +file alerter will attempt to move the files to the ‘movetodirectory’, if +specified. If the file has already been moved during the process (for +example, if the function to run on it was ‘delete’), the file alerter +will not attempt to move it.

+

The file alerter is designed to be extended by the user. Customised +functions should be defined within the filealerter.q script. They should +be diadic functions, i.e., they take two parameters: the path and the +filename. As an example, a simple function to make a copy of a file in +another directory could be:

+
copy:{[path;file] system "cp ", path,"/", file, " /path/to/newDir"}
+
+

Although the process is designed to run at regular intervals throughout +the day, it can be called manually by invoking the FArun[] command +from within the q session. Similarly, if new lines are added to the csv +file, then it can be re-loaded by calling the loadcsv[] command +from the q session.

+

Each stage of the process, along with any errors which may occur, are +appropriately logged in the usual manner.

+

The file alerter process is designed to work on both Windows and Unix +based systems. Since many of the functions defined will use inbuilt +system command they will be need to written to suit the operating system +in use. It should also be noted that Windows does not have an inbuilt +md5 hashing function so the file alerter will only detect different +versions of files if the filename or filesize changes.

+

+

Reporter

+

Overview

+

The reporter process is used to run periodic reports on specific +processes. A report is the result of a query that is run on a process at +a specific time. The result of the query is then handled by one of the +inbuilt result handlers, with the ability to add custom result handlers.

+

Reporter process

+

Features:

+
    +
  • +

    Easily create a report for information that you want;

    +
  • +
  • +

    Fully customizable scheduling such as start time, end time and days + of the week;

    +
  • +
  • +

    Run reports repeatedly with a custom period between them;

    +
  • +
  • +

    Asynchronous querying with custom timeout intervals;

    +
  • +
  • +

    Inbuilt result handlers allow reports to be written to file or + published;

    +
  • +
  • +

    Custom result handlers can be defined;

    +
  • +
  • +

    Logs each step of the report process;

    +
  • +
  • +

    Fully integrated with the TorQ gateway to allow reports to be run + across backend processes.

    +
  • +
+

The reporter process has three parameters that are read in on +initialisation from the reporter.q file found in the +$KDBCONFIG/settings directory. These settings are the string filepath +of the input csv file, a boolean to output log messages and timestamp +for flushing the query log table.

+

To run the reporter process:

+
q torq.q -load code/processes/reporter.q -p 20004
+
+

Once the reporter process has been initiated, the reports will be +scheduled and no further input is required from the user.

+

Report Configuration

+

By default, the process takes its inputs from a file called reporter.csv +which is found in the $KDBCONFIG directory. This allows the user +complete control over the configuration of the reports. As the queries +are evaluated on the target process, local variables can be referenced +or foreign functions can be run. Table [table:reportertable] shows the +meaning of the csv schema.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Column HeaderDescription and Example
nameReport name e.g. Usage
queryQuery to be evaluated on that process. It can be a string query or function
resulthandlerResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[“./output”;“usage”]
gatewayIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway
joinfunctionUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze
proctypeThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb
procnameThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1
startTime on that day to start at e.g. 12:00
endTime on that day that the report will stop at e.g. 23:00
periodThe period between each report query e.g. 00:00:10
timeoutintervalThe amount of time the reporter waits before timing out a report e.g. 00:00:30
daysofweekNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday
+

When running a report on a gateway, the gateway field must be set to the +proctype of the gateway that will be queried. It will then run the +report on the processes which are listed in the proctype field and join +the results by using the function specified in the joinfunction field. +If there is no join function then the reporter process will not start. +Multiple entries in the proctype field must be separated by a space and +are only allowed when the gateway field is not empty. If gateway field +is empty and there are multiple entries in the proctype field then the +reporter process will not load.

+

Listing [code:csvschema] shows an example of the schema needed in the +input csv file.

+
name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
+usage|10#.usage.usage|writetofiletype["./output/";"usage";"csv"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6
+memory|.Q.w[]|writetofile["./output/";"memory.csv"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6
+usage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6
+
+

Result Handlers

+

There are several default result handlers which are listed below. Custom +result handlers can be defined as required. The result handler will be +invoked with a single parameter (the result of the query).

+

writetofiletype - Accepts 3 parameters: path, filename, filetype and +data. When writing to file it uses a date time suffix so the resultant +filename will be usage_rdb_2014_01_02_15_00_12.txt e.g.

+
writetofiletype["./output/";"usage";"csv"]
+
+

splaytable - This accepts 3 parameters: path, file and data. This +splays the result to a directory. The result must be a table in order to +use this function e.g.

+
splaytable["./output/";"usage"]
+
+

emailalert - This accepts 3 parameters: period, recipient list and +data. The period dictates the throttle i.e. emails will be sent at most +every period. The result of the report must be a table with a single +column called messages which contains the character list of the email +message. This is used with the monitoring checks to raise alerts, but +can be used with other functions.

+
emailalert[0D00:30;("test@aquaq.co.uk";"test1@aquaq.co.uk")]
+
+

emailreport - This accepts 3 parameters: temporary path, recipient +list, file name, file type and data. The data is written out as the file +type (e.g. csv, xml, txt, xls, json) with the given file name to the +temporary path. It is then emailed to the recipient list, and the +temporary file removed.

+
emailreport["./tempdir/"; ("test@aquaq.co.uk";"test1@aquaq.co.uk"); "EndOfDayReport"; "csv"]
+
+

publishresult - Accepts 1 parameter and that is the data. This is +discussed later in the subsection subresults. +Custom result handlers can be added to $KDBCODE/processes/reporter.q . +It is important to note that the result handler is referencing local +functions as it is executed in the reporter process and not the target +process. When the query has been successful the result handler will be +passed a dictionary with the following keys: queryid, time, name, +procname, proctype and result.

+

Report Process Tracking

+

Each step of the query is logged by the reporter process. Each query is +given a unique id and regular system messages are given the id 0. The +stage column specifies what stage the query is in and these are shown in +table [table:stagetable]. An appropriate log message is also shown so +any problems can easily be diagnosed. The in memory table is flushed +every interval depending on the value of the flushqueryloginterval +variable in the reporter.q file found in the $KDBCONFIG/settings +directory.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Stage symbolExplanation
RThe query is currently running
EAn error has occurred during the query
CThe query has been completed with no errors
TThe query has exceeded the timeout interval
SSystem message e.g. “Reporter Process Initialised”
+
time                         | queryid stage message
+-----------------------------| ------------------------------------------------------------------------
+2014.10.20D22:20:06.597035000| 37 R "Received result"
+2014.10.20D22:20:06.600692000| 37 R "Running resulthandler"
+2014.10.20D22:20:06.604455000| 37 C "Finished report"
+2014.10.20D22:30:00.984572000| 38 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
+2014.10.20D22:30:00.991862000| 38 R "Received result"
+2014.10.20D22:30:00.995527000| 38 R "Running resulthandler"
+2014.10.20D22:30:00.999236000| 38 C "Finished report"
+2014.10.20D22:30:06.784419000| 39 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
+2014.10.20D22:30:06.796431000| 39 R "Received result"
+
+

Subscribing for Results

+

To publish the results of the report, the reporter process uses the pub +sub functionality of TorQ. This is done by using the using the inbuilt +result handler called publishresult. In order to subscribe to this feed, +connect to the reporter process and send the function shown below over +the handle. To subscribe to all reports use a backtick as the second +parameter and to subscribe to a specific reports results include the +reporter name as a symbol.

+
/- define a upd function
+upd:insert
+
+/- handle to reporter process
+h: hopen 20004
+
+/- Subscribe to all results that use the publishresult handler
+h(`.ps.subscribe;`reporterprocessresults;`)
+
+/- Subscribe to a specific report called testreport
+h(`.ps.subscribe;`reporterprocessresults;`testreport)
+
+

Example reports

+

The following are examples of reports that could be used in the reporter +process. The rdbtablecount report will run hourly and return the count +of all the tables in a rdb process. The memoryusage report will run +every 10 minutes against the gateway for multiple processes and will +return the .Q.w[] information. Both of these reports run between +9:30am to 4:00pm during the weekdays. The report onetimequery is an +example of a query that is run one time, in order to run a query once, +the period must be the same as the difference between the start and end +time.

+
name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
+rdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6
+memoryusage|.Q.w[]|writetofile["./output/";"memory.csv"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6
+onetimequery|10#.usage.usage|writetofile["./output/";"onetime.csv"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6
+
+

+

Monitor

+

The Monitor process is a simple process to monitor the health of the +other processes in the system. It connects to each process that it finds +(by default using the discovery service, though can use the static file +as well) and subscribes to both heartbeats and log messages. It +maintains a keyed table of heartbeats, and a table of all log messages +received.

+

Run it with:

+
aquaq $ q torq.q -load code/processes/monitor.q -p 20001
+
+

It is probably advisable to run the monitor process with the -trap flag, +as there may be some start up errors if the processes it is connecting +to do not have the necessary heartbeating or publish/subscribe code +loaded.

+
aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap
+
+

The current heartbeat statuses are tracked in .hb.hb, and the log +messages in logmsg

+
q)show .hb.hb                                                                                                                                                                                                                                                                 
+sym       procname    | time                          counter warning error
+----------------------| ---------------------------------------------------
+discovery discovery2  | 2014.01.07D13:24:31.848257000 893     0       0    
+hdb       hdb1        | 2014.01.07D13:24:31.866459000 955     0       0    
+rdb       rdb_europe_1| 2014.01.07D13:23:31.507203000 901     1       0    
+rdb       rdb1        | 2014.01.07D13:24:31.848259000 34      0       0
+
+q)show select from logmsg where loglevel=`ERR                                                                                                              
+time                          sym  host  loglevel id      message                               
+-------------------------------------------------------------------------------------
+2014.01.07D12:25:17.457535000 hdb1 aquaq ERR      reload  "failed to reload database"           
+2014.01.07D13:29:28.784333000 rdb1 aquaq ERR      eodsave "failed to save tables : trade, quote"
+
+

HTML5 front end

+

A HTML5 front end has been built to display important process +information that is sent from the monitor process. It uses HTML5, +WebSockets and JavaScript on the front end and interacts with the +monitor process in the kdb+ side. The features of the front end include:

+
    +
  • +

    Heartbeat table with processes that have warnings highlighted in + orange and errors in red

    +
  • +
  • +

    Log message table displaying the last 30 errors

    +
  • +
  • +

    Log message error chart that is by default displayed in 5 minute + bins

    +
  • +
  • +

    Chart’s bin value can be changed on the fly

    +
  • +
  • +

    Responsive design so works on all main devices i.e. phones, tablets + and desktop

    +
  • +
+

It is accessible by going to the url http://HOST:PORT/.non?monitorui

+

+

Compression

+

The compression process is a thin wrapper around the compression utility +library. It allows periodic compression of whole or parts of databases +(e.g. data is written out uncompressed and then compressed after a +certain period of time). It uses four variables defined in +KDBCONFIG/settings/compression.q which specify

+
    +
  • +

    the compression configuration file to use

    +
  • +
  • +

    the database directory to compress

    +
  • +
  • +

    the maximum age of data to attempt to compress

    +
  • +
  • +

    whether the process should exit upon completion

    +
  • +
+

The process is run like other TorQ processes:

+
q torq.q -load code/processes/compression.q -p 20005
+
+

Modify the settings file or override variables from the command line as +appropriate.

+

+

Kill

+

The kill process is used to connect to and terminate currently running +processes. It kills the process by sending the exit command therefore +the kill process must have appropriate permissions to send the command, +and it must be able to create a connection (i.e. it will not be able to +kill a blocked process in the same way that the unix command kill -9 +would). By default, the kill process will connect to the discovery +service(s), and kill the processes of the specified types. The kill +process can be modified to not use the discovery service and instead use +the process.csv file via the configuration in the standard way.

+

If run without any command line parameters, kill.q will try to kill each +process it finds with type defined by its .servers.CONNECTIONS variable.

+
q torq.q -load code/processes/kill.q -p 20000
+
+

.servers.CONNECTIONS can optionally be overridden from the command line +(as can any other process variable):

+
q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant
+
+

The kill process can also be used to kill only specific named processes +within the process types:

+
q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2
+
+

+

Chained Tickerplant

+

In tick+ architecture the main tickerplant is the most important +component, as it is relied upon by all the real time subscribers. When +the tickerplant goes down data will be lost, compare this to an rdb +which can be recovered after it fails. The chained tickerplant process +is an additional tickerplant that is a real time subscriber to the main +tickerplant but replicates its behaviour. It will have its own real time +subscribers and can be recovered when it fails. This is the recommended +approach when users want to perform their own custom real time analysis.

+

The chained tickerplant can:

+
    +
  • +

    subscribe to specific tables and syms

    +
  • +
  • +

    batch publish at an interval or publish tick by tick

    +
  • +
  • +

    create a tickerplant log that its real time subscribers can replay

    +
  • +
  • +

    replay the source tickerplant log

    +
  • +
+

To launch the chained tickerplant

+
q torq.q -load code/processes/chainedtp.q -p 12009
+
+

Chained tickerplant settings are found in config/settings/chainedtp.q +and are under the .ctp namespace.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingExplanationDefault
tickerplantnamelist of tickerplant names to try and make a connection to`tickerplant1
pubintervalpublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick0D00:00:00
tpconnsleepnumber of seconds between attempts to connect to the source tickerplant10
createlogfilecreate a log file0b
logdirdirectory containing chained tickerplant logs`:hdb
subscribetosubscribe to these tables only (null for all)`
subscribesymssubscribe to these syms only (null for all)`
replayreplay the tickerplant log file0b
schemaretrieve schema from tickerplant1b
clearlogonsubscriptionclear log on subscription, only called if createlogfile is also enabled0b
+

+

Integration with kdb+tick

+

AquaQ TorQ can be fully integrated with kdb+tick. For further details, +use one of the AquaQ TorQ Starter packs to set up a production kdb+ data +capture system.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/site/assets/fonts/icon.eot b/site/assets/fonts/icon.eot new file mode 100755 index 0000000000000000000000000000000000000000..8f81638c2de436e1b5cc77b6a2693b2b347a0151 GIT binary patch literal 2224 zcmaJDYiN^K^qhP1ZcHEMVbZM4%Vs7uwoQ|)E~(XOx7OBXnq))T&RAn>*Cw^Cqp}}H zWH6912NR|+2m5JcjIkeMjv=!Q9249yfx%!u#)^-T>W{&MHQBjeBBo>Pe4KmF^E>CB z@7#O8&r|?g2oV@;1cVDHB*W2-a$#G6b3^#>-#P#loPbHlK$=uKI0z}2f>SUHNmw9> z5fUU>fJL$rHa6%4A9RqW){j^bqzea^bdbuq5*;Zk-LE^Cdn?+_Wk$3IeMJy!S`Wh)UMyN+J zdS?0mGDhF6kI!%~<+qJq>2&vEpxeis4jnV-TbREq7%~}5A-CPp7U&N8yNm|C!pSZ= z>RMgx`%^o6Qv2I!?&%)eT36VWFT?1`lcUl3`6$Mm(PLi)Z77M4~2lu_KixyTMMWFbEgdpD<-HjI^xqTD%xRVN3f% z27EufM7BCq_F{-eA6ANNH2Jt&hXy?n=(b9Pj&yDA7Bp1}?(gblf$p{dxyryAvDrJc zt^F=*bbI@7kDasKZ>5j8H`V(+mJUPmWnFWsN4v+*4sUM2nLSNzr@QTW$GB0}ROgND*=9A% zw1)nnmfd#y?v|l`gH~p?ZtFkf)fup1^YGd6?&$gJGyIAekox zZ*nZ1`&86Qhw@P=Z(>&x;ARp0>8hS~9}KyeD>li(=rCx4^e?QEnx+3`oEyA6+GNZnmZ#7YHL z5IITs5QomaULXEb^rwKI?mhVE*tF(gTJylu*7C253QKlw|iZm6P z(d9W@r8&tvtF(;hi7G9p>(o@G6(o;TX$^Ek_QYf+{q!nMq!t!WWYV@yU&nvnzqQ7- z^ug5BsoCVh#%sLRU?7uTvQ4GZsfFZH>X_~5Y1`mrW+anI`(Qx2;FrKgKL9DZ>czF6 gge97fk?bg(rg2dERTv>l@iX9~idJf0Tk{R{Kaui$V*mgE literal 0 HcmV?d00001 diff --git a/site/assets/fonts/icon.svg b/site/assets/fonts/icon.svg new file mode 100755 index 000000000..86250e7b4 --- /dev/null +++ b/site/assets/fonts/icon.svg @@ -0,0 +1,22 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/site/assets/fonts/icon.ttf b/site/assets/fonts/icon.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b5ab5601bed7765790037c721c2ee1c7d444a7a5 GIT binary patch literal 2072 zcmaJ>ZD^ZS6h7zPd^bx!mX9TkZNApHq|4go%g&_h)~(vEUF()a8EswGW$kL4bZsXc z{#b?xf`|$Z+`tL`T!ufyAL2xYE5gLVlqDbt{t(MPB;9@p4s7DNZ{D%&kLTsw`<$

vJhI<5Xe z^&QFMB)b;UtBYWSqa?48?8v4UGUKsFzmfbg(%Sf&xy$DPi zbfnwchv86wxm^ZkGPbc`Pb6wFS)yL2t0NqW1bfUTqsq-LxEk6$od+|!dou?+Y3~h9 zY;P#-DOO?Z^y#tj#l>+<>OGUe-8Hl1=4scviv7i!dF-^PzW_;|q^3}((HZq>k@AFj za`SOHRw-aIR%U7}ZV;|qiIO54r&n>b%tw?$r;Xb*d)E+ zLNcE$rBZdZYot1yCMT7`AXeUd%+%!=(zRk6$#NWpFMS^h;0NI)@-?8k52LgOu-0U= zCBVG~G#Lq?*De7A**d&!XpsRA_VlrEs3T0F3b4l=&MtlXfX6<*vvZ`^$=Tkwvd6qz z8iPJtmnr?Sp|w$G)EeJ75P4^Ki&gI)c_r2P(eIxe!uGI<-PJcMj4@A(P2KKs_Ky0u zY-`}I-b1@A;pd_gcHE*z#F6Dju3&7>Vf1w|G`p?(`K!fQwLxu;wu}Bk^=rD%Wq6eY zc~C6oNH~UGRY!LKyE`J?ZP;y&M5){Wr@4s+Fxq9d^dSupt=(pox{WSsVA7_dyGQ%T zkLHfS+_m?{LzCx6wl?A1z80_B+wr_>(yVA{@F(`|uv-;+)4*`sUZ-@(rOxUz_){IXb+m(ESuc#BROaaae4B#(WznI{#M;k znD=Nk8f^~`59wO>`-Z2YR;7NICpfCtZB^K&&Rt51V#M4rnyDoB(|4iA;f>}+;x z5otP{++V0d0sZLTyuwn%euOGiis-N8X;i3RN$~RmPl`F;uH@0}4XCtm2B;alSGl#i zTDf&^@W;=v^QH}3D}UNqE(z!PfayTO(nue&J!2t7nh~I_*9l`!Y*`4VjnRT zN2H^_cpFT>oA54t4&T6Sd;!12+jyTTn2qcrYZJUi-4XPpI!TZh1AHOZh9ZTG8Fll3 zj5+Cd%2+}8sEn2L{p)3{B7Lunbzp;&lo1tL(rCz1!wd{CB4bYaZW${GPsvybX0XUu zMf$jmbr6F5sp(u6PQf(fAe+i8EuYF|9o>O0NI?dcV3|y000$i$fUbJydVDxDb7nrh z1cxbT2F}1dq+zMvVKA3nam-}0nWgkf=7i(;S;x?HZZwz624GN1utF(jC^{>pO~VT9 cCrEc3&eA$0)i+9>qL=`6wATCjoC1DrZ;vj6}9 literal 0 HcmV?d00001 diff --git a/site/assets/fonts/icon.woff b/site/assets/fonts/icon.woff new file mode 100755 index 0000000000000000000000000000000000000000..ed0f20d5b80ab98072f3557225b3333e01b78670 GIT binary patch literal 2148 zcmaJ?U2M};6hG(Qeym;Bb)z4&t6RTVr5$BkzZkY-Fqm#^Y(iTNVUx0zjk&dB8w&A( z8e?KYjQT(#L^1J^5+8grk{BY32}Tk$w26s{CdP%2q=N?^NL=f=|NfEk;{E5G`#WF% zbMEQ+-@ZLQGz18=8fKtT+PBtZfuCRFM|SoCU;}B73uHeVHCj?Ez9{;wK zTUn*D_W$R{332`_ehf+gc8O7y@KJ5YhY&;!$@L2j^^(8?0P8LMM)d{^a3azm(bMIS zfRu%hoooWzi3=|~D5MA-b&3&2aI9i2uExtracIOW6c|0?H$$~W zZ9y!=*Vf_)tPsDs7NdhB6d}+3tSBZMy=t#;i_#gmKVB}!H#Q{BF2%~_Sb0P64eD(k z3OrBm<)9XEQD?aJn4IA}hfUH8DkSsCQYuwfJIy)O;WRm^6b7;K<`bqa$B>Q{+ent< zD0~4L6~GU|%jBy^bw5Ul2e8&;vn9a2dNdgcpw}(|J=r?F?P!q!5BB!6aHum(p$f3a z9nNlD$DqePv7>9W&&k=|ce2O5P0c}{t=p7-Mc>w}HEN7+9*Dd@(qz@SM_)~Kee(OK zhp;1TV)t|{3S-REYEyT3oPA^drmcrvRh&Z~^%oU97IgGw;hGw@_ zw{WdEr`D^@(GJmHsD4A|xdN||AP+eZdXI)&A~eej51Z$iVC(RU|96Bn+}^DBZUFQ1>X@m8%S;;ip%T zC`Qa3qnS!_KYb@^(9x;gEzTCV29c)2$^C^Y6wr_U&8sX$|R8 z@T8dYZAu>9)`&_AXLP3y-LKp}d$w}>{?LzKVAm}hwpISJ-KyNBN%K)miDJY&YUw3m zx5+}J)FAUE5{XIzOY|hKUAvk}<+<;l66GmTOp2rQJq25wUUv)C$xc41+%-H(AWe5A zm8g_hNz^3KLmYYUjpo?jVm`(C<=%tOpY8ImEbel;MWjV>(tSr4mRQ8ao9dULW~r$} z7|D5}0$p)g+KbO*$tLVVmn8BLQE{}iV1#!1Z+QzofG^=&xP!a!YrKOGn1b2JF0vZn zb?S~-Ppgvznd#vxxi%CjWX!0W2V~4izeC0f!bfGSr0-uRV-@N9WUK`noTQAX(2%Bq zEH%tP52G^Xr0R1(LwEqj{ug`Uae@E< literal 0 HcmV?d00001 diff --git a/site/assets/images/favicon-e565ddfa3b.ico b/site/assets/images/favicon-e565ddfa3b.ico new file mode 100644 index 0000000000000000000000000000000000000000..e85006a3ce1c6fd81faa6d5a13095519c4a6fc96 GIT binary patch literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` literal 0 HcmV?d00001 diff --git a/site/assets/images/favicon.ico b/site/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e85006a3ce1c6fd81faa6d5a13095519c4a6fc96 GIT binary patch literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` literal 0 HcmV?d00001 diff --git a/site/assets/javascripts/application-997097ee0c.js b/site/assets/javascripts/application-997097ee0c.js new file mode 100644 index 000000000..1199f2e1d --- /dev/null +++ b/site/assets/javascripts/application-997097ee0c.js @@ -0,0 +1 @@ +function pegasus(t,e){return e=new XMLHttpRequest,e.open("GET",t),t=[],e.onreadystatechange=e.then=function(n,o,i,r){if(n&&n.call&&(t=[,n,o]),4==e.readyState&&(i=t[0|e.status/200])){try{r=JSON.parse(e.responseText)}catch(s){r=null}i(r,e)}},e.send(),e}if("document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;o>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/application.js b/site/assets/javascripts/application.js new file mode 100644 index 000000000..1199f2e1d --- /dev/null +++ b/site/assets/javascripts/application.js @@ -0,0 +1 @@ +function pegasus(t,e){return e=new XMLHttpRequest,e.open("GET",t),t=[],e.onreadystatechange=e.then=function(n,o,i,r){if(n&&n.call&&(t=[,n,o]),4==e.readyState&&(i=t[0|e.status/200])){try{r=JSON.parse(e.responseText)}catch(s){r=null}i(r,e)}},e.send(),e}if("document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;o>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/modernizr-4ab42b99fd.js b/site/assets/javascripts/modernizr-4ab42b99fd.js new file mode 100644 index 000000000..e82c90988 --- /dev/null +++ b/site/assets/javascripts/modernizr-4ab42b99fd.js @@ -0,0 +1 @@ +!function(e,t,n){function r(e,t){return typeof e===t}function i(){var e,t,n,i,o,a,s;for(var l in x)if(x.hasOwnProperty(l)){if(e=[],t=x[l],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;tf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;tli:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/application.css b/site/assets/stylesheets/application.css new file mode 100644 index 000000000..965bbb3c8 --- /dev/null +++ b/site/assets/stylesheets/application.css @@ -0,0 +1 @@ +html{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}*,:after,:before{box-sizing:inherit;-moz-box-sizing:inherit;-webkit-box-sizing:inherit}html{font-size:62.5%;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0}main{display:block}ul{list-style:none}table{border-collapse:collapse;border-spacing:0}td{text-align:left;font-weight:400;vertical-align:middle}button{outline:0;padding:0;background:transparent;border:none;font-size:inherit}input{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;outline:none;border:none}a{text-decoration:none;color:inherit}a,button,input,label{-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-tap-highlight-color:transparent}h1,h2,h3,h4,h5,h6{font-weight:inherit}pre{background:rgba(0,0,0,.05)}pre,pre code{color:rgba(0,0,0,.87)}.c,.c1,.cm,.o{color:rgba(0,0,0,.54)}.k,.kn{color:#a71d5d}.kd,.kt{color:#0086b3}.n.f,.nf{color:#795da3}.nx{color:#0086b3}.s,.s1{color:#183691}.bp,.mi{color:#9575cd}.icon{font-family:Icon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-search:before{content:"\e600"}.icon-back:before{content:"\e601"}.icon-link:before{content:"\e602"}.icon-close:before{content:"\e603"}.icon-menu:before{content:"\e604"}.icon-forward:before{content:"\e605"}.icon-twitter:before{content:"\e606"}.icon-github:before{content:"\e607"}.icon-download:before{content:"\e608"}.icon-star:before{content:"\e609"}.icon-warning:before{content:"\e610"}.icon-note:before{content:"\e611"}a{-webkit-transition:color .25s;transition:color .25s}.overlay{-webkit-transition:opacity .25s,width 0s .25s,height 0s .25s;transition:opacity .25s,width 0s .25s,height 0s .25s}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{-webkit-transition:opacity .25s,width 0s,height 0s;transition:opacity .25s,width 0s,height 0s}.js .header{-webkit-transition:background .6s,color .6s;transition:background .6s,color .6s}.js .header:before{-webkit-transition:background .6s;transition:background .6s}.button .icon{-webkit-transition:background .25s;transition:background .25s}body{color:rgba(0,0,0,.87)}@supports (-webkit-appearance:none){body{background:#e84e40}}.ios body{background:#fff}hr{border:0;border-top:1px solid rgba(0,0,0,.12)}.toggle-button{cursor:pointer;color:inherit}.backdrop,.backdrop-paper:after{background:#fff}.overlay{background:rgba(0,0,0,.54);opacity:0}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{opacity:1}.header{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.ios.standalone .header:before{background:rgba(0,0,0,.12)}.bar .path{color:hsla(0,0%,100%,.7)}.button .icon{border-radius:100%}.button .icon:active{background:hsla(0,0%,100%,.12)}html{height:100%}body{position:relative;min-height:100%}hr{display:block;height:1px;padding:0;margin:0}.locked{height:100%;overflow:hidden}.scrollable{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.scrollable .wrapper{height:100%}.ios .scrollable .wrapper{margin-bottom:2px}.toggle{display:none}.toggle-button{display:block}.backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.backdrop-paper{max-width:1200px;height:100%;margin-left:auto;margin-right:auto}.backdrop-paper:after{content:" ";display:block;height:100%;margin-left:262px}.overlay{width:0;height:0;z-index:3}.header,.overlay{position:fixed;top:0}.header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;left:0;z-index:2;height:56px;padding:4px;overflow:hidden}.ios.standalone .header{position:absolute}.bar{display:table;max-width:1184px;margin-left:auto;margin-right:auto}.bar a{display:block}.no-js .bar .button-search{display:none}.bar .path .icon:before{vertical-align:-1.5px}.button{display:table-cell;vertical-align:top;width:1%}.button button{margin:0;padding:0}.button button:active:before{position:relative;top:0;left:0}.button .icon{display:inline-block;font-size:24px;padding:8px;margin:4px}.stretch{display:table;table-layout:fixed;width:100%}.header .stretch{padding:0 20px}.stretch .title{display:table-cell;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.header .stretch .title{font-size:18px;padding:13px 0}.main{max-width:1200px;margin-left:auto;margin-right:auto}body,input{font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.no-fontface body,.no-fontface input,body,input{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.no-fontface code,.no-fontface kbd,.no-fontface pre,code,kbd,pre{font-family:Courier New,Courier,monospace}#toggle-drawer:checked~.main .drawer,.toggle-drawer .drawer{-webkit-transform:translateZ(0);transform:translateZ(0)}.no-csstransforms3d #toggle-drawer:checked~.main .drawer,.no-csstransforms3d .toggle-drawer .drawer{display:block}.project{-webkit-transition:none;transition:none}.project .logo img{-webkit-transition:box-shadow .4s;transition:box-shadow .4s}.repo a{-webkit-transition:box-shadow .4s,opacity .4s;transition:box-shadow .4s,opacity .4s}.drawer .toc a.current,.drawer .toc a:focus,.drawer .toc a:hover{color:#e84e40}.drawer .anchor a{border-left:2px solid #e84e40}.drawer .section{color:rgba(0,0,0,.54)}.ios.standalone .project:before{background:rgba(0,0,0,.12)}.project .logo img{background:#fff;border-radius:100%}.project:focus .logo img,.project:hover .logo img{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05)}.repo a{background:#00bfa5;color:#fff;border-radius:3px}.repo a:focus,.repo a:hover{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);opacity:.8}.repo a .count{background:rgba(0,0,0,.26);color:#fff;border-radius:0 3px 3px 0}.repo a .count:before{border-width:15px 5px 15px 0;border-color:transparent rgba(0,0,0,.26);border-style:solid}.drawer{width:262px;font-size:13px;line-height:1em}.ios .drawer{overflow:scroll;-webkit-overflow-scrolling:touch}.drawer .toc li a{display:block;padding:14.5px 24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .toc li.anchor a{margin-left:12px;padding:10px 24px 10px 12px}.drawer .toc li ul{margin-left:12px}.drawer .current+ul{margin-bottom:9px}.drawer .section{display:block;padding:14.5px 24px}.drawer .scrollable{top:104px;z-index:-1}.drawer .scrollable .wrapper{height:auto;min-height:100%}.drawer .scrollable .wrapper hr{margin:12px 0;margin-right:auto}.drawer .scrollable .wrapper .toc{margin:12px 0}.project{display:block}.project .banner{display:table;width:100%;height:104px;padding:20px}.project .logo{display:table-cell;width:64px;padding-right:12px}.project .logo img{display:block;width:64px;height:64px}.project .name{display:table-cell;padding-left:4px;font-size:14px;line-height:1.25em;vertical-align:middle}.project .logo+.name{font-size:12px}.repo{margin:24px 0;text-align:center}.repo li{display:inline-block;padding-right:12px;white-space:nowrap}.repo li:last-child{padding-right:0}.repo a{display:inline-block;padding:0 10px 0 6px;font-size:12px;line-height:30px;height:30px}.repo a .icon{font-size:18px;vertical-align:-3px}.repo a .count{display:inline-block;position:relative;padding:0 8px 0 4px;margin:0 -10px 0 8px;font-size:12px}.repo a .count:before{content:" ";display:block;position:absolute;top:0;left:-5px}.no-js .repo a .count{display:none}.drawer .toc li a{font-weight:700}.drawer .toc li.anchor a{font-weight:400}.drawer .section,.repo a{font-weight:700}.repo a{text-transform:uppercase}.repo a .count{text-transform:none;font-weight:700}pre span{-webkit-transition:color .25s;transition:color .25s}.copyright a{-webkit-transition:color .25s;transition:color .25s}.ios.standalone .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.ios.standalone .article .wrapper{background:-webkit-linear-gradient(top,#fff 50%,#fff 0);background:linear-gradient(180deg,#fff 50%,#fff 0)}.article a,.article h1,.article h2{color:#e84e40}.article code{background:#eee}.article kbd{color:#555;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.article h1{border-bottom:1px solid rgba(0,0,0,.12)}.article a{border-bottom:1px dotted}.article a:focus,.article a:hover{color:#00bfa5}.article .headerlink{color:rgba(0,0,0,.26);border:none}.article table{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);border-radius:3px}.article table th{background:#ee7a70;color:#fff}.article table td{border-top:1px solid rgba(0,0,0,.05)}.article blockquote{border-left:2px solid rgba(0,0,0,.54);color:rgba(0,0,0,.54)}.footer{background:#e84e40;color:#fff}.footer a{border:none}.copyright{color:rgba(0,0,0,.54)}.pagination a .button,.pagination a .title{color:#fff}.pagination .direction{color:hsla(0,0%,100%,.7)}.admonition{background:#29b6f6;color:#fff}.admonition pre{background:hsla(0,0%,100%,.3)}.admonition.warning{background:#e84e40}.admonition a,.admonition a:hover{color:#fff}.article{font-size:14px;line-height:1.7em}.article:after{content:" ";display:block;clear:both}.article .wrapper{padding:116px 16px 92px}.ios.standalone .article{position:absolute;top:56px;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.ios.standalone .article .wrapper{position:relative;min-height:100%;padding-top:60px;margin-bottom:2px}.article h1{font-size:24px;line-height:1.333334em;padding:20px 0 42px}.article h2{font-size:20px;line-height:1.4em;padding-top:92px;margin-top:-56px}.ios.standalone .article h2{padding-top:36px;margin:0}.article h3,.article h4{font-size:14px;padding-top:76px;margin-top:-56px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article .headerlink{float:right;margin-left:20px;font-size:14px}h1 .article .headerlink{display:none}.article ol,.article p,.article ul{margin-top:1.5em}.article li,.article li ol,.article li ul{margin-top:.75em}.article li{margin-left:18px}.article li p{display:inline}.article ul>li:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes-05ab2406df.css b/site/assets/stylesheets/palettes-05ab2406df.css new file mode 100644 index 000000000..ead0d849b --- /dev/null +++ b/site/assets/stylesheets/palettes-05ab2406df.css @@ -0,0 +1 @@ +@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes.css b/site/assets/stylesheets/palettes.css new file mode 100644 index 000000000..ead0d849b --- /dev/null +++ b/site/assets/stylesheets/palettes.css @@ -0,0 +1 @@ +@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/conn/index.html b/site/conn/index.html new file mode 100644 index 000000000..8ec65eaa3 --- /dev/null +++ b/site/conn/index.html @@ -0,0 +1,644 @@ + + + + + + + + + + + + Connection Management - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+ + + +
+ +
+
+ + +
+
+ +

Connection Management

+

trackservers.q is used to register and maintain handles to external +servers. It is a heavily modified version of trackservers.q from +code.kx. All the options are described in the default config file. All +connections are tracked in the .servers.SERVERS table. When the handle +is used the count and last query time are updated.

+
q).servers.SERVERS 
+procname     proctype  hpup                            w  hits startp                        lastp                         endp                          attributes                   
+---------------------------------------------------------------------------------
+discovery1   discovery :aquaq:9996    0                                  2014.01.08D11:13:10.583056000                               ()!()                        
+discovery2   discovery :aquaq:9995 6  0    2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000                               ()!()                        
+rdb_europe_1 rdb       :aquaq:9998 12 0    2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk
+rdb1         rdb       :aquaq:5011 7  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
+rdb_europe_1 hdb       :aquaq:9997    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
+hdb1         hdb       :aquaq:9999    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
+hdb2         hdb       :aquaq:5013 8  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
+hdb1         hdb       :aquaq:5012 9  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
+
+q)last .servers.SERVERS 
+procname  | `hdb2
+proctype  | `hdb
+hpup      | `:aquaq:5013
+w         | 8i
+hits      | 0i
+startp    | 2014.01.08D11:51:01.928045000
+lastp     | 2014.01.08D11:51:01.925078000
+endp      | 0Np
+attributes| `datacentre`country!`essex`uk
+
+

Connections

+

Processes locate other processes based on their process type. The +location is done either statically using the process.csv file or +dynamically using a discovery service. It is recommended to use the +discovery service as it allows the process to be notified as new +processes become available.

+

The main configuration variable is .servers.CONNECTIONS, which dictates +which process type(s) to create connections to. .servers.startup[] +must be called to initialise the connections. When connections are +closed, the connection table is automatically updated. The process can +be set to periodically retry connections.

+

Process Attributes

+

Each process can report a set of attributes. When process A connects to +process B, process A will try to retrieve the attributes of process B. +The attributes are defined by the result of the .proc.getattributes +function, which is by default an empty dictionary. Attributes are used +to retrieve more detail about the capabilities of each process, rather +than relying on the broad brush process type and process name +categorization. Attributes can be used for intelligent query routing. +Potential fields for attributes include:

+
    +
  • +

    range of data contained in the process;

    +
  • +
  • +

    available tables;

    +
  • +
  • +

    instrument universe;

    +
  • +
  • +

    physical location;

    +
  • +
  • +

    any other fields of relevance.

    +
  • +
+

Connection Passwords

+

The password used by a process to connect to external processes is +retrieved using the .servers.loadpassword function call. By default, +this will read the password from a txt file contained in +$KDBCONFIG/passwords. A default password can be used, which is +overridden by one for the process type, which is itself overridden by +one for the process name. For greater security, the +.servers.loadpassword function should be modified.

+

Retrieving and Using Handles

+

A function .servers.getservers is supplied to return a table of handle +information. .servers.getservers takes five parameters:

+
    +
  • +

    type-or-name: whether the lookup is to be done by type or name (can + be either proctype or procname);

    +
  • +
  • +

    types-or-names: the types or names to retrieve e.g. hdb;

    +
  • +
  • +

    required-attributes: the dictionary of attributes to match on;

    +
  • +
  • +

    open-dead-connections: whether to re-open dead connections;

    +
  • +
  • +

    only-one: whether we only require one handle. So for example if 3 + services of the supplied type are registered, and we have an open + handle to 1 of them, the open handle will be returned and the others + left closed irrespective of the open-dead-connections parameter.

    +
  • +
+

.servers.getservers will compare the required parameters with the +available parameters for each handle. The resulting table will have an +extra column called attribmatch which can be used to determine how good +a match the service is with the required attributes. attribmatch is a +dictionary of (required attribute key) ! (Boolean full match; +intersection of attributes).

+
q).servers.SERVERS 
+procname     proctype  hpup                            w hits startp                        lastp                         endp attributes                   
+---------------------------------------------------------------------------------
+discovery1   discovery :aquaq:9996   0                                  2014.01.08D11:51:01.922390000      ()!()                        
+discovery2   discovery :aquaq:9995 6 0    2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000      ()!()                        
+rdb_europe_1 rdb       :aquaq:9998   0                                  2014.01.08D11:51:38.347598000      ()!()                        
+rdb_europe_2 rdb       :aquaq:9997   0                                  2014.01.08D11:51:38.347598000      ()!()                        
+rdb1         rdb       :aquaq:5011 7 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
+hdb3         hdb       :aquaq:5012 9 0    2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000      `datacentre`country!`essex`uk
+hdb2         hdb       :aquaq:5013 8 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
+
+/- pull back hdbs.  Leave the attributes empty
+q).servers.getservers[`proctype;`hdb;()!();1b;f0b] 
+procname proctype lastp                         w hpup        attributes                    attribmatch
+-------------------------------------------------------------------------------
+hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!()      
+hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()
+
+/- supply some attributes
+q).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] 
+procname proctype lastp                         w hpup        attributes                    attribmatch           
+-------------------------------------------------------------------------------
+hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
+hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
+q).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b]                                                                                                                                                                                                    
+procname proctype lastp                         w hpup        attributes                    attribmatch                                    
+-------------------------------------------------------------------------------
+hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
+hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
+
+

.servers.getservers will try to automatically re-open connections if +required.

+
q).servers.getservers[`proctype;`rdb;()!();1b;0b] 
+2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998
+2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused
+2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997
+2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused
+procname proctype lastp                         w hpup         attributes                    attribmatch
+-------------------------------------------------------------------------------
+rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
+
+/- If we only require one connection, and we have one open,then it doesn't retry connections
+q).servers.getservers[`proctype;`rdb;()!();1b;1b] 
+procname proctype lastp                         w hpup        attributes                    attribmatch
+-------------------------------------------------------------------------------
+rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
+
+

There are two other functions supplied for retrieving server details, +both of which are based on .servers.getservers. .servers.gethandlebytype +returns a single handle value, .servers.gethpupbytype returns a single +host:port value. Both will re-open connections if there are not any +valid connections. Both take two parameters:

+
    +
  • +

    types: the type to retrieve e.g. hdb;

    +
  • +
  • +

    selection-algorithm: can be one of any, last or roundrobin.

    +
  • +
+

Connecting To Non-TorQ Processes

+

Connections to non-torq (external) processes can also be established. +This is useful if you wish to integrate TorQ with an existing +infrastructure. Any process can connect to external processes, or it can +be managed by the discovery service only. Every external process should +have a type and name in the same way as TorQ processes, to enable them +to be located and used as required.

+

Non-TorQ processes need to be listed by default in +$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format +as the standard process.csv file. The location of the non-TorQ process +file can be adjusted using the .servers.NONTORQPROCESSFILE variable. To +enable connections, set .servers.TRACKNONTORQPROCESS to 1b.

+

Example of nontorqprocess.csv file:

+
host,port,proctype,procname
+aquaq,5533,hdb,extproc01
+aquaq,5577,hdb,extproc02
+
+

Manually Adding And Using Connections

+

Connections can also be manually added and used. See .api.p“.servers.*” +for details.

+

IPC types

+

In version kdb+ v3.4, two new IPC connection types were added. These new +types are unix domain sockets and SSL/TLS (tcps). The incoming +connections to a proctype can be set by updating .servers.SOCKETTYPE.

+

In the settings example below, everything that connects to the +tickerplant will use unix domain sockets.

+
\d .servers 
+SOCKETTYPE:enlist[`tickerplant]!enlist `unix
+
+

Attempting to open a unix domain socket connection to a process which +has an older kdb+ version will fail. We allow for processes to fallback +to tcp if this happens by setting .servers.SOCKETFALLBACK to true. It +will not fallback if the connection error message returned is one of the +following : timeout, access. It will also not fallback for SSL/TLS +(tcps) due to security concerns.

+

At the time of writing, using unix domain sockets syntax on windows will +appear to work whilst it’s actually falling back to tcp in the +background. This can be misleading so we disabled using them on windows.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/site/gettingstarted/index.html b/site/gettingstarted/index.html new file mode 100644 index 000000000..8eb912b7b --- /dev/null +++ b/site/gettingstarted/index.html @@ -0,0 +1,789 @@ + + + + + + + + + + + + Getting Started - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

Getting Started

+

kdb+ is very customisable. Customisations are contained in q scripts (.q +files), which define functions and variables which modify the behaviour +of a process. Every q process can load a single q script, or a directory +containing q scripts and/or q data files. Hooks are provided to enable +the programmer to apply a custom function to each entry point of the +process (.z.p*), to be invoked on the timer (.z.ts) or when a variable +in the top level namespace is amended (.z.vs). By default none of these +hooks are implemented.

+

We provide a codebase and a single main script, torq.q. torq.q is +essentially a wrapper for bespoke functionality which can load other +scripts/directories, or can be sourced from other scripts. Whenever +possible, torq.q should be invoked directly and used to load other +scripts as required. torq.q will:

+
    +
  • +

    ensure the environment is set up correctly;

    +
  • +
  • +

    define some common utility functions (such as logging);

    +
  • +
  • +

    execute process management tasks, such as discovering the name and + type of the process, and re-directing output to log files;

    +
  • +
  • +

    load configuration;

    +
  • +
  • +

    load the shared code based;

    +
  • +
  • +

    set up the message handlers;

    +
  • +
  • +

    load any required bespoke scripts.

    +
  • +
+

The behavior of torq.q is modified by both command line parameters and +configuration. We have tried to keep as much as possible in +configuration files, but if the parameter either has a global effect on +the process or if it is required to be known before the configuration is +read, then it is a command line parameter.

+

+

Using torq.q

+

torq.q can be invoked directly from the command line and be set to +source a specified file or directory. torq.q requires the 5 environment +variables to be set (see section envvar). If using a unix +environment, this can be done with the setenv.sh script. To start a +process in the foreground without having to modify any other files (e.g. +process.csv) you need to specify the type and name of the process as +parameters. An example is below.

+
$ . setenv.sh
+$ q torq.q -debug -proctype testproc -procname test1
+
+

To load a file, do:

+
$ q torq.q -load myfile.q -debug -proctype testproc -procname test1
+
+

It can also be sourced from another script. If this is the case, some of +the variables can be overridden, and the usage information can be +modified or extended. Any variable that has a definition like below can +be overridden from the loading script.

+
myvar:@[value;`myvar;1 2 3]
+
+

The available command line parameters are:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cmd Line ParamDescription
-procname x -proctype yThe process name and process type
-procfile xThe name of the file to get the process information from
-load x [y..z]The files or database directory to load
-loaddir x [y..z]Load all .q, .k files in specified directories
-localtimeSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P
-trapAny errors encountered during initialization when loading external files will be caught and logged, processing will continue
-stopStop loading the file if an error is encountered but do not exit
-noredirectDo not redirect std out/std err to a file (useful for debugging)
-noredirectaliasDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)
-noconfigDo not load configuration
-nopiReset the definition of .z.pi to the initial value (useful for debugging)
-debugEquivalent to [-nopi -noredirect]
-usagePrint usage info and exit
+

In addition any process variable in a namespace (.*.*) can be +overridden from the command line. Any value supplied on the command line +will take priority over any other predefined value (.e.g. in a +configuration or wrapper). Variable names should be supplied with full +qualification e.g. -.servers.HOPENTIMEOUT 5000.

+

+

Environment Variables

+

Five environment variables are required:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Environment VariableDescription
KDBCONFIGThe base configuration directory
KDBCODEThe base code directory
KDBLOGSWhere standard out/error and usage logs are written
KDBHTMLContains HTML files
KDBLIBContains supporting library files
+

torq.q will check for these and exit if they are not set. If torq.q is +being sourced from another script, the required environment variables +can be extended by setting .proc.envvars before loading torq.q.

+

+

Process Identification

+

At the crux of AquaQ TorQ is how processes identify themselves. This is +defined by two variables - .proc.proctype and .proc.procname which are +the type and name of the process respectively. These two values +determine the code base and configuration loaded, and how they are +connected to by other processes. If both of these are not defined, the +TorQ will attempt to use the port number a process was started on to +determine the code base and configuration loaded.

+

The most important of these is the proctype. It is up to the user to +define at what level to specify a process type. For example, in a +production environment it would be valid to specify processes of type +“hdb” (historic database) and “rdb” (real time database). It would also +be valid to segregate a little more granularly based on approximate +functionality, for example “hdbEMEA” and “hdbAmericas”. The actual +functionality of a process can be defined more specifically, but this +will be discussed later. The procname value is used solely for +identification purposes. A process can determine its type and name in a +number of ways:

+
    +
  1. +

    From the process file in the default location of + $KDBCONFIG/process.csv;

    +
  2. +
  3. +

    From the process file defined using the command line parameter + -procfile;

    +
  4. +
  5. +

    From the port number it is started on, by referring to the process + file for further process details;

    +
  6. +
  7. +

    Using the command line parameters -proctype and -procname;

    +
  8. +
  9. +

    By defining .proc.proctype and .proc.procname in a script which + loads torq.q.

    +
  10. +
+

For options 4 and 5, both parameters must be defined using that method +or neither will be used (the values will be read from the process file).

+

For option 3, TorQ will check the process file for any entries where the +port matches the port number it has been started on, and deduce it’s +proctype and procname based on this port number and the corresponding +hostname entry.

+

The process file has format as below.

+
aquaq$ cat config/process.csv 
+host,port,proctype,procname
+aquaq,9997,rdb,rdb_europe_1
+aquaq,9998,hdb,hdb_europe_1
+aquaq,9999,hdb,hdb_europa_2
+
+

The process will read the file and try to identify itself based on the +host and port it is started on. The host can either be the value +returned by .z.h, or the ip address of the server. If the process can +not automatically identify itself it will exit, unless proctype and +procname were both passed in as command line parameters. If both of +these parameters are passed in then default configuration settings will +be used.

+

+

Logging

+

By default, each process will redirect output to a standard out log and +a standard error log, and create aliases for them. These will be rolled +at midnight on a daily basis. They are all written to the $KDBLOGS +directory. The log files created are:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Log FileDescription
out_[procname]_[date].logTimestamped out log
err_[procname]_[date].logTimestamped error log
out_[procname].logAlias to current log log
err_[procname].logAlias to current error log
+

The date suffix can be overridden by modifying the .proc.logtimestamp +function and sourcing torq.q from another script. This could, for +example, change the suffixing to a full timestamp.

+

+

Configuration Loading

+

Default Configuration Loading

+

Default process configuration is contained in q scripts, and stored in +the $KDBCONFIG /settings directory. Each process tries to load all the +configuration it can find and will attempt to load three configuration +files in the below order:-

+
    +
  • +

    default.q: default configuration loaded by all processes. In a + standard installation this should contain the superset of + customisable configuration, including comments;

    +
  • +
  • +

    [[proctype]]{}.q: configuration for a specific process type;

    +
  • +
  • +

    [[procname]]{}.q: configuration for a specific named process.

    +
  • +
+

The only one which should always be present is default.q. Each of the +other scripts can contain a subset of the configuration variables, which +will override anything loaded previously.

+

Application Configuration Loading

+

Application specific configuration can be stored in a user defined +directory and made visible to TorQ by setting the $KDBAPPCONFIG +environment variable. If $KDBAPPCONFIG is set, then TorQ will search +the $KDBAPPCONFIG/settings directory and load all configuration it can +find. Application configuration will be loaded after all default +configuration in the following order:-

+
    +
  • +

    default.q: Application default configuration loaded by all + processes.

    +
  • +
  • +

    [[proctype]]{}.q: Application specific configuration for a + specific process type.

    +
  • +
  • +

    [[procname]]{}.q: Appliction specific configuration for a specific + named process.

    +
  • +
+

All loaded configuration will override anything loaded previously. None +of the above scripts are required to be present and can contain a subset +of the default configuration variables from the default configuration +directory.

+

All configuration is loaded before code.

+

+

Code Loading

+

Code is loaded from the $KDBCODE directory. There is also a common +codebase, a codebase for each process type, and a code base for each +process name, contained in the following directories and loaded in this +order:

+
    +
  • +

    $KDBCODE/common: shared codebase loaded by all processes;

    +
  • +
  • +

    $KDBCODE/[proctype]: code for a specific process type;

    +
  • +
  • +

    $KDBCODE/[procname]: code for a specific process name;

    +
  • +
+

For any directory loaded, the load order can be specified by adding +order.txt to the directory. order.txt dictates the order that files in +the directory are loaded. If a file is not in order.txt, it will still +be loaded but after all the files listed in order.txt have been loaded.

+

Additional directories can be loaded using the -loaddir command line +parameter.

+

+

Initialization Errors

+

Initialization errors can be handled in different ways. The default +action is any initialization error causes the process to exit. This is +to enable fail-fast type conditions, where it is better for a process to +fail entirely and immediately than to start up in an indeterminate +state. This can be overridden with the -trap or -stop command line +parameters. With -trap, the process will catch the error, log it, and +continue. This is useful if, for example, the error is encountered +loading a file of stored procedures which may not be invoked and can be +reloaded later. With -stop the process will halt at the point of the +error but will not exit. Both -stop and -trap are useful for debugging.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/site/graphics/AquaQ-TorQ-symbol.png b/site/graphics/AquaQ-TorQ-symbol.png new file mode 100755 index 0000000000000000000000000000000000000000..312cfc403e2c0400dba7121adf42889e0700b83f GIT binary patch literal 125149 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
= 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 NB_=OgB5dIIKL7<74O{>K literal 0 HcmV?d00001 diff --git a/site/graphics/discovery2.png b/site/graphics/discovery2.png new file mode 100755 index 0000000000000000000000000000000000000000..14d350884a83fe7f29b8477475596620e9210389 GIT binary patch literal 37928 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

XO141LOhA7`%DN&ZVMlW++ptwu zi5RDJOQ^a2#DFOLo6-8+N19P93G#?fzk@SILOGZtdDdRWh{tEKRelnZC;oNRgIgFL z26=m^2g(Dz_eNJEuujwvH%XH^U2`bsH3`c6o8H7K2Sq;31b72j?|^_C$?}~cj6FyI zf7Dbj3oP7lxT#Al5Xid*1H)1u6ZglJ5bVrNdul6i3mv6%RLcb+E_{F5;=W%cfKz2a zy@o`hXPn;Kd7aym^Pm#Whum#$Yy=!z<4PX~3Nkq(ycW&2Z>rrPOn#xkV7oUan_3Oj zn~~>E`0y&U5dIc0!Vd`Jl>$PxY=H}Rc}VJ_9Rt*bLPL5g-ANIL;*@4%5ST>2{Qe=L z8INNfrh-vqRy;;)0rAzZ?MhM~PM$=Ik$$FrH9`P(jqt^Y3gTfthO?0}G-f$%Wo0}m z@)`q>kHn(Pq-D!nzn)Yn-32fd2lAm%5oJ1vK`}i3dNNehKxXYVy)`y^c3ITX!n~sF zAC=t@Sp#fg3A=F~89m~%CSf(rPRix0Qql79itR%%v8+$j;;A4q^=0mSreu=k*HW73@+mHg zv+D5!LK7Afy+2g-IfvZF6VZB^V#p$23;a=d$cbSGyxq>~6Ll7W1g#!C^ifAPuyDkg z2zs4n>NQ(=6b!lHhjiuXvVh+Ld5m$1s)1mTT05>tQIunHD9BjGM=?`UipoInA{hlh z83L}TJs>6|$93EISh%>7qZ)dqRO4gFwwd^xK|MYCxs6*K8w(c}8gCmFHzA=};O|<2 zrl8rig5XB1FCTY2Md|}d0PKM6 zg%v@)d@v_Ce1>7-kBOG1EU}aGoi-Xt6@;f6NgDZv(xN)j%=pJtaDWu`rGkwk5XlN* zOMx0Q?Q$~#5gKDDxt8%jf3YkKoK{4Ky;MHb9s~SSR(JveoHaXz?Y(-fwXNo@Bm9ea z)=iB#h(Hk=>q@XF*g1w}ZkNbNT2*K*#`;9&Gg96PRTg}0aJUm_Pv+0g^;mK2wmornI7dFL>%0A0A{Yp0asTU z7_c9xD0L-2t`j4a z(qt8>!_$FiMgTM@9vz?}3=hA#PQ*-#8}vv5L<+nf(1XUNdoT@P^luV~8mb2@f8zNn zk_!vV$04{zCj{nJwClow0RXJvo`}D|L0xRFOotELU+#{9WV(k~k#TBB(96Fh#m5Pa zAYz&X`T~e>Hy|3HYTuotSBw+{1`J6ISlgeU9I6`t;*}&8icml%ij*&T97I$CF9HBE z7zY4>@-A50#)Op{(SI(V3r=5)U8l0K_cW0iAfRY{l@=UU>Xt>;Qd!#|E=Uvi!{JK z&;R2YT1jv`jp_5OY1()tQXL)0){p`&evgolw@X`?EpjBUfG}eDS>XHa+V-bi!-3^~ z2eK=tGm&u>qEV>TN)hxWScFgKE9NFL*i6(l;oyNhPE;UcNRplW+!rQaEo23>7wSrl zaJc?v1IlQ<} z=qP{#Y;)+pkV4>L@tQSHS+)@pRAfsC#sic^I+LA7>|pI80(#CSy%b1V9_b>P8P-oJH0jCPv|nk`!7*1PR3=)!ocs@ zYy#=ZG%WS^Pz?S$2Lke?rmxx3v_XgCb$b}HM(8)u02-5>osYj@Pa0RN8K#^j z>h&-0FW|85OG#s#((JnT10f%yfm8EkFqJv$e~62|KEcq)wQ6Nk&$ov>)Vke_S(_G= zcl&Q5249^ql65!IMmv5M3b>P9cs&@J zxnMy6xtUSoF((@TDzE3aZJ`AP{V>w3i_N=RTJJCpF!#jde;5X`K>s0XdX8}W`ubj* zrUAJXz&`umFK806(#GM1zKoI9N}av9zrK5mG6`5YO#~bL5ASmc1w8t6!*YIxORqgX zKFMTA0RcIV*@SEeko8hmQcbj@+y*-1uy zPScO|PKHBp+yCXR>q`lF ze-4az;)x73YKdIhLx1TdjT)sp(nzKK#0+qa1Ut_GaW*M*nn+S*UnJ06LO;f8^?$*! z@!BrB(9D*~&xCty^oQmAY;=C$Ob#b_O`(w7pSmSlTnsl9l+R>6zdLTipw%w)n8ed) zG99(43i{&=3kD=v>2^6yPU&?VGf2grU9#JyZ!9^>xB?-w%TOf>S#Ik<5NIT(Gpy*w ze8k6?!&yR$@Q*+HH^o!wt64;V+}Qhr{j4LT??k-A?dMl@6R+W*O+J?!@0e9z>U264 zBS4)G5UADbg=>3y{lWVwMAXXcM)W_vp=qfu@0OjpFemi57?&3=`Ok(hL<;xA$@R&g84Pe5{cEBEVd$T69N zT1Dbu&RvQp3yZRIKcCkXkO$p6JeAAm{_M1TzJ~gE8HKN}`K$F`rn|&Y^l{U-@lZma zUa)5mHND>ryDx1H+oC|gWE`>32as5$kiiO>8os+4tI05`c~E=ovafk?KhUF>w72ZH zz`EypgFhU!mAd$FzNQJ>=YWWhzf>R~P_*;w5FiJ*PXz$Iv{L$aaZ!Xn+=%6vsNi7$ zejwq`8pwmemm<}J2eT6wE*7?fFlc{(fpAb`v6umb-dqn8qrdf#4Uq?&_X8=qE@HNwsbT{D9c01qtY_T$tLbeM1ykq%F zOHo--T#a^uh2W#t-|3%@+W=@l#L2z*_zmli_o^}E6b|f*BxAp`ZcybOq z{cE!ku~_uUJ(Z8>ClZiNpfIh51JgYd(G6b9FB zeo%c=7Ob@eT(1V8^+pq?0mKlrPjBw-o~{Z$Aiv~L= zsDp>~V~hLe61Cz-5501TpKB1{XV<5l2D`Y?q3@3{U}^PQJwcz=1JE&RuXrl$Eo9J7 z-aK#K^O60o{D^+w$uI~`A{T}CH*r3g9S@M85ygNIMS&YDNy%{7!wPwUO?Ps&;zKK& zbO5$!5&?Iodv|WPS0bzI;0lo#k<*KiX+uK&UVC2K*?3*fnSn|trY_R>1HsOJpTNyvUe^xZI&9;#MS+5}Ysi&YEP`}>dFRg}tO$V0MCj-8YftKJuYJsS5*mKn?Cce z-^xJoknHR0Yi=uDK(=ZJX??u?)D6G3wuT-I&U<;Ay)2Z_?bu;hsNspq!N$Y^KvX@w z72t6;>{JD*5qCmVHO(N};%rh;C}+d~WfBl`U7ek!=hUFG!h{hGL8TVn0*}T=VCe+Q z312au#d~x+6qs^Kc(ajoi;28}!YuD_8VO**2|*_CKSfnG6S~<zA7H zo~k8YRR;((ExB;4apx*FgIZ|ifGzNoJ=|SoOvSxnL~MY9p22{V0Yp)mA2;0vU+e#z}}>O1Dd7TSe*u>ew=1Li9F!a0x7Tq52!_cBxq+$ zfIJ(%?)a1fIOvCu0>#Z&Tasdng04GCc6R+g&$n6ie)?x0J$fOXuZG{qrM^KTjE*GW zFg`yYN}$!~fPn)$_0eqfl7(5jR*qp$IFKoC&!VmPmxZ401GeDf&2XaWiT89 zA6iS!KoM=P(B^hd^EDkx<_ld%pT&iU&*j0~{mprWZc`m#oX@w01323SRbD(+R#sB2 zQ~CL0iGB+LD-GGc#8p^8P!u`OUeYW9_X}yRx`0fbijOU>JTqlF8a3w1pk^b`4f)tm zY5BJi6lXnBuww+2ahxK)0-sI|#Vyso$5YFiN}1JECLctRA_KnETv3eWO2&XM`NQ8CJvuz=#Rm3Ize|_zn0n)KORMZo ztE1BDPUfmV4WP%es~-K@t-dLc$r_|}tEQ6H?X%>JX2{7WUG%X#zFg8Vs4vfGa^Jn~ zshrfPJD#mI+CB=$8T{?mnk2et{L>HrV5JRQ&n>(AaeB+if~a}yK0`|YVn>>ehmd*$ zb>Kd{pnNz6_s$>CiK(gL+&MDuWcQ|uyOd!KeaB#4wSP_LwAPNqVe`%Y4Xol-v>fUH zIBSQ8X&z`6s-(z)94IF->-2sy&283Le1X!!W`9-_@s$OHtZ++K`TkeP3JztASwP^9 zU;+cr)5M)wzZS2{b?ph3PE5v}hxGTW`X0fiRmI$nI~CXoYS1-o;@VsL;3Ad$a0cW)q$Y$3v4%gn;v%uRP)>00Q^5K> zb!BDwo&^rH@=hqKqWTjV@mMhzuor>^o{qv23MHaRV5y}t=;eR*;=KILMDe9v)HEtg zpEnu%U!|E`${jtNPa6Ov7^PW&-V+d(J@$(wydS9yuG&sIUskkSrdEkiO#oE;9^AgD zl!6Oc)|S9osB!kz&@~KuJlL&t9!Cl_L?k3XQ{w?l4Vh1S$}CtgFy7wY{aLO)W68o2 zJzO zj|wa{@F$yHTf+c(D`pJ(Px~@L7rMx= zfC%;z?nFc}u(Ici4Dw@vFAO~-ypYC%#f(LmQdt3%k**x3zpxy}Y7MX5s<361{2E+@ z#pn93djCn8nR9iZ38iG6IUL12Mri+U{n2ylrkkf7zJS#I!(7WQw2p+aoc>D@3fHMv zs#knLv2yLy6e6a+rhr}47fX5<9^7`m&KJ;VT}4O+WZ~iCzR<9-Jo}9Zs6=!`H=+aT zCKLt|NP$=Z5kmTZTf+EI1m2!f`ptEKt(+%-!vDpK7iUQ!ygq_XCzWx{34fOBD)U-Q zW|2J8xmcHG`Q2bY_2V(?T;KFaBn*plz&a&>^`MV-_3tRmCaxxjz+0=S89B&Shf<3Mkh&MYckW*I&`6PrvB}#w~;7D zUE;I>+=6D!6)dy?*StNhuf-AE!IoJ2X-496XCCaKpQ6|P`)fs^r?b_y02%r3`BM9T zOR7jhE6;v{QyT)ED+7ftq%xjDK>MC^xf?wU-BZ!&^;h*e8NH~moyTbU|U>? zm9>N?!v#c#^v+U@Q@EDGbpCBlqw251h#YZe(bu*)ih)g6m4ZRsNe8eqrylBWQupqL4nHsO4&jYy)q0cII2GuDN&@f zWftzda;|w18)6vdTZj&OkPxPEpBG{dkUD2v$k5vjA0O`6_M`^oT#4&+wpw2yC?hQ* zSafI0ZL^T~s zn$k-_f#t6k4j`nsF6vD`s3Z`w;fuCVW1)H<&k*qONChK{?K(vH^Ur3dT}*Fja^}DV zs?C_0o zyY@T3jZcE}E2LPZxB6CyI+Y0%$la^#{Pg(nmwjEj_Jl36U6+s1OND&^50V}ZWkun+ z|FP9GMM?Jlv!&id1DQUdpQ|{stJ-3lFj8oQ{#})*D6?r&3WrIxuH4ZJ7zJ@CpB7Nr zc!FXcX+wlRAB39l*78|=K(F)@_N0UlWTDflrV6nk9Q8b$e~XGPCfZd|8)fJqi*5%E z(|tmw6w=oA1O#j>X+yT;?mP5QTxhg-0{yV_ywGH^9QGiJ&`Sd~(`X`|SlWGH#_wDsp($}Vu(Ye_#W#6IO3BWX0jlp75j4?52R_ceK5`Pea-&ICGAv5&- zp(oZfu7IS_`fWId6RU|N*P3=uBJj5|^*D!20u9PXDiDFWw^Ya zw<^@X%XK6AQF;AP<9CxlXWB*t>KqTd0O>B=gd?XjY~wJ=K&lW4*YBFj|aj>iUuki{}-ad_f(ENuGTfgp|Uk%znx{s`o*CiGCDZvFk=WptFp{I2LO z*oqmjo*HCdBtBkE#j6NEiw;nLwkHrvuodBB5DfRU$hshbyN5~EXO3#ecmcpOrJyn_ zXV|_NQZyu_H94s55Z%P8;-w}R%2ZVz{J(Y=f*@N3)EV}YV;{OGt z4-l+r$pg)!hCZw0=a_9FYxLc|SAt|@tJ0cS97^YkK>9>a1XWSx^x8{?Uy6g1rpTK- z!Z+sngL%BfYiV?BY-4JgpfDK~$#(y{2ddV4AeF&!Tu>9UAo?glS|rs+idg)=gRVFF z%YT&yhf971xeTYil#tE)Me2PGZ5Cm!v5`KGBj7y~@zK&ts}Igg8gE2ce=b}6%|ese zOfn~lk1;&EmjgX3qN^YbXmSV?>NGbQz4ie;1QzLfc1O3S!EXRNd z!y-WjgiKM&dh^RCaRHA@C;Q_GT^MktAp(7bKr=$@%DDC0q0~mecY`KVt#mamvVj6L-OCYWyhPef5Yba|O@@*J|Bz|Y1ShfV zYw*e-K6lL9^{*FyIwBcxY!W=LAZ$PxHGba5tj94?wK~qy{s)`?tO^K~> zLb}9y7~Dx?UmFr~-&$FNW{N0{GQ&?f2AhLD9MwTTa5QKoIXj4&HkE22htbL3kfsRn)5SZ`6F@x)nu(Ly_AYZZYWz6ap{y zBDo~fh?!EpSJ zjI-O9mWbc=1oXqf6JWbN*||o(6`2wAnf-v-%QN#xCZ_8}=NsZ3O^q2O7=w2Xk$!Q1 znLRLFjuv^`&hif9`N;%ft-i)J`TN3R6sZ-*J1pLTDi~{Q!H*eS8Z19eOjuL|AZ>c! zE>y*vD(_BzCJT5t3keAkoud+Ph(UWj+_S|76Wp|p5xTUq37xx z4}2XeopT)uV-Wl21fTBDA0O@}nOd+;R>5J|e6|lrUJGp^SF3rtJ8qjSu+-DgYjm;z zeKBxc)>X9u;4#E<3kVI4&omS_itxY*qjWlvG2s`#S#;I4?l7zp-+LTLdQ`j1ikGDD zo4WU&Oo~e>JRWQlts0c*9)|5kT@@d|fq!t^_&ec6L85BPyfTdnk_BgPsaM>i4tcX} zK0+i74x9aPyl0XyDalnBn-I<;mG~e+a?UnTVRh{n+T*SRz3vF2!H8JZR4FAQ$&|3W z;Ro1w4sOA>ZdBqUy}nXJ3%?Z|FNaK-y6*h;1q!plc28CCxC3{)IPykNV-d%F5Gwf~ zBiM5-@EeeW_4&}r|J{Ng7`|F+AQz^N>>$u^_~qwIvV5;mNiv0Qs1dYIM$W(H0y;tr zvaiE)3hcToKQX*7MZD^5^o(@)4aB1DilAx{N8T{gur?3QZ!ABN$YF<OFo zS-f7RJaIZLwMNv>?aDGh5U`$qqbfan%Jfhm$6`=Qcysm}?qFceDh|YKY`iPAw0|)^ zZE*ENF(hnsP$4D~VI;ow6Q78I6mbZ=Dmy&d_ZO{L+fX)ZvJ+~)W3}IItvkh7GNPbJ zJHhhhwswPjzCBt&WjAu9HV?Xa-MhxwmA-_q$33a|mC%wkpQ7+mE)Ryw7+*P#y%3+A zN;b*}rVf&VYJCFoGW*5BI=kf$7F_G-sE!}!6Lr{^bbR6qt)OKYE$+*0?itV=OZT?> zVe@ddDn*;m=WKD;sPNk5#`DdZd%13F$=88(XI!x zh7g4hittWb$Hy^GO!yrA2~l2Hp7<$c?2`EgHs98aGDvfY>Ndx8ort6x5-HFodi9gNL@*UIHcW0ob6KKM zv&t|TuT-_UU&Yv*>57!n7o7bERwXzoRA@ z?naW)qaQpxw;~r1U-d>(J*|LMo85X%NZ$hujd7XB$aioh8{ZiNrU~a`5CBdeV87vIa zOq5=W9}{>yYHGT>&uCiYP~}i2X9#*VE|*cBy;FWAYg!_7wdlzHiZ{G$XCg-g!bb;? zQlF;>u6gX8G78~b;`=|(2WU$q!63Jfq1nBv_;|i{AGDJCEm7}^0BL;TeK5=Z;ke^{ z=l0iPmuuOY4|P^r7YziQrafU!>fr(t*y?Z_k+2$cy+u$tRaZ=xW^@N)`8q&m}N zirlKfYE%zN^^oQEn9eci_h=S~u$Ks>yK6bby~=VRemQVX z`IY&;ZDIu4zMMO2B2=Z+o9II3F)Tp6gOrd;G||3B&zrNN(H!J5D+XO5WQ0p@i`8Uc z?KiK~yos-P;~`of$>e@Nnu~fg>$7#eyGfs5Hjr6sRThrjkDHvqvBuR^?0Redg_S_e zH`fD=_Nk?gltwY`!&`?lseZixS~5t%1C=!9HcL8}?fCt1-3^&6s?gF)|D%;go#fH` zd6Yf(J*oa`f{2-4I;ZMwsMHJsd~U0=8wdeE)oVV4X$X0~u2!4MN_0#r*Q?}pJ&voC zHSmV^c8kDq%@xm0hjSnta#i51N}BN)Nyc22!nTk9Ddnqr+$<^at(P8`p19l(*q#xvE3(%-;r<1#(xa7j~F?X<-Si z2be(|_X!b%yXTuxxaiktV!lqk9_$sz-U11S`*wCUd%4{Cmd7eegGuHM>X%+wqaJiJ zv6OV#Qa6}ZhiHehiUhbKMdB|$S*v#I#8&DOJ3zZ9^d`B3dc-7lmF^-L1L2!8Bi@~ASMwZ;PmWj zyjRIK&gnGCb;U0Tw`s;UT$MP<|0L4>6S4VbD=nGWX>Tg5f!K~uKpx}Bs(-glQtbHG zR&j%sPVJ5R?C0?OQ+YmzX|bNmxjF~OJ9u1Hv#%q%{MC0#kC<>E4X@6oWA8Xs6IJ41 z@aGh>BShH((zc>_kX7Ld%`&&)V*7h{tCsLTX?SDDw5f0Pa&YGyZoigkL9fRN&We+69+9m&LAY_VYyG|v zvk;G0R&tiO+#;q=itG#&DK!8ia>%zS>wAX+s}wCagkJ=YCw@KTA=XQo0Si~evvrCn zhq)}wIMl0{b)!0E%XjA?7xlAnhD{nIMOSj7Fug^h<9Nd)2a(`5_%+t6BMl^;>=TW?M^w6~&Q8DevM+ZgK(D0B^8?Y zIELsi$MV9-R^<`1<3lKMrw&8+LvTMXqw>%VkVxl0`fjJ;4-4XVN{j$@DgXq&9rk zT=`FiP>l5RFqtX4Y`L#TJ^2X|L6EI4)be~4(jV5}oXIM^XmTJ>ZQg92EL}KH=1wys zL$b+X&Ed+F_{w(a(+2zGb%C-AWhbSawkKlx=boBY+n2~xrNjh3 zN%;_D33NML7&>f&vPH0U-;y|8Dl7GA;l+mUSjUyE5*W6uZ*p+~&ntb=7Qd&nNaU zvOX>&_kGH^syv+u2M)WJ2NT6)tMCvu7;$gmKJFhsRx+9h;VmV<>a|R*PiJf2@6R;4 zsAT1d58?P+?VD02#dKB5PPe-6h8GhkK%pZgYE`O{GixOC8vC@EBX6# z>=y3ozu2w*^8ZKd7KK&hip8YW(!F|U#();D7x`0URJN6Nn>eLW^n=C!#%={Y$8Nz! ze%5onGf7aIcb$pa?RzsB6%bnvOlv@v>w5%AvK}Oy+D8?Bx)1wV`U$}~@G56H0YQK8 z(~@b=r2hxd~--`oRY{)cb8@5?-X#XPx;LF{b!3QRg* zLt=@6QfTj!eZZJvXx$0jlAk6P?D_b> zRQU&9H0UIcFTAA-w5oJ|Z<*pZ>>#1yQlY5GV|Fqzgl-}AtSIhyz`?M{qsNWQ2`98V z;ceS>MAUde%!=MF0*5U9<>NEq&X3m+$wo7z zLjBV8U^do-qv32aBLnAKVq(xv&0pfNG<($dg!$iN(mcO0q2oO}vOburQ85@2=<()L z<3dbvcaq^M$H{SOIozLMzJ*lz%Q>h|(0wLUWDMXm=IdxOtY$M~v| zWIzB2-}Bg=_@lG7#;tqWd((V1W(bq3*4$!vkAF?2_!w!+y8;B^CeomKk&>U2#qfxC z%eshhtONvjN+`P95kUg22P1of+xhRtzl2=YbEeicf1=L6@_zo}^4XSve=rmSqn?uD z-DpVg(ee+Mk+$=fxc$I%H=XVWy?lnqp#TaAHi}iRZeJ5~a9$~!RMy~iSNBJHB47Fo zrOvls1k7QZqf`pFvxAG*>G94?Fu&eWz_=_nC+-YRi*3In&1|t-T{U=2r2BaA$Ne+- z?*5rQ%6p3@wmSdk`%J}0E|f@0qg%OM`EgS@lMi-orw2g@SI3je^T@4L=lpyABJSFF zA0?2v(eK|{!gHJ$>W3vG2-6VubkmF4FcJa%-tYunHzng%NC2E@0bSj*fV3{u;(aG@Wy6ujBe(sAli=fOQDn?#Sm8dgwxQ-kj{)P zgPE9XLjiD8ucDlqdH9@ zcsyK}#gNMbgC2OCDXRU%=;LV_RQapgT#xN9_YG|C!V-iMiZnYyMEt@y4;!3M2Y1*( zq~3O!r`!3gj@}@!=R8LsMYI2R1QL@@2>#=(&tKSaxFWT?GCV%yL)@+;?sbR!|dhI_UaAgBaM^k0!rvvvv@>qf*A6(CQ-x3Hb!< zcU%i4^ekku2|n1FJQ4Fb{w}gm@S+1lDZo~c%>ViJ&yWU_T-Y`PjY3LiakkV(l?0jn zzkwuDU-+Qh+1v&%PEJBKxu|hk;Gp@HW0v0NKBP6e9R2EwXnV~6ae01!6-p0q_Le_d zi+m$IK949qk?ieegmuQhg!;as-CuDL|1eM+&2c$i{Jf0V5+GmWet5glrzi|d@}BuC zw-(2C2RSnzydOsomTnVIG32RTLG_$AH5cO$v@AKq)J z>Q793pQ$#j`crClCrw8G=p81ezWwMSsQxNqxg#@*kBdbMulXs|eX*+vE$T>spUrlJ zH%d>12NIJm=y?{_)u%|p(~(0Zd&xBVo>iksSsA-V780Go9ssSd}Yp z8EZ?Xz8mP8-d0LC%5(o6{hz#_YFyEU-^`lgd3T{Y7+Uu~wwRNi{uKPBw_=h=6?uH? z+8HMh;wtx)-R?h%Tdr0=uS!j)qaktg0>UB=8?H__w=+c3B3R9h-$rcDx4Fvxt}^A; zVJaU?xd7HaR=uiJ1aHl9W5YbSvvXGnHz_}p9v~Rib?Og`)T%yQTFvo$_j3p%P%8aT zsLuSqP#vH+@lXCLp3{zuXMk{_XU$cRzi;*+SauxQ(MmAcMUlmCSIT1N`K0`)?%G;S z0ncd0dibPnJ6+0v<-SMcd1)a^dr9=%AI>1MkpLgYwE`n*#Y9PRD|A0N)QBezz(qLp;}<<0mQkbZ{3K`aB;5}RgY+DGxI$adhru#xp~^X} z07O|CWo7nq4Zg>~NwxQqR2Gb~eRa8!sykxuHzYU5v?6F9`POfZgH4a6t-Z(#zRA>o z{`*m+50XR$z28U{r`1HfBt}e*qA2g>%okryq@rRO?fLr)`!v}3`yx7MBXB1zLA3H@ zDcdGR({Edi+UNs8h{gC9Ukrv~R?nw6fnd3NlSq=_&oJ*7zUV%kRJ=Q6xMeY;%oquO z)iUXwsenudyHIyr!|xqegg0cNB-Iryk*%L87KU}a-~)BlA8n&Oe+~n2k{XiT9=r8v z59OgKvj1AHjJn%-l5b>2tX1m9l#T?Zk`ZR}dzS%+i#jthP}0`5*b;kYx8$4Ww9)-jNZ!=!i&5fi9yV#xvYt1cMb+Db&;pYY*NgT)IPT2U`%+11(3CF1 z66ZO5f8fQs6_pd#dDh#de9I$HnM57NVeU|g39KD^r_TNmgza_pk*^d*?XgLZE8s=y zAot0{WLQUBZXc5(BMlsCx}yeXBJ-zj=Xf#1FEI>PWu^r3Sd9xUsdjp=^}i+4#l;g< zVy)C$T+Kh#yO8)Q`wQ z*N>%LU?S#(ki-ik3LLx44LK}Q_vN4I+8izMT`kx;J72XKn7NobU+R&*S?#+bG5E;I zm27nAEcC&66p!&JP8XqyJhw*Vr<36myKcV|+v6^p4mvfG8YiQZmlDhBFF4aDhgycS z+OA1vf0Jl_o^ezI(9doi8QrmCAb#?hWI<-p4Ikq)O*HC7V!uTieQo&D>1Ho6utM6B z4HxFukeOn-vUTUa1hwXe7~=cs)EmYxzoks7IqNgJrx_Pk-k!g|=XW65|MVbZvH3Sw z-G8GgiKocsVxu-@ zg&@mV9a~$tOI5yX{tf*5KkNqe5`;)9lnjL~e#ai!qPQ)1D`xea%^gRvAlum0`J(-n zy5XjTv5<##IX8`cU8g%wga=WwS&ZN}`KHdRcXcC{hQjvpM=6VXK63aYfu0=a^xx8e z!F1_fU3H61twPmi<3x_0!LRsZ&4rdFhfZ$iCG>PbkAaJ>XNAdezNR)dASU^`@whOR z_E9RoB#HTb&Ze)az^{A?Ma7K-?HW&{bbrsJQjK7Uc>5Ot+fJ(qSGs%|YiAc@K9wKR z#IHjNpEj)5=r1k^C$Sc3kng+)BHN}JyV~lrZaEv-n6&WR{iiNvbPo;SZxtGI3zl*ZZ%DmYH9gE~mF!d@{W<;&7c;Ab! zpN{Wzl94nqlmf|1Mvg8_JXJigAMR-0&-`V#5m)UHwl7&%Xi}RS@~vR|8t3H+&X2DL zOXh;kvQq>@{tRAL$8lbQO+Q>shBRuRICVag>E8_w%k#B%E)E*3(r4Z0$*$GqO)_*q zhNY`!+?)OQSDo-n)x0BED%>zHNKl-5FLKE1rO9YhKfB}jRasAO=}9~k^{q{_Co>thdeL zd{5r{-gI)U>3nsTU8zOjoO^OBDqcRNV7wAoBRA=E_76iXbkz&J$A5OMZDVXOz2@l* zUMUzA_9qB6cENEeigZ#SVPV;8p_7HDJHTsh^r1r{3 zp6F(nn(}GVQLU}|?eGiS0&VaxVW5viQNn~94z1ZFJpciQ5tHp(NyLH=qC>J!|^VHh}2QG8aYnBRL-<;GAPQ?^yRW@OMLrwIW zOT`(#*R)}p$oo4bp>f8Jnrkg7W!L{*$=L3tnt+)3iQM);3M`IPbX1VTnpu+4z76VE z`o9XnOex7377S@frVHyhvdR^Q#_NcR({OTq=~fL6k7tLgv86me%tklVi)|9=M*Z!# zR=fQ+ejQ6i_~*ZHEPxgb>h0j{&-5Tdrw6mjgHNkY4U3&*P&?i-yLoL1>;8SDNv&MWWl{M+hP zZEhijV_@MowE`pAt?_&eHJSI~k{}cJJ+ll^X+P%Cxcg9o-P@k%ADS-=L(;xrJ`aQ= zlRyNERCm$qcTE2o;)%`&iDX4ylqZfDgywN3PErA1lIMAGb%^+S__K9dz`Fl$0_Qpb zbnZ*oDuV8F-`vHGpeoB2$19XGeq1zw->m?AsLUguPHrJA$ zXa6;WE*Aay?|Lq+*ibuM3Y5P~Bz)s?j~aAk=p}$d55P>_Y3mUvS+i+(RSd zq@VXrgiM-}&A1=b-sM!gEHc}M!Qi)v{JN!_dhVSgK6`Y$0MsK+#qFOMF^2!(kS3Mp z=hqwtgG&0-?WpbcgPvl_V=`4xVHx|nt#{xb+Pw=cn)78oHLlhQG=3)cSPG?YG49V%>YuPPK zR<6?D`KrB(Kbh%aM>BN({;9`9BWZNGt25jBC9YTUl1ml___})OtUN(ob<&^Z=BZd*HZPrFH*{{vwopg_U+?R zqqFsK*16j4cmTqXMAYwivd_U61n0?|D1|Nu#zr~jolD4@Vc%1!+9X7U>4RGDj`&XL z-p-HlS6t$Ind!GX!bhXwFy6krL#4Zg4?s{mp4ZC1V%EGq-eHwm;r0p^_v+!&P7rK# zsCCyVb1V!Ng)hEn_J&oonU~{T?N?58T+Ql{!bmKi-Z*rBxJ_Or5v6H`0C^Oy2SZ+?3g zrnv`2t)*tQ$%McmeD5BR7i5T=crCxw+M<>!Ah}^cT2gcW0+8Wk=r19Wt*`AI9oJ{Y znC_=zH_J3T9)b!tZCYh;ScwICb>ug6b6-gq31tm0nEh&YUk6Cjxd^%g)zrT_Nr5clA5|AEwGY^%X0^Gg*t2CV&y}X51|2T_5jnfO86uL5=QV(ncHA z`FuQA67=+zYAg~eDvrU3ww9KbPrwXsBLM7is1E2HBJFM%u9iP7+ik?=k&$O>%(&=v zFAu`|E#J|ekI0{6XYm@rQ$d>=Gb8a&xF>nl{`sWmb9ywGpSaLg%)OJ1M?aaT%)>R3 zu8#C~h&*_#JuQi+JOTB^3-|2|7q&o7fQ|rG63p@4{avPGZf+il&JFza02+K|vRGLw z05#+V#{2;a+RJA2V`8rNDUCx!Uezy`ASVF5 zMw1GSSbeNEmc9kYqRZe7UF}YW6fbrhg#-n)fMIJqj$3(5ASV0WHz*GP6aX{w51*$; z&$#jy)U!y8Ij|faZf|PQv4S}S8kT~LFMu0m@Pdm^LMt;nClHnSYMznL=V{}XK0$J9J%>`!YW7Qu)Y^XG zD3PwgCC9rMwOUn#Wz+t|$zQbmo*Rl-jCF1qWw7T>(TT*5J5>}#<1LKKMGPuE&5r@$ zTtzX(P${Qk>B$5?2Ymppsrtiocp{EN?iWBWgf6{IiewrF2{n7TXLkNS!-P(c=RfP8t8IhZcROyN(+cwm^)0yrw5RrfW>rs zvepIePfv;8$M3*@8omwA0II=+Bkt#;Jt>Y$I)*0ztv&M%fKS^I2WGT2X`?B|8yv_w zF?8-Rayl<328kH6Ac1rPVlc{gC|V@W$2Yqt)jsM)NHH}QI+2gu;@v{Fo}xc+8Hyyn zUe8X>JFk+#_(eK=W&F+|Uy_5!jIQeQ&;dI|{UYXQ#jLC9(y20;XB5nr&HYgWC(pi<1d4+>Qb$EFA9 zR{_UYAhc07z?KSN#0vHAxJ{(S%YTNxzEuRao6`v217yQUv+${6yR#}i=Qc%dE>^oD=MH0(t_*3zr`0p(HOZZk7)=gXT>ui7+6>IRN^Ytmh$P}s!8oY{zUya;{C-)z8Y&FZB%BqP(O2rQ zsevA<2LWw|#c7^^>qDo-hPR%!=z4u_dBdqexyGgI%IHh{KG0E0b?@L37JkiWrZtVE z`VsJOuR2_Q6Q6}HVt~IBTN_l#vpMu5oDufiAAI|baLpHDU%0DEWUD@r+wI!!{^4)L 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 literal 0 HcmV?d00001 diff --git a/site/graphics/favicon.ico b/site/graphics/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..18949c3c8b683fdaaeeb3d2c6a863b401e074a9a GIT binary patch literal 1150 zcmbW1+fUPH7{|M0ciV;A#V(fUV2ISw0y5D_G-Eo)aEM6dFp)wz7b=GpsV!%0*B07Z zeoziAP!wnx=YtauKw&0ko7u7@m>ptvFz~2P|*C&-=dL_xU^*&y&0o z$t&X8woM|&FiH8V63JTWG(Pi;dY*ocyJ45#NKkK_Ss} z3Dynf2ALPUF)otM_hT?6MpK&=LCaw&1-08Tr0vF-BtuoRgY#)o=oC_#k459y6GxB< z@i`|j$#-EoD5Ioo2UVxTQJ21p{=;yLJHs$VMbMrQNmM|)VRKFjle9^zM>;al$@cNb=vDJx{7S71Z1V-4Gmwn|FtnHVMu zl}uNbpw-FfR(>3+`TOckHW%h_CdATz05C6D_H|;Y9Pb5=UFUQ-c zWJ;&zLQNu*safZQ}L8#u&mSb_uWkZN8kG2Rl>{!@_;uwvw|WF__xJJO=bu8e@Z~F+5a;O>GVm7_aILk48)hTZ zrE2!8g6#EbAM^d8nAHtYT7ILH9ro6K6}fX)>|W*}+V8 z74vmkJiRIg`tup^6mZF0%1pV2nGy}YhH~8QLfm}?^t+WzHdQgJsbExample Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":558.5,"y":564,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2,1],[-2,31]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":595,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":13,"y":693,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Discovery

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":452.5,"y":356,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[104,134],[104,46.90809452078793]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":490,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Data Loading

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":127,"y":603,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":121,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Housekeeping

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":10,"y":603,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":119,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Monitoring

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2.5,-1],[-2.499999999999943,-106.14394894619477]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":0}}},"linkMap":[]},{"x":113.5,"y":547,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.5,0.5],[140,0.5]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":81,"px":0,"py":0.5}}},"linkMap":[]},{"x":13,"y":510,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Report Engine

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":176.5,"y":420,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":40,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":331.5,"y":423,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":283.5,"y":664,"rotation":0,"id":101,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":150,"height":14,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":216.5,"y":653,"rotation":90,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":180,"height":50,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[],"linkMap":[]},{"x":253.5,"y":768,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":325.5,"y":508,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":34,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.289321881345245,2],[219,-104]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[2.710678118654755,5],[161,-102]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-3.289321881345245,1],[189,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":271.5,"y":543,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[11.289321881345245,-33],[-160,-148]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}}},"linkMap":[]},{"x":284.5,"y":509,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.710678118654755,1],[-224.5,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":1}}},"linkMap":[]},{"x":253.5,"y":510,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[156,130.50000023841858]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":25,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":146,"y":195.00000023841858,"rotation":0,"id":65,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[107.5,46.99999976158142],[-62.5,46.99999976158142],[-62.5,114]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":60,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":22,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Write Database (WDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":136,"y":185.00000023841858,"rotation":0,"id":38,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[117.5,41.99999976158142],[-76,41.99999976158142],[-76,144]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":0}}},"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":0,"endArrowRotation":0,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[0,-3.5],[80,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":0,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[2,-3],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":433.5,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466.5,"y":329.0000002384186,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":10,"y":329.0000002384186,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":59.5,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":486.5,"y":309.0000002384186,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":506.5,"y":291.5000002384186,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":33.5,"y":309.0000002384186,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":273.5,"y":490,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":622,"height":843,"maxWidth":5000,"maxHeight":5000,"nodeIndex":149,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#010B14"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture.png b/site/graphics/fullarchitecture.png new file mode 100755 index 0000000000000000000000000000000000000000..b5a5148a7f80a6cafce106c39933d270dbf4e061 GIT binary patch literal 108103 zcmagG1z45K7B>!?O>CM?BQ4!2Atl}2NC<+6A}tMjgMfgPQqm!%AT1~@ASg%+NOy{K z*Ejo|d+xp8x##=;pNHpx{qA{Z)~s2x)^Gi04UxLqDg?MRxM*l-1Zt{^`e$#fQH71rlxqu(8uamCbkXPkBM+u$!FScBDB|d$}vMIM4qjP}=$069`IUe2KNMhxa(kI>N7(BRMU(4lf@|N7BXMT0wj&dLAEhz9xV z2i76_pAQf=7Bra1y@A2||LGY4U7-2*Flgwca0E0>V9iko2Z8plA32B{!M{Hs5HOe= zM2pH(g!(@NGa~D;{w;-E>oX`Lk_}%n4gcR#K;q@@V*Di%gwaMGJRrrQ)57}CWK)SjN*UK4C=uA%(aO8hlMkI0GHRm?Mm2B26Bei|lc9?N=5lHnGcm z6uNK+=%7^$NERskq*xRuH4W_;x)c1$Kl4vR)pg&DKDmrDJMl?Efs*js$p=jYrJ|REui&ht~hQ z9Y1Mnh8#bJiW?9t2-wG3$~~ogxz-lc^n$x6%P`Q1cL>o{bG*g#$^O%=02z3c`x*HS zh*-=7I(Fiir$T-GJR6OL*aQa$f#@dz9sg@&8#y2a1{S6fuu#xq1-gKXj#|58prGjo z&uRb56jpJ-lJMOx767vc?f$g1|7zE$iRJ-m!l&&7>wLlrq_7SrkAa|HvjHKl=&Wl9 zff{ZDbDEidq5ogq>Vik%xY%46z#hUu$8U3=*`dB>3<8qfWdf6zQ2`zQYh(mE5R8C| z%nN}!_NO*aW_;zuwx^2lA7XT{Crxkbv+1Z?rWqC<9rj?b{jme(q`)}!Qb1sQ4Map> zgyvoK`P;E2@9i8ZS1;dj0-<;9X;-Ku$0ky&HMg|>-cSs;a`Simk1}1}J!^WK( z1TWsfrnpa9Dn5;D*P15^`3f;SWPJ-my>tcy-e{*Q2m!0lQnA`C@$*K#Ms+t2_lG$oXtr2<{O;7yK*X#{^(|C=U#8uF?i+4QF~D? z7%ar49fAf}6pLJIvzUP7%9`TS2f38QDI|aF1QlSMwEVOLUI>ou&W0RX!?Nq2f|tpWX14E?ke*3o%MX;Smtuxvf z1HDx%({J5kMOT8z;=a?kCPlRhkPZ|LyeShe7r2NRy3<+;X5$beHQ}rdn%jlZ!5vF| za&9r&+(NyrM7t#_if#d0nvnxKW#JHOY`6UY52?OGQ`e@NHXk|dE%d!(Xwn^NNr#O^?MuZtGM(P1%hXC34QE^V} z$nhg8oW+oPs^(NKASV!rpFs8BDcowtMu1Ab;L5TLnC{9s%e6j6X((EJ;*k^N1H4<| zGfK={8+`1|8yJa%5C=9eq{qSF(_s=HK4dKnUL1VF3$Ld*2O7a0L4#@nSM2z$B7e|< zHAi*sJd+8jT#sc6Y01WfiOBQlViOD81gfIWkG++i4A#{&Hv&q-Oq2}fhHMlD(|$^TeTsb@d7WKp{8g|$g?kK z1)+%7V0zza18b%|p=7WC9UR6#b%8fWluBCcLaZx^lbQ6vO49gZ65GCNtyt%YR@Vsm;G=Z% zpUJgyA?Y5$S#+;=G+-GqS#p;*ku(T|1ZoIs@0y7>U`>8;vsM(UaZ(lioWc{Qfjed( za@ZJcgn-?@!leB!Du(XOvNM>kGLq+Iakkw}a{D>?x0Irv)egEZS=6S&8}6?QeR5yM z_1dIyNHJ0Dcz8D3s^i$lFU;w-&@nnoKz+uFiH&X0b+k3bmo8kvo87ZHk}I9WWv2hC zaq$}zz9v}HO$FRFCYTVesyGyS5r)WwM$O1QfNR(cCzloLY|oIv^~1Ade7SUVUW&jl zmwVSWjS1r{E1k$QWf|0@KY7)rvrCe*bTpcJM zKgmjx8^n8_C8s4HfpV#L0Sxj)r_n}7w`R5BMoO{#(zJz@jui`P(a2gIG?TyZ+K9O! zwzlcglJAR0q3U+#(1Ek*HswEl+;qHtvb#7^Xv9sk(-Oy_aCSgON2k@&o23=nLZzO> zZIt(*KT9w4?9f)t@>zT`SR<7Y=e3Eu(iX!^1)qF_O<;s1;@<~ z&WVyAB}9>N%HM3hGEd(B$&Rt?yPI_VKE9P+5WZG?m40=a zlFVnJJmzw@C|%5Du=k+>r~S9Yx0O|B@(`oN&qxqaX@F;R!YBKQL?pnZQd()2qM+_N zHq~re#S1;;YrBhG2Z{$+$vkEuLpbXjI}@9RHLCYE4p-6-wpYH3EcM(YYkn#!O>S#a zqHaWUwXBODHT?w_jGso!(Av+a(Q7ZVKnM5Gfik_bOh!AziGts9fWefuWwlrO6Z(CSycT{?VvxdD;};g+nl4sSMyz@z6Zpxq!?%eyJel&k5^)y1 zliLnv%g>^Vv*J7Wipu12tlUfsn~?s^>y``VXQM&y^Cs4+p;zMA@Zx03Sb(Dkfa}w> z$m%A5;%l{9!XC4QyZfddcXq;8`!e$fCcJEGGcjZQyUz}`C^x-%!d?|>Cgl|@)hXha zSv3bpBt!RH1&A)MgzP?Dx>j^s6Joa<(Ue)VWX=4#Os>snZI$B;lG40X?zgJZ$Km3) znr}R7oJ_g8dxCxFe~l5b%nhfare3eO${5R%_Fvwq;)cQ3a78mvfS4TYWn-2EBAgR6 z5HthoLiar&H=fV;4a#1~v1%k%JlgvDioIlUvwZmNa?kRBK+kCK^`*+gp*Ojf4c^03 zr~41TjFgOe9Bs|&obInudYoVxY^8~I5=5MTymNB*-?R#ZFBAx z*HWD9WnvU1x3ZCSV3O0=JC)%g&D<&`Cih*{t+T_2oiACdR(BV5WGatFIemGr7KsK) zPmt|<=gr4ir7DVw&)Uyi#w(ET?>5oAYj)xfV_3~$*X8A=1t2>|8qDTMGvOueS@%AR_MJrfj<7j}1`~weERZH`;!>fHDm#FT73Wy>&+uvFQ54R|@qXEIK&gCsC%q z2KDic%1u8#tGeH(DXWtuFZ+Uqbp`r9{&YO+Q930N`)#gSX5=)7Qq&URWcjZ_EPdka7 zCJVKAV6-P+iw>eqHEp?(3K0bPb0KXbdA`CQ{d~R-73?*>zjx2w?VAciqs~Y7W#&nb zW%b3>MxU#k{Jrz&+=VC13|1!##aE3&sS)K3O#%^mye3&h;#eM#9}AyRx#NF3Fo5lv z_Tj}JET_0rdCY_cLz6%MCbQDI*qK+5P`p^coxomLjSS;y_KBSkN?N2%%G8x{`W9Dy z1zX-;JJyE;w|^!!Ih~gRxb_%;tLepvY5<6Fd=wyoxX=5N0GgvkBO`*afn-eN6ce$M z9^L8z!)K+3EB}Gn;!b&K0gSqV1z=VoNVP?r*9KjM;T5ms1X*6Z;YX*(4F});4TR~k zROt8*lH&Y{D(nVHi~k2z7(pg0q2XySkqI>4n-F%vVC@oYLp~u8uTcn)%(>>r0rW9z z{GY(02?3C@9SSM;qHtiW%)}E(5TWhDX#W8zD?w%{+S>v zToylZ{B()~V!{SUp`QUGx>2F@0^JtL^?xCc|L=i~VUH~`8IflZ*6MS24*C58&IHCHWYYu+ZpuSM`fwpD_~xo7`5o= z)!<_q?}B4_32a=Q@h|iTbomb`$N4Skzfev@7}J>wL=+9(1BI}Ke>>Ky!8qXK4O*hA zIq2`vlUsN9ufE72v7TeT{jYR&7&NBgKKRF>ZCw6XY2>ag2bJ{y!rEV~6=~}eE;U%y zApXWskdI(Pdli5#vP|;}80Dg%M^2V8K2|7*W{Sq%+m#^~n2%b>MzD}8G1BHwP+XK9 z=0Bx8ASd`t1av8-dxKcu2Jk~anPZRA(tvrEs!RRL__73oZ+>__D25LprzQ$=P7LJF z|B;0okNo2jR6KYDko&y64J-oyqMOekUTEkBC{+pla;!0ffz3wFGJrFNNNmNVBE0qY zArm5l z@tBB+C2=Qrjqtn}ILVCA9`0*@P@$7U5`vWc4WDAu)}%0VxP*0pHee-8Sm83F-@paa8%GSlq7Z`Rlay0Q0KV!su+vXnL=OOyhCl;* zY(Wx582lGg_BX!jPeuz3ryfNr$|x)Wess4I58DRWwH#^dS0lk4+Xlkb}0EC7k z$aRXDH1A_V7;VhKi^Jjc1lZ`aC?0TnJa+|%^aY?G5p5n_QsDHGfTUb^<^@ok!1D;e zr=?*3!KWdhXLq}G?}5h{DB~C4D2C%8VFM|u(vnB))?YxEn)^r@d%0`%d7%6NKO^=QGwtigz9 z_NIdz#5*oPj_X){a}dVo=)m9GuF9OK*aBKO;gFhv5&xY&-f8s)))y%Dv{(Z4;RbXa zLy9*7SUNcrDX6Y1j*p^t7Jynimj9$r8IdxSLWUrBX+;2)Vd3Mx1$-^BEIQzkiBYO{ z1=Qt0V0bs+$6I?q3oESH1r%=r0`mZWdz3N~5ez2q51icqU}JR^QoC`%i#6cILIP{^#bKyGE709h6dpRVjG2gz6btfBqjo*^AUm3|C>g{LQ!%yy1J~y zXvh=L+AR!d41qWYUH=wVBm^&70SEk#oFdCW%VP8>(320an}ORIdbr@laPT6{XGLT1 z;=kh|@s1_X?`#a66CtokTJZN`2SgMwV7eeG6vN2~f#IMbeSlise8K1^v_Pr-Vff?# zsR%HFztKZOxWF(SU`PBfHwrjU)tnS$zBrgz3z*D7Peq;{;~WDt$l_zD1J6%QqWr9J zQ4Z!knq796Sh>?mEzVc$1$J|!h>KaOM z4}qTP*XWuM3s55?^y1dvmAqTqeE81x5bH}Av%-Yo!GCd_uLgyzJ;-6S2guYOWo!;VDzdd&?K`SX zo03H*&g)s6>o@P7Dh59iE()@XNeE!CQ}s^^_~NlLMQdm|ZbBAXQ# z(e_NC20Kxwvr04F^oz4E!RF&i3#muD#%vC&9v{h7JeoPi~3Ddqw1M-M+MPSQ= z6M?lJ39z>%{EBbmIBFtTU1keAJw3g}=|~w=IK3mI_Dp=$jb7Robz7;YZ;QUC`F`dh zb}4Yl@X7tss4m@k*EciLPqio;2R#dZ5KpOF!-SMn&&jye=1u zOo5d%7UzN7eEhH+s(!Q|pXJ zg46q}y8d1wQFIpl`mat4eaLFr3+buJ!XPzHy^CyzO*9*AU)WR0?(kIhz282dUxH?^&)nSK&LL@RtV)DEtGT#QeLly zmPq^{?&`JhMFgeZTPNU&zfIaSwoLA1UR}(zQCJACA`206@=za(l>UjOSJH^`r#>lG zTjOH62KdM4lim!2s!T|OmF+jb%X;*#`HVO$X}T=BsNSOsl23^Ei#Vt4=l>$1mE0yf zV)10s?NhbM`bEuA>Lx*{-o^=L`+R1^5(+zLd4vvM3l>z0mTP4~&${kvZ~dszs7a^N zdt|2n?iO9XQF^RFlL=mwPDTF*yQ40;&W#0Uchl5W7_)>*D>bat>J~$o&ae5q=;G$^ z_@-2%#deOSBl55X3UrPjTytXI zuM)0EnvetyLE15&2zGz^tQooa!%9gWi1M_z4XdipK~;0OE2~fj_PK9u6$D0lrV%2j z2usD|4I3t;Lb2!Nk>Pb&F3rk|(z{F*?o$tHyq8_%A=oe&?JsqTLK$rMTIP-dz%FKS z`iw|FU6t41#04A%2(NT&xM-T@8}RCu%G>CdOM2cEg22}nSmzs|PrWNyJhB}US~;l* zkJ@`c=!>|c^h&Ok1ohr3FOM;F^$pf`Y>wf&5F|APCRHC8YJ720IdywSy@NzGC;Flc zK7P~iG0CEhxR1%R@2&zY1LPy|awf&6UnD@BdQR#DgQO9IEKNN^21VdmP-^CxOdJ*B z@_sTHT57KQY)r~w)w`rNa&w~D75DPCx0KQ2Lo8PHMAcpxEgsBM5G!7evQ5I5hGjs_ zM#fW|WgsFX>}?350h+9Rm0{cqsKCh<*1Cv~JXT&G{7-2oS{!7^%SNB$nmDUsT7S81 zI=y_caN1Q@mVfg`%J6(kir!brGR`;mu)i@|b#_g5Jic7zDt} zGb$9o@=JukMnWaOLD4gDIHZwbcJC3?f7JrK8!0Meh^ZP~=&OzPeB5I$`B6GUduv9~ zSKXxWZYQ^HU!Fau%Dhmbh?07y(=Y!{8Q+6==D1(E`w`xQKSL+i4`#k6@-G>Evt~*R z;r>xrgZx<F6@xTcWUaY1(XyS0-~7gd-kZ)n5R4G5Wr(AR}K-=byj_nen;ZnQ}Q8<Q88zacJ2XtKV$Ky6+RI{{ZKWp}ZfYBji=$Lt))-BJ0l-_t<$0a8wl{U$KbN7Cz9) z9>_oU4r`qz$(}sed4DqXQSG=B5{oS#wLRUaeC%RX&@je7JpCwTE%qdh&x7z|JzL-h z#&4<8ab$~{cTU#}?qaHH9!1y1M0~z}Q%l;MlhOHYup~2B0b<$6EX9P}?6eBWUEXUj zz3GunG2!uYO-ot{nDj?NMr1Q7_XrtuiY-UgX8Fj)Af7n>drMq?kq*7V&o7xJ&p{=@ zW50_v^l3Z6PeDqmFNq5*E$ok@}6we3U1d$%i4qf z4%?Im2QOM=0@Zn*Uih9V29P@koQX$eNd+nD4i> zd56O?P$y3aJ1FzX{lGX!0UU|~jdxy}v`m68-RT2XI`g{JKDrsTFs`v&i0wVq<|?Ct zcwgpS+@I_`*7Bdz|BNZT zQw7(~mMNAej_0L3huNnkm6}M|MtIt?Ftr9pPjQ5?vPZi1)`Tj1$LIL`^f6uCL3hJa z2jK;Y*BPT)^vVq>SGX|GUHMRy1uLK|7&;pIQywCXLunR@7{uX#r@p(dABN}u(PI}#~Edo9woCl_SP z@a>0vmS^OgqtqTNwLLa74=mSzU6lc!#?J$G&YYAdaBK=T(y6>G1EH=7qBvABh^^1@ z80x`k|{I z`;P53E}*ZN=r6voUmF!Q16ISf;h_z7;^UpErpBgr+BwlDo)QG`V!WqhxS)6dxbgeb zqn>7^XUk#uMv_h3OMDMP$QR}(({1&-zvDe9*qLgkRjVtv%4sm+|B6Z4Xr4?NZo1OH zn-~AWR>sm#u!Yaz-t$zKE|1?n_U`V2>;ezJ87BK81r@5*?82Q$*)`b0JzueyGSp&A zEzU1>eamP~Jw@2!Ob9Uy2(ibTtnFne^(@3s+R`sN3zqLDr;hn3^tvtedwmpmW}>hU zNfqI@FYx5Ir<`(E73_KPyv|)&Y9)&|cQDJR9jFE6IYx!_V2j zV(iBz`+Q^=K)#Q@Oe-r`7f1Q5JB-Qpceedi_V*17L6!Jbn7NE?Urwql$0|H(`*ey$ z?U~`XQ^ePf1yVtF-GshW38Z^M)Jb$r#y|-&^uGg4#+cdUljS1TX-v8PBhUK zALj&yI`*#%ceQ@Exh17($7=sCURPU_Lr?{B0*iH(u-&`FL7XN7@lM>h#%^7y{Sb11$1IG zEP|u|_bl5n@e8R&ixcCT)JfwEp;dnM*ZUMNJ!X8yNxx>H5xv^a_{vS9vi|LByDi`H zou3x3^Btd0;R%?0O<5i|kA4`P*t!cM>u!i2AM%HzE0IcjTT#gui*K&3sqHW2J1vxW zEIQ;MmiX9rAeO8}v%a9FWjy~r@s1?&8Ou&5ZY7yjq&PF?s-z1QFNNIH3n|{CuRWUU z)mUE%UJX0+vE7QMV3?8B>3zM}bl_9%IPSFnN zBwN0R(p``;V?_&4EG|RJW~g$+Rrq+%a+X|X`kYCp1&b?W1$Yai|CbvtgYNxNq2a>; z;G`cuBl3Oqe#h&0IUU`@$64`m{d-Ek8ErTqfa0Hw=K8Q{U;OEHr4SFoVl|I_;K%rF zexxNW1^I;km;HI0%1V)!`%w8Lf;vIkUs6(;fLYjp(sza+=z&=TP{WI{uT1T$pih9& z&_)9`!ssyx>1;-;we1R29%30@wg6TDR~73v6z*7o$dP26Q-k!gR;D+%8)So@ccCC zZNv_RVEJtx-kM|0iHh{P=Kwp>z*TeJEgjq@f)_LRC*nh_*lpO6&P+%vqEcks)sxtk7(uLO?VaGhu0q%a{rb%kTPo=;^9vJZ5sf~^c) z%^hY$(nB`e9y1~7pGBA6X>|lx`AZbQB~3nneLsI^>s66IKPPOs=xi@u?;+LRR*edO zpnx*^US+cvrU%55W$hAlGV>r7en(CWRS)!6*%C<7=`mDuHh)REv9S!08cL_LvkX)R zB;3ZKib8-Br$#m4K@@JXy3&V-CaH>S%Vx<(EfqG?J<<)YL5E@Cz*8BS%jrR$&GkeJ z7qDF+B(D(&P^H6C5s)qhSWX;jjk#FgR|4z;Y!tcDK{*7s<6!8TO8GL6H9*Z^l$d&- zn$43+N%34DzpdBKCKch+-I)p?bbA{g{NM^iux(+LNXDES=)9}~8+v4ikB5@^GNc*a zNwar!>#V?>u@>9)&&q$5`|*)hq_m3N z?NgE1{ruWPe&^*tNq*P*CXsADi9whC89wz=|4^Zh$^#u`-Ff|3hJelF(l7_3Jv1B%ZjR_fz=d!NhDAVx&- zlb*tn?P%naW2`^6S+;dpEQ_v02&*eN)iI_%cn*zSoS&02pQh=MMzUHxM z#Gp9&lrHBOV~7QN}&DVJX9&VHQO95voT~r&yc#zN^>Tl* z{wH~;_h1K!Z1>r0vv2gLF&Cwn+ckv_<+TN}4!y~%_%!lWH99rgT{59_qA9EMgLX8@9AK< z+Vqw?S{o)svJSC%EQEz7YnQW3n-(U36N-@cIxT$JO5^gvkN^ui1R)Er2b8pswWU&~ zq%k>sT%nq+3K}%9OK|3UdiNbv8JFqC=(ZhAgAH5Y{vab4*UFOU)`)Vl@BP_3>d8{C zX`3x2Tq-k6O!M8OH!foBC)4z@3G)+6^!4kG&j+g49_SCT;a?+zGQ=`v)(+SX&-X~V z^gk(OyYQM3N^5W= z=RLEpY0NS`!hI(4rl2LRfFUSNP3y);&JpisPrP<^b*e+(>8nw`G{s2K)VPhvO#n$z zp=H<*p33p2?hUoM%y_jS%AY5;*5Va;y=pc8PNRSNHfgK-v3XN$`0)*n;4dNL9&`SC z_r&jwA0Moi@BfPZ9?yC6vSy9a&sueEhtrP3LN|6C-t7UI{iPBbbe5c#tu#Dbq+_pR z8{Vq9H-4yLq6T~Xvo@dV$&8}H%vEa|_9{Q?&KIpgj}sX!Qz4audKM;&*Y;*c9mdgN zOyG{dlfmSgL`ei^pB zy~1mywODjP2=m;2+4hs4SfBv01Ra; z%vRn5l4L4|$IDt5U&%oD9=^)!Y({sH4#9sHcDT#0# zrGdK5!S7ueQbt2EXbnpa4?gGEr-m-povD)HgCG9c>aeAID5c^#UI z6_Azat8qS}9!(hKxvM@LOvSF`ejXm|xF;q%G$!0-u=2}ny@T`0c4+rOvJ z_9@`-)7t5#+>I2SB6s_!p(QiC_4L8vwSnZYny2l?8$W`J>-pKD=s$Bf4PDW_)%{RU zD|zd81}M)?zHT~FwgMnnSDBj8h8S`LAGfSFw}g8v&us356W7oF@`EJN*FLaan9guB zc-Z&sVO8(M_ZxcKIb-Nfm^xr{^C-+lqjj>E^^`+H~-@+2X(il4uzKXqS)LQ z{FwUL$>n&k46t3!OwM|x)Qu;%Z zf`QXb$9mSpYa*j#-5}5>DURW_+Q_*Et3h8;g=kQIj>2fAzhEQUkRKne2iqg|2FN%K-b#kWt(FPtN6{A6l>HQJZ!3Q&Nn5%?zK^~QY_sVh zOnDBkCSzy)@(Ou$=icqlYu+tT zy~6~OB~NXL2guN11lZZ+=}O*vXRZ~S&=+2XUhU5K*f+QZc1N(_Yr?tmN_W7us3>T7 z&2MG&U8^*c8Z>`tM?cvt}4M7cMBD0J!%3Z*W~|in$e4 zUp7V}lhXPP9L5E-w|Urwhu#+F;W;Riu=NKt4>5erT@H+$KfDE!wkK92v0rO6(rjsuOR^6^RoN@F0b%Xt zYM@smGxzT0x?EEL-%0|~BK*k1GH#G8GvC?H#)6GJKaB^c{yQD^iDD`_C-;XqOzvYq zCIGaU7qM^VVyOtU=NjhHoa{|VAO2%;we702K$_^*V%}G!)GO74ax_c=52o)))W3Y*(?muh}qJONIC$9IQVdJulvCc1@eO zHOyyFw%)IUBtW%4eHS!UbJ&ahZh=}YgXk|7W56Ulora&FojT@yEw*pn`9P zPXh50a*lO?H|n5;7n7*oU(^G+{Ek-$)Q_z8Z7(le99(=c8jK2zXGVU1N1hXQGp*yb z#>o?U!YqDcY;4qq`VNy~pP_<)VP5jao7|#|q}3 zcR-GTvI#%u9r~Aa`jal5@`Mb_lxR>7y{YH{GZnHb(s>4zjL|$M1xMpypaSJjiH_hW zpHzC}S74;58$LFlGZt<$1ElXX6AYRDbdK0_&|&w7_COze$Xcj@#wzLLyd!}H-d?%v z0n;PT9qR|vd-m_?{grjwpo5c928*KT3@PlJv!5PTDCL#eiIhb;}12_-F5&O#$0JYG$=?O|GixOCUJ_87E z(BiWCb^e}q*(2!i#bMU~X)2?{F%hbAYG4vnMTjy3llZrWKg?yd_WfxR;GWGfzoL%K z=QkO*7gjQ{<)N$Q{+OqaKT7&Mz7atk7Ilng5gs~uPkdZrYBayh#j?${A{yEhOamkV z!~bbvASS6cQ5gQNo%xrYt@1Cfw;16G(q;&7rNmZba^t`}VYvqE;1uVx{qs{lSF!KS6;(PSTKdf@L=Gt-sa#rE{h+!5P6k_A*>@QFHY!-@ zSJ?r`T@T2m0pz3ed_&(ihi!?cub<2WDuT*@NM0{}{qP#jCHiRJ>VlNn{Q=+Cb3EGC zf~aL(4}!4h<`aXZ17bAFBa~cMDg-9#9#+;iUKnla_PHl<7C*KxA8FGJ%b2Wv-M2lZ z$u9Q3@>avhyYFj zGSqm&zQ4mXpls79BbJ9`GCh7_2Ue%^U#nvT>3SM5{OM!%VzpvbjVQW_jfzYbnzh_asAtsYQ9ZgfC?BWA?3t2^ z+7&YrOnNxJx@#+HY49OJz-ZZ@;CoB^~l!JosvQ;WJ+69xA|PR3?Gx(DP2? zgusj+eSvbcrYcdE zLgoRy+Scs@xqQ%#o;muY5|_y;HwXK`P23fzWT^QVN}KZ$P$ww-=bAPmEZ!f-mvvWf zH))knQhn-Cw|jS_Qo^!s5Pwi%KsJ+ikl^gVo`?<-Url%nPg>LT!pD#G$ zYFIN34tH?}eSF>VWACq8fG(ni2N~TSI-vMw!L`SWj%%fbV8bc_OXuf8HN3bxTWD#r zK#dheiw!TVa;Qs{yYDr0aUgOyo(FVRiYRke}^ch0^G)1#B)_iR=_dm@$i z<#>MUzUlvQ;hJ@f(|F>L@c1=kZQ<}dIjfa;*2jA%%g&^@vn#q25;qCI3sMJ>%V@r| zud~sEHq`f##^F(~hd-C6nMXWVIPYi-rj|y|G{jHyfD0#Va?9Z2q%vbdj1I{hCfk%< zcVtTy3)k%acIoVFL&3v_KH2Yg5*A(wtFbH-Gw>R`9a%5)KiYk3X@4!Fv{%n_MQwcG zq-L4jSa0GwQXU-HFS+?>g$GXcMkg$T!|Pybdc?)EUMe&qP$iIK!?HP^RH8npxJ+)J zSTLGVxEj!!@HNT1{Mj(zWyJsVGGtJn?$fid=i-x2+^=G7dS{-dIJh*a&~X)YfS={3H7layUE6r-c5z-mtK=xK2j)%Y& z5eQsJ{j8zfXC`eDU6%N|SUqF>+eyd>BCCUA7!%^%a!|0;MGwTZutLy}hq7#zdlh%) z)47~JK&mIU0|NeFH3W8bhd@L@M<<86wv-^ADP%AYG+skL+NQ47?>Y>{&hRW47Shm7 zU3U@KZl+8NiCLZA-e~{eo-KQmm0tfrc;h7@%YbS^WD6hI$F^Y+FTwf};1n|=&b2UE zXcx%Pvld6UCqIhVeWmcVYI({evS-<|;nD;@KC7jwc=oxIdsaN=B8T8`)6k%NgT?f{ zkWPGE(e5a75|ld(V*wONkE}u36x0B6!h#wSw_X-P;Dm0GXypN0l8%K^DYHCPL60|m zW?#?D>aNUuhMe@q{XGmS`6DIb2EuSKPgr`v%~P|Exg0 zCSo?ZjoaE+R*IgU{zti_*F)Wr<%@;F3f}yv zYdNVz5#Z8McOj=-xESY&>u?(DF>za1L#>5Zze+>NPYq@+a>tJNpCH@6%76=~#d`HS ze^a#xQ!5zv{oH=teQ0FZ%^yp;mBx`KS4Y>oE)8PAI}1elrB^@RW_EY^fHMc0PACy8 zDo_*a-a$J~2iGqZ4ImfBBr~KsKe57C1xoMfIT?$#1f;yLj$FO?Zt9jwaTz$o73^E} z;H5>2jb2!_h+E@3(9!#s{_|3Qm;O7f<1kHv?^#%dZ|%h%cRy3_E8en9s;ZsoPdAiE zC|!DDvYb2P`X8JwlGg%E{mAOUeH_RxD5ZDu44nI$Mtu^|h)DU(TT}v$%>A)5IpaIa zePe|5F9d#V;!DuJLzQSNi~QZ}8kIq8>`$m(@Q8gf^HHbKtx6~&p1aNEWRBNhZv`ij zAzAi$_Somp5L8w7$l6}(-)sW)?-P(vP_iugN%8M`28G;mXz-H^xxDz9J%+)Cu17)l zfY1{9U=D<^xuEt=P$Z5jQJ2%nImfpr{QKrY75o$Zo_XWZb!@I7?fsZ&x8F+hV*lLj zLMnH|s)hK@>#9|)wF=V~BGp$&08Bd0eBV+A(HmBX?DqF2f~8Zs@wcUef{HxX$NgBG zo;+Iz7>?r2I1!B%;^7Imwa#gBX<1Knu=N(8b!bxIU zxH>2p1E?lI9v1{t%h>-_G6L;*XKS)Pb+n(3{1JzkUGiPS3Pq!DOdYXGaV>t;V|^we zU-YRs6%#NMTIgjf5}w?Zd1Mm!o3(WC14Gi=i5DmSH`#z`>HXbZpd%@9DlT}lC7*%Q zfhU&)8rG3fF(o-`^9FvWXnmp(b(eX!K|3FtP5s-Pr6Y_lXrA7r<)uyo$C?41|)$S;oNa>ar#b4yGR><>IiLiK^ukIf+cH-AaF(j>i~m{MSs z%m#Hiz7B3#$p2BPAjo8c>Br@--YIq}kCb+qBywsz+1Z67H&glt7QSLUBj$U>+AI-} zdruKu7avqY{7(-dXyu5@QZ1R&+9&7ehUM*Db9tmlBM;?)joIdx(jf|~nL-^|&wy*@ z!}|M{CnkpaTrm(~>~GA}g`4^1#UI=h`29-R-Aj-NZ(r(86S$(4kMsAvjX*GhN>WC1 znJv7Zc&2sIe&~nI9LCoU>jaO-4?UbloS)D9U;>N4^uPO)6B!x?CCpVn{9Np{J!q3B zj67XDA4)bF22bH|anscaViw(Zs1eE4mM|bN($>plft$4G5KVAC+be-Pbp2%ujVu!u zaB1xO3GNG0I~7`Z*gIwBJ;e1aXmP7cVA)mXDimZa_QmhBio>9M zm;SObSxvFA*-f@4G3nm)1K)2Sb1F=r?W)-yH-vl?GMJ4OEpZd=X`n~|&TI<&%L>mp zhQ3=w$bwh0MdZTa`k5aXBDd~g!COd=XOj#ZCnwCv^lQnJd}~?B-wm`%$u*7)DNLFS zWN8Ht{Eop}Tb{^VPdb}kzMX9Hom%_RN{|A{Yr)5mA5)uK4EU`Fl+=@$ar&#ge z?oeDxvEuGdad&rjcXxLy?(Xhz^PPLobMt5aNV2oDW!{-JYpoGIf}h{@Q(DDvx%fx4 z;|wvFkjWobn6NrE-Aoa5^zXSjs)n!1^y15Wo1|^2GDmPMxg4fR=9}F`w*D)rA>UKB z4C)mYn1`Vkf_YNH2}UTC^QDB}J9XsSL3;xZmk+9>%vu4%7DaVK&S4w99r52u2#uzc z!)sx%5`~hvEh(jvXn3H5tIXz*t_#D%8QW9H6R3H_`FA7I*E?-PDs^~iu$|Jg=?i6Fu~#8|3Y%R+hQbFI2YX;wS9{{ z0~b7F%2hgBm*4gtBfQ$FyCTb9vfgNoPL2bFC(>+52$21hSE^g@8t2-me zO3Qoh)Fd;WCSfscA*-XL-ozwcgEY#G?U>1Y*5i+^UmlgritxiQK;7`*|4pU8t?-}4 z33JoY`Yts5erZ#I18$u(<=QeDZq4Q>)y=$D5Fv?}&oCinqh0bhYssA~TZ3g4-GC$( z`%2*c?eQGdoy71e)CU|gcrDC+b+$rf+G?iDf4Z2Ub2vPpX!U$2TW|Fe^ymQL>LQ>U z?Zr%OCe`l831x5cN zZA+Rux&{Gaz+X-1@5&r-xoz6Eo!8(*AOZ(tUP2F0$&0bDs6N4}XsK%!Id_th%qt2( zA(fsSODQclGnE+AZlj6##pQ$1-Tep>%4^!=_6fZ|Z}vvRsZ=j^&h>fu!KBg#)u{ia z2s))GasbFYRIoOX0=+m$7g+B?d2`EDG*Ml~GbLheGkuaWJgcVAE*9mE{_N<+i=$L_ zw`UuFcDx%v`r7mcZgq?XG#1UOY7UcO%RUExXmEgSX<(ibu~e6ejF?;1BW^ zAgLa#<249zE-ChO6)$ug$b$>YIEs{ZluHD0DniBiNw(O*H)vIkm>>*U_C4ziNcL7j zHQkjm(WM0qOnHkQ4RW$6WyF~xD!iq7m`&MjJGzUpwEK1h7|<)&n$1xm&vz>4O2&X; z$GAk^0Ao}lDQ)#h@`PjqQ%;>kV?_8ok5@HEG`~M5Md%U+(Oph2pz!MSF(P!pDa5*` zX@%4a8%>FPS?QfznHr5J-n*K*4o;l?v#~zu9*){7GG8624wd7K1MU_fqb1pJm zT6e^^b;-9zOmcD3eii5Lcv6Py_U;J5ordOUWtzC?jbpVtvd3C!^GSPb+)JZ5+yj`9 zxfnk)7}U^ed%f9x93Hyz4t$Ev?rsCEc4jvl(8YYy`*H-I)V|o7{xse{ryqWAq zE_wo98?S}AmRzYO3!ks|pE-0aYr2ZSyD= z8dBa&xF%G8*;gL&7B9ou3^NpIP^-bERR6s`3?S2sGSxRHm4n-j@}}i@&!hXyE)7Tb zYj2pGi>(9+6Y@x=-U6?nE=7mkBy+3BMX|PMyW=?+VYbw79Ei_nh5QWbw)3RV2qx-tvbo(ly4*$ujEZhKY{{rpa8wt6E z^(M82%^QgeU=l*7i>j7#Y6JZ1%Ug$TcSNb?0-d8T+4r`$IfIz)TvDjP7Bk?Za7ZAS zyoCmAxKX|U5IasxUuE{5{dD+K6ZBPGhk+4Zemi;~yQfbxdfyUOC)B1EPiAHpt78V1tmrUu=1} z)+}ygzWr5AbAWNuLunxr7g@J#-KJV;x)UR&{?Uazfic-%3d`jq^lKEyFjNXt>USRw zMqKM;#Ca%LkwhGBrwD{ghFC!`(r1#V| zF=<`o8rVv}kCJuDQwsw0Nb7SbMbD1Y^#?;I{(LK%=>b;6Q^4HAe&`3f<2bb31f zAr|}Se1FGSsWt_3xGLz7sNBIa!0EZaFhyNT zpld-yP+HiTXFPcK;!r_mR1)23Q~f|Xe<;(@>BgOu=G2q==irn2hH%Q(I1*o`X=TQz z{*X9@e?whLH3;|X+xV9)(cMooL@S-Kg;7T$Q<;3=cEeDmkYV|MPDt38F+phXF1IPB z{SWvha*b2qrdtqMp7s@~>gupg{n(PJJQA3fSTOMU-B_&@LxHN0$_B{|aQ-YhccUR} zI`p#HAGoIa=W);#ta)N&PT&3CXsAmGKJB?lX$Qgs174Jxmy^RpY!a1UnHW(Lr?NalaKWwu{?RXE_}tK<5=>nld9cFqd!NahsN;CNI5Nar6{ z9c!exS~=4rFE>F{$RENck>~lm0kjI0exx@GbnS*|NyfJxLaS^{9#!fkujD^2Yv5NfLQ(xzvL%nBas_FX-3rU(j$gQ0dZdfboCuGbx2j+{mrHq6ztU9f1? zYq_z|nVP*=B0j1qGx%!o(U0DvbNYY4iHPWa`yfYuwO%ef_O_z@_{&~FFThj??zby$ z5F}1$#DKb!;9Pc6j-<~YRdm)pDHj*3scaa2!U~|&+4bDkp3bVKD#tMj6Y4@eTIt0J z^%>Z2-;uUDTm*aI5MQoiPzOdp)g7Q+-jB&DJ5%No77;7$kW1#1P)fzCAGp5EB0aOq zFNW8Q7VGdQ58hdBmz>JqdOSA>wevhzoZ=iUHrzVwj&fad2`@2b6q*|(Cv64{yJH(6 z(b7LK(NYGa3~)Je51|ZFu<~PcRD~TKEZ9ebCcXuJ(IM^5bLsLK?KpISJaG_#1<3HuOfJiC5lq zNQn=RZ=QdvG_8LYKaC-&uKQa&E-{G>BN1r)RoCZucTVwIOZCg-tsB-8qH(+tVawJf z=}`Ki(Ef!Ri$Xe6>H_jVZPFOkpYKw!Y%S5F`SBtiPv*J(ApzR8`joYIN>^%%3T!yo zgbW`=9+^sabtZRb#~5z3{5Pj@)NVI>EPSqS!#5#r5>a_X3iIEtU0w7%E@uDRen!4k zPxCc9D}UMCh!$=}x!BBQJ7!hZ{GeuP!scw+-(NI9`F3r0Dzme{$n+4+y<=muYR7_d zWnRv|oLsn5#L30gIOkB$_ zazHsWe(<`v$UA{-sHDEnp!H^;%jeP) zVn$|$Ol9(8O@YR4qcH?l-=0&xuCz0;A6=EKCP6VF_yQ5a!JWcr<|g_qIjx^EMFh`M z=w10KOu7Y!VWRt)N6&T?I-b}PVMJ^N#Yay@G_JYg^SldLcS;8LeX@=B+itgdD(O$# zy`Mjoe0QoeyQY{9wvSVu0tFmh>iz|qU=Xh3$nnHXY7Lvu4MkGpAbgsDnXLDC+M`g83 zqr&r&MT0U|Y2-mMV2_7dG?yA&!3i5S+6`~s66>TloA5EaZzNydDr7%#qQklP`OIRd z|H$W9u$YOe4Ew{++3&vo%pVs1PhO2IDg-&e@MdMton8tqT`|ssa;4o`jh|^?>W9&I ztX8M1uvZpW(pwW}T-}rim~D0OkYcUy3OK|V4V?_b5fNxVd}1mCvZBILbN+3As@sd@g#DC}7ToLF zsuamY?K=@ao=y2Y>P-<=D$gTY$3X>dsIy#J9JP(?0G_N!zciT zy82!evK#Pc>pcK(pgk=fVYr<=qMq=qmY`5^*j7KU#x8$<>`eZ-P4a7pyP=|YkMyg( zbRlPd-!yD>*sc6Q-Uu|FNDlmXYlTgqH5FJplZl?nGUTfNVsss0!+)^ddsD`1I=@CT z?&FSZzegtsRxE_vtDzkZb>u!?Xk*-RRnD%bsU1zq>VCCT^dQ^!7)?`~l$zPsMcB|| zv5)ivr%b;_6U&0NMG5r`Mlu9Cv(9D@Rr~*+(2B<&F!X{3`2i)@5{0#GKi?h?xf4~J z{HpSi^ZS->b4qF_i>?D=GPl+75z>?EHxjs_8QCuJ)a;PTaw-u%p3Ar6a6f&=r@1hp zxb7(bqI^4*aJkP%47U6u3#1R}5kdvqK{%K2{}}0l`+A;v1EceNHn)?B{;5;LPds2B z%fr(CF7p>SXgg5-RFTD*`taT%@o>|TtZwl=M3?C!O2B(xUaZD1smqPdllu>srvMf2 zz#G*Lfcz{fQS8XmF=C>@Uy>xAi`AJ)^os{e#|Z8oM9}T z$J`Z_zxvl$(lYJygh-sg;Fh?zg_QoXvQORbk;oQWV)rX3mVK5ZkvG~;Wn4bMh2>7|-{{3ePxH={t69nw^cN}lGwPNRBg|&`%v{pE!!Iv&r?`h64&3G@c9%c5 z-^kQUYz0|;)B1)T@Z=#+qWACgFrxPKd^bo$@EWAQy$k!7lNkA0bpLJuU#033c>2IR zTGK8&UK-OuE#LTWb)cEh24!g@2uW9Z;h9S z_qJrK&~qc&`6H2plR)^KaiOvRus;=h&lyI_6|pr~xEZr!!lNhuAQSeQ?Edtm`*1*P z71_-f?k2N2p~1wz?F1&o5M>bu3mowuDfok3p$mDOKl&msO|XSB{moy+i9T6|g#J~p zl8n>M^C@MP_%N+2XOd=nR$gx?=O$G*tII2>o$Vf;vTgm%&16*5It$DqGuy7T`Lcpy0w=V8JHJp>EyW0ni^=lxwp~xz)_adBm7(51 z6Ftn(w}mvColK>P-HNTEi8s!U2!Dod3=A3M9i^(|TM*X#$j@09YX@rwMc#LlpMSs1 zy|m<&NBp`jTij!yCB68g7G%jMdvMuN;|^8P;ZxADgm@&w<0^6H(;U?@wEh#$y#8Fg zViOnaFZyF~3+Qp3`TfW2kFvv~%+i%+PIe^xMEy8zSIR}Jf*c^@RS$!K3-l!zw5M1L zH&7Jrcpx5get!{)?eM*nt$%>Q9!*I3cq?uDPJ)d=p6Rs@3c9t?HfJCZ%ch+V<`Hm% zSP3T1D5!WmKCbO@o~+|7X1*b?^C+z&6XWMLF_D%gZgks7TW{@B#gnD%$KNviFBf1I z@vB*|Zuj4lDL%Zi!|?3$Q{ypV*A4wH;-%O9gAVwbtD?=<8@~NhTbJw1otU~zVeGlz zHJ6o%QzFXJB##i0N7!Ul38k`b%C|&%&ufl-7^4CNO(Ki0LtYF=5tIoYl}KTfDA^Ix zgJW)o3~#k-+Aj|gVFqbF_;&o+VBs9gqtbYr2aOg#_zL-`6QI*`eyXJ91M!X$ILuBX zcIPp+Hav(v_5}`Fk<-6@g02ec&!=%;l|GiTxaE0_OmDDy^Ts$rQw%apI5K%EEr<9L`PM`Ej{iORn< zbAek;|4g8xt7LR_)Ya}_>@?qn<&)G&#D`ry+JBJ$sohIe0gFE2 z#rlkM-vo!0xi*O3qvY>C2B70Ui}CC9zje%&(q5P9>&dM7UwdxS+O-Z1DLem$GS~Z( zTU^(*rpzC@S-H~qsM2NKmyyYhg#)#pLQSFY1->n9F*IkZp_9_rTCL%%>T$oy<};MRo-d*T$NJO6?KtRtQTK>sru$Eb?@7ysh-a#RPfh*$2#g z3rw~qEaR;%<-8P@RguYls91c~wM>%v{L4X)hX{YyF|A=9?mnvCqkKUV1~jW~u^(qe z`YqD>=dnn`z(e%mB#%85Tur}*^7u< z65mXr^8gQ9c~?j~KhgfqB5;30C=Rw*lh7gqqxp*R{L5#=A`=0FTEWlKr39(2S#2H3 zAEOii_fH)Wt)H@SRrX~wxl9R&mh!~))n8z}&%ye-hJR#(1?tbelA};%R&9`WSyNpH z-c00%{2jB|u&U+ntsaMLu_kcZ9X7Fzl^K%Ys$GUuRZF>I@e<<_vi0S$3Vcw47YW+n zgMzkC59oK6Us$yHk(?EB1dmDjBqxy_>lFCONK8b9^6^b~c^1^}nahYpt1LW98hZ*< ze~7%$kpDc_l!a}oh-Ml+fE8<*c3PCFK!1A0T0*q5p`7w$o~5&7v(6r2RUuMmTDqX; zASC|wM?3h31P|w%ocpH+^~OL-NN7TpJh=2%+#q90OHX{Ah0nO)L6SL#I^0B^umKlRSr$FOWX zU(~*Uu2d`IhJvkwb+gOmxfr*jDJz9s?EK45gpI!(X+QXN2Fo`(q&)KLc{mwo0_I>t zI9qs~4Wc|6R_lu7sr70`cizWT2g=rk1_q~G&o%poyf-&%nO2sfLBt{TwxuP!)pj9G zLwD~^I_04w?yjFO+@v4PyQeJjISBD(`oS(iHh*dkf5ML@wozYu2$8!3c&noHM6qyf zLG7$AOc{KgX>!EtjGtQSpf^&rYC}g?fv#jRZ}qsz%zt2F|287RW4wvq;RWA58a(DL zU|rUHzyp+(fic`>?d;`EyHBItLkcTu*6h5!v)s3{U?hHgQ9);yOv7x>Ps-j>!Q)yq z6`wI1BEJ%@K`n{?uJ?9fWn($zO}jDWemH0Z?yCUS(TTkT?<43;j$aB`cNVOQ`peek zlv3|fXrvWL!TDqH8Ls{xFU4BRTV78?o{5*vv~fiAVx#);xTKrz9rqT8goF9~F@>Or zF6Y-&Og!u~aOZP|;u=q=GwZpd*Z0P2^4q3D9E&|_0m``KjTg4}Re{v+l*%pn5IsaE zt+$!M$D0cC!-0!2;_zN2>K^zM^$ z%Gp$njsh!&Cwj$P&*SO!Ap=0zwlIuf)boBw618rjOGz&tO!U+CJCEzHUP7z@95i~i znA|Ol3^K7u$}Bjvyc;TnfT*u2z2d`;1mL zI$cMyaPGhm%yYZfbGU%KA)3nwBD6MtGSeU+8Ycrsls;UYq()(I2bz^5sm?cmsTjIf zshS!Q_F^%H5b;OTDoB&9GXWmR=-|)eQep?obEn{bEV$yQnk~cwL)>((C^3Oz$e_K3O1@ANJ_`9c~uNoxq~W%-f8jbq=B=ld?h>yWAjkyvSePLhrR4H0J($TZW=UJ*!JnqGp%E?w^p` z!?fE0Byyg0r~IfV7${JSWF7b0nikGRMj(eQP#&D8f%H{%kU-n*qQtJu2a!ame@K*T zxG&1(LgAYzwWjaWD1Vss65BQWQiG_5BDu$7`sH=q*(06en|Ms|E~NX<#T6=i+vwwB z-TVb2dXUN0r!fk`8nDMNu@dmPy^Hbyyn9Ab+95Gw>FMniSnhzvSvvee07)Y72phlc zLi*w-X#8{qk%so(V`8Y$P9|mm8b#C~hfvY|SA8UEu!R7DXj2}<4%E*5-G)6^0#!zB z5+WAgBqLpu>r`S0*hB!fzRU-7+^WeQ3#J_+736+-LnW{?xU^eo@+yTOwz%jPh!}A! z*7*Z=WurR!-i`SJ)9l9&WwHIObsWFc+4^gA$L|a;bATy?MIj1^;FQfL{pdS~Iq@5( z^|X;}8rl*8#Fv~Qh;T|zm|$S`Ue>hHM=+82mb?p07TUM#Am8F6)>9V#@-c|ge}4h( zq5Q1L1Fn_zR47)6L3sFFcNuLetfSFIvA_U}Um*2zIcM5Uk6^kag+n(9fK*X&6EuK)@nIhcW%)2?bYQ5%U6V1_V_3*$ks~>T_K&4A+yq-PX%r9cP0g9b@)w{S z;meFpdEl`^ou(m;dRS>wiaybj(E%Wnzd3c%?t)vrIIe)M`&jx$VJDso7juAl{Heo; zq!`xY{tZ&DuP%u(V})kJcRoFi#qz-}e%=qi`RH-+%a>1;M38k$4aZ=K1FeHqW*s-! z!k|_6R80#5krhtFCb$gAquX)=0Z`V6C%%lZ^eh5XjZ7x>v=ZR&@P31~jRYT)?k@x) z{|t2fZsXZ(_RB`~NsNp5CuH;Xhf!og^avV3?;4#=C_3dtuVTtF1?|_L0;f)nSaS3|U^{88FLpkn{T#V) zJ>S=(b_S77kupO*tv)ASJVGws?R_t<#4b2s-F!J>w~A!qgP-RhW~WU~VQ5FQ4~~wqsce6Cm0KzsVIa@%F@5p2cMW_lAo{oUGTh@iHz?8@hBEae5R{ExA zy-X&zld^j-RswmFV0P5U9)saP?IXRL32c}zi z9Jv@p!;EJ4i)VJPs2UmP;iw9W$8xfZ+9A3gm!abL1p@hnlP+%#8?R`HZx3)LkA959 zifpYeZN8J^Z@9p#XSv?utF$@ZV=`pS3$85$ll}B1ZC&Gta>#WUWvK~jl*1}n3xELX zSgxd+)&iZJ8h9eV5bbv)c3WXYP6xU|k)Jeyo}J7B;?{Hhkvy!IXU46@^Os7p4 zh7r>>w|D>el1~3VI3XP#`_2q(=ih#Owtr_Ms?tb$zt`CPFk2J6f(?*2#r^6BV)DMo z!Tw72GJaX$1F9;`u>ZxUgoTB-s)SU4vMc4a{vD6o_0SH2P)Yi&Z!NgnfAjmNUZ!|!>ViniKit?M z*sfe$*CnCke=W7<9hb)XsjLm2EaLKlue z?JA$fi;%Wz2{mj`JOYpz3-0cNO8hwf_41d5L#f1mmZJk~6uB*IkfZe0RRPM`hGnxu z%=lM*F=^&79e3@6A)m*Gg(iXPpg2+QxZut=O5d~2J|%yw+nKI(`j<`f@e-lhqprV9 zu2C&Nt0l}vj07pgzgsoOo;Osg%D|fjeH_D}4ts#00iKT|U(~Bx(Y1RYQh)XwP^#5| zMALZEnentaEhIWWh+5zBY_wv&p{N8^FM>=2D@Cr-FE^jlKH3Ie!a+=nht@IFsZf7* z>{YQLj-CXJtLcc;A)DxlD%W~+-ymo*W)BaJE0h6%6r3Y7C~+e5T!1hA$hP#EKS;|j z5r;f@&skRFCMf+Ev7y-&V0(682QpID0d<6nnv6uFo~FklzjzCH1Iwr;$%wzO@1ax4 zkGjR*ok8INlEi+Gzs2Kcr%1X-`2tCd(8DtIHnQi^{EHTr7**uupSF?U@ZNQ-jm@xp zZ8G;<>rYkiBjj508;V?Cw^~7)4-VCofpzcs^^ybDm1V1CN>CT2MG1!1xO)L!m&EQj zSwsxYFk)*s3VK&sY}dCSW5aFW3l(@SB(^0TH&^`y4oAtb8g&aI#WN38D7NQ={M%&u zAddXCU^dQO3LS*48T}F0lTV@HjDXF~e^@fRf3LR9bczI5XFVuu;vbQBTbucRh2BXw5}3|Qkt8;QyJga!ylYcIy@ zKQst1G5d($DHVGvvGmh20~zU+10W+LA`zep|4tVoKv8B!g~;cteg)YC)3mTP|E1K; z`N`7%oq4Yz-IA>C)gI78yd#Rld2nLGg1H1-^<6Q3i16GQX?y1HEi!PcZ>xP zD_X}WzD<2-n#y0t_)}KyR1!*NeM$_1qjf3VSYrDMa)kK% zwx-zpyPvJ>VC}z48>PT~@Vo4yU8q-U$N1Bfq6+GQ@zSWAsgE>fa7gqXhz7l!b!D(Z z3Z7ll13KzMNfW`5-h_swL=}m}S5BT28o=iXtKHQ(OY{2#^W^R10QrDj(HFFsuq}Pj zR>@Kdn?y0)P)d`v75(h2b1~KmWkVc2qwNb?7c~z?hGJ5$Tv}l3&u@1@-GZWZuEyB} z5w(JMwJsoAq_7UP2vSRHq(p!#&lV0%PRJW}XYdWff^)d{o!xz_T)>2z7moZ@69q!V zz6Ge>mIEOmzyaip&*uI_sz^H_yYtYTy8x8^+s-i(qZqtZa=cXpC(|0;{A(SW)!~lz zSa58M?{Fig@p1toW*0m|9VFFpV^Eue9v~xl2aWJwZBVRm>4z}R%%NIz&ec==`er@f z7c0Pzkow~{@;pUwd%vXRG95$`te>D7eK8{`S4=?EafoDv!D^NM{c> zk$VQaoJ;~OZ>@)@>t4OOu@sYqs0*d?3+OnWZg%cdTehg5u$&5xzUmvC_I?44K_J76 z{3lPLn}a4`y)+G75+%iX=-A$$r>FiDw*VmQhY_FjvEHt4`^yo0{=G4bdUj~}Xi>** zAIb8+DR5&cjkFx{$`&E0os@rrBM=S1gdOsOz9bJu2^?zfJ{)*Xwt9+=tfU zOiG8DOytFnC=a7P68)2>D2p#TH|J1Tl+oC0!zhwhTtA37nttfOS4 zipsIaVN&Q@oH*(&2)kL&-grM6Q`c)1Ev$5CH3HY)ZDa!9(#_d2zWd4Wa>2+Jb#-iu_WgUeU?~-s~iMS}|yOr{3_vBlLYg>CSVM_;{^nSDWI9uwW`KB6Z$e z0(Y*k=6GOYY;m za@TRjSIv7F_OMKEOS@1%p-4`C?&8N$T%mCKfEoedJG4z+V+*=0Y>4XRW?xz=jt=pB zy*a|^Y*}{cqh&I&yK=tK++;M3E=m2f`<18N6Xo6h76z+CAvKakKOBn{EK0f$eY4yw zJh#(5FGTwDc|cfiw~qH>bOo`};l;W{{NeZUekm}T%tV#3;hl{B9zDHl-$>Anjf|k^ zOB&cpQE#)07W%0AWi*D7MKlzZ|6dQTY>^*fbrf;-alAU)8z)1KHRigj*}xeS7Z_m{mOz0*Y5V7ii=u#01?wVf$wd% z>cm1l9zS`@V+{?6s8FQPjQVZX3ric#MU%jk?E9TOig?c_qELA-vGP^?kONg6`9dEo z+)9DDYVtn)azHml^7i_gHLENR;}erNU{{FWM0kn`N6-q=0IWMvr5`oB%Yp-!koJiJ zB78DV`KV4YTu}&%kXENLRs?}S;KlnR6X9BGP-iGckkv+~Xi2R}{I;cbW2&9e7-@FZ z{S=|;du#$aWcVf;d%N?l69CR)se-jar#?NgTwBZ@d%S1?F>&-6B6UbEGuu$$og7=_ z8#_2lVpOIv2zQW2V8fMdi_|@c5Obl8p~KprN)Jaclr+Zqf~Qy%PChkF6jrF*ss+dZ z`W{AE7v2tW&eV8HkCRCx74a^dvad2jphDe#g%e@Z3v6E&aOHn-yp%oHs>kM(lUSKm z9XsCW`cyhCWGFWCU%6wA8>}-K!Hcal-CdlBr*lURMdJ(XJJe!QLC!kr_eB75lhQky zlE8np?U~(xrU=6>5-6I$UiY4&(c60Iusww#T*uw|SO5`&whFo!>#%A{e7d_T-(>gA zRk5~$AmX$K5T-|;!peA=QdX)+E+dyICGFVMe65+K!F0xNwovwT9z6DJ3TyLN?m)vrq>2WVw!N-vF_! z%_TZ1*K)?HGg|81$+%ClE{ZH5;bP^Ej9 zSB8U9-S(LN_IE+v9Kt)G)G<3BHzO{AXYcoV(GZBF8y&RLIzT576eZ{B5RCR@qWEgE2Uh zVsG;2>(y+J6Mhk+wIyaECOqlpaoqQR&= z+s{ko8gbl?CnC74#ttWMeL*OQ)ol*P=%SGXDOPLEf&y<>P@+*p8H~E^5}RJH417DU z1Uya_Trdy|wS)p*+Mo;0O%Gv+zn-rT;JJhuoDk~%pmV$}_*8oT5ok;^{b?QUguBg>;vY^jJkxqBC;1_M+8)5CHZ^BqvYJK4(eqw-7;XY1b>N$z-Vx*oP!ouZO=h zD&-1jz5d}z0#3s3fyn65oZct&qcQCG47xSr#K6XUN!CKe9*<`l(OE->(@9G_W&`T& zo{4yVC|NwdNF~bO(L++xB_?VseUfIj5u02%8U?lcC702@Y{ok-q_O_`AKQK6q-j$+ zcP81lEEk0CPAo3$G(ssm6vr1`k3T#I2sr(^o9!xk5P&BSynzXk0Bm~35<^ty>de|9 z9^o(uud$i_D!r~)+4OxLv8mIRl_Ypz`5R{h3u5iX@ykB<6Kd7_7J6 zU@%;AAQTJ3N4>^C^!Nd6!v5b3(X`tJ=SvHJ&{tZSQ_OB+@Uy2M;CF0Ftak3N@9@7| z08b5pG6AfT@+vuBy44a#9;qbm2-jjxtBv^K=RBTA_=fE-T00P>j5a%WtqbNe-5Z`< zSW5I7af{X)B2&7&N$e=^4wt5-d1+-|#;4hW83_dwsCV{VY%_r^QY9UN?d zZ%_hbEk9rZpYu4tpXFM@rO+N9Es`yA)xDg5Hl>`-DZ()Gesx6@K1*YdLfL2O0V#gq z{2MGNGlY$)iiiJFX^=Ffc<@?(x{(rDvugU-*Ivx|tSv@oy+Sf7PHQ{riFQXd)MDLYc;bgIAeTz4@lq zN$;p#sPk_WBEJ0cfEzftcNSZ8TX_n(&x$tzR|b$=05;?kGi3#&4a6DypV_~qDkWq~rc0F>J|GBbf-v)LAvpb&R!8&HAGTx@>0EK> zlrj>^g)%u=-XAGoe^YW2R1n54>{bK&CU|WdEtt}25tim4W*_4bzV~&wiET)tfB>59 zLVqn+VCEBb_Xxi@Baj6*fq#<}XUR2O%*G%bj8KVz!{0{T7rp6Z$=!iIN7Gdzx0^e7 ziiz~ZK@|Lnl4t~$DyQFMdd)4OAF4pjvU zs(PGS-{0P^;MF=9oY@8Qb(brE9) z$lF5Y&K@wzAi8%0E7Jb)#RtWW=;}u&slGt8v^(5~0swhp5mL)xdr3i9Jm13anUgAB z7D%;^k8mcRgv*ggvL6YilNRgJRxK~|!63{>f6z7SeDHayJdUPtgIpva%7OtnSJ1lC8+r3#$^ERJm zu>vXNpDm!-q5mmtG)xlPMi}REE;LB9-Q^m@3Difj(g}yxzqmV|`^zQ-VF8|ei@{Gq zpWMt*o>-z(@Lh`+5)TppY5c3^Y^9-0UEqA;v1!vQ&YWr4F1*w+!#L47SE=LZB_jw~ zfI2`~tnji@z9>{R?Gyp<%QX4Bxm&ia3axTx;N80_dSR7%lP2%awnZ|m*~3@_8f9N? z2eV63Zm*Yo^(%-`n5|717lV+y^oBlUhc$6yJ=9&6L>bm&j$n8My_1W z=RZFbsd5><0{u$z-JHvpp#W7Vw4fVYG+Ho==aGSkV1iwu8%zb%0dbViAv<306I3M3 z$ZZ7rj=aO{Vtqk~<3Y>aJ;bT-_)EU#xFpO<`NIchYZQSgS&FziE4de!Y{F>-bwq@)-+URf(APzny0RgQH z*rZX5-|>G}bLs)JyLFC}DX!)eizG0Ur1s>_Ii&UTI3|pAAb&s&6r)%DvdM`&JmFT? z`f0b2?#3XKJyF|ZWBYvBHE~Mv5$FhSeqj5Mm|z%|!GNk>XU8sCX|)W2>5XfUEBFWL zR99KbhX)yThTfOzks#kxF>gfLh%Ig5mPN5$eZRKeY{NjYe(E_On#CKL zyWWvAuIQUWB|7vU95tqHE7(L4A7S2M7u$4x??i*EF7Wy!lh$ZmfV)dM@}rx@;$NWb z8TPH6n-Sc>-;0L#^`1KGll2B*05xiHn>x~54ldA+i-J!_EiffJ2}z_JTf0*uIrB= z?qVXyXZ(D%X{?YqeL$nm7`}>`?9ij0fSBGDBEI@%`_gp1%^63UqB4NL`?VhE`C||d z_;55MJZNa$`Lyw~4(DqwVVNx;>`-Qcgjp4WO2H&!c9ChqfO3OXH;Xa~PrRX2rDz}) z;ZJ6>*$g?>ER9@1fBFldyYt)&Lz?M|y0Qa{nT6Ufx4DZ3uq9`AVt2wvBIuL7S@Jb; z2iKny3F#Eij{y8s3Nz_;W|MX$mq%rr@R?-(x`mP5dx^^8H7?WtZ8qP?Wq(trT;~?C z=iw36fVwE)BR|&AYSza+pVv2a0qt9^yn}oYRW`A-BvJ(WA7C`0=-FfBdVn{e5sOcO*j+CH9nD#1124nwLv~^r<`w8ku@PLwaGo# zSDOAHVBnr15%8s4qlFejxk+J&NGHHtJr(gE)ZM^-@b|yFpWFt)Hi*~Vy9B_{?(Z5t zvMc}IeGqL!xo`vM;ti56rC<^iX^5kY@aeFKp5!{(5Y?bc7}t#8&lGtwhmE4a@Dg9t zuYzw#z}!O0;4?SQnytDv_>yn+fj3tEuWwSWc6(nQ?6!DFzhfe%fT@$e`I3CY26`Yi z*0vgjEN7UUTzKWGWYWSxH-@p zf=vL|-){4z+1GUOR+Krc!kCl$2eLRU>(Sf|jHWp3X@&A43F>dr?7eKoJ_=^wDaDf~ zU9(DVzL0^nW|-Xh(dBQGKUJGv+Zzn8zaj1CF-9NZJEP>^mvs<3i5Ka%fweh6^Q+kf zx_rGW_+Qi|DpfEGyCldq(8?6@f;y{?=o`c?&v5A?Tf^vbLomqvv#pk^9m1m=WcM)oBWOTWIFrV2E%cf!uB%mh7 z--v+ii%(?VP*kXw4=3U}T&e1BI>ASMFbMCfKK#Jk1-ZL;v8Fl?L;$ zdt{_FZlHX3t1$|&Hz7Qp&L0*f(Y|}%e}Dz~P)EcD9wMnAY?+%Gm^iRMmL$y#uNg}& z3HE-r?0v1Xf(Vqb{+*JAN`elWL;q@KW%7S$`s%1Czwhf|7+~lQ$)Th}>5`$Oq&p-; zq`MJ>0i{7eLg@}^q;qHiX{02EE~Sx%_wn=ny=&HD@dt}}?!C`F_w2LxK9>hSCMBDw zli3i``H@ykJ4DlQWY#PyS>qJ)JOz}AI)UurgK6rWWSr7q$tob910b>0jq=+!^7{iO z3f(S`3-Y23Zd4F>K#l10a%768iJdhbE+z;Owp~BUu;+NytMrEGGI*-h)`8#m0NP9Y zY?KV7)oSlWutC)=lRD6c4EgJoQB`6W=#5@ws*ct8n`!zk42?yIM%mkS=n<6`h-D&P z&kBG0_buZ)F!mm|L92aEtYt|s@cgkRL{e}=Y!{fSKPeZleqN`{ zGB=B(2n+gq`$*wUNA~9NCBcDtQeLeyR5Q{xfq8hjM)Ux^^^2U9)>9KOz=do*(H^LU z$f85QIWi(Vrw*^a&A80LPS*R-uf+oo9QS6%UPqS3)RDF|OL(3|ID#hrx^29RDj0O4 z58wDR2bn3;G6|`!7PTb(%&aObMtO!;5Z}EPj^X(mMGSFZ@oc0lP7lGw-+sX$l7QoS z#!B7P1sl!pI{%r$bI+(|c=#i9i-2fn=iHpX9`jJoX4%M>GJjqii^J?FQ1kGWJSX~h zSY~u9O?gI2cjDu8R&@9GY>2YL2(JJRfRLBuPnfp z!N9g5bf{3I3-YN3BP{>Sv`Vi0N6z?*IE7;Rd@3xX2r$!Rk8@m6bP#bt-DaVSwNH^m zK69L@5n|jU?)3~tUJLC5Nm1eF%Z`~XH?=Q5Nu4jW(7uo=-ak(1ul&J=X=7me`p4#n z=ojb-SOg3O^|&b$?CN%i0Q;UB!dI13&h|gd!uHwtCcofrvv7gpA_oMCbo`?^yV<;b z&>1vce5zXqe(&F<+hcVWuZcCwDjf(C%o0!#?OZ27k#WBqtsqR(6K8CIjQY_7JHebznpV z-VjSP2-D=m(?7j}>eguc^rDTf2rpD^!mf5PIr7cEC`-nOnIOYRx@4$_Pnx!T*V6O{ z%C>Bh2PF~bl_WTyA?shd6Vju`I2~(PDALKB>wY0$gjMAa#;+qM9!j0=Eyafeh z$j^BmecZPxNY$VR*1^{wT`Sd^;^Tw857sc=aKxT$&k3U}s=e=bnJs>P^D@n}7y2;! zde_}~cHKsq_-A71&|`P&kY}MmLKi%=FV(jQE?hkxf6q??Q!|lCG}vHZpT?=uM7R$Q+{G8Eo`*|N}ZbD0K^iDeoQSff5{ z&~V1_}9t=lo)8P%MDwl>S=nO4v@ zj9R%d-dEUd*JDD1%-2~C)!iRrk{+3)ROJqSd!wn&D~7GgLfxcG`Ov}=AnWs%nhbjO z?#{hY-LLb#tPduz*UZgHGtm(qu{PN9Ov5WpIStmsz1Ttt3#?uzNuHb6dPCohrg=>I z0Lhd~D!ukHzSH-)1i`aLEkxW^rt0x@sc}!dkmB2EuaB%pa~-U80ngc@XoVi*8~VpG zc_`EV3{VAcVMODWwT5;=h$3#YNDYJPOg++l97*pMkQ~YG?nlq%ysuOiA{*#-`P9kv z@;Hk#E!0u`1O#0xnw(|YU)-k~ZpMT^?vHVB;3RSJ5+^cW<3BBo_^S6|^gu%PhLEnn za{c*42mY@*PQ&7*u?svnjBKiBbZm$&uQzoTI;}BV5o)_=N#x@eBBleYhP;Nb+WjRE zm>A@q63SDT!e>Cg*YDTwZX>dZz35@VkZe63hS}&q+JNL)wS6v6z-QVZf93{DO_r6f zs#w>2Tt>A`Er*k~lrezkG!fIBC_;wq+(p>-cg*Xm!)NtadPcEefETR{C*~L z_?fpQ>{|MMWhZjo?r10YjG|1;mQ|2K^uM(KLWip5uGys6^b0=RLaLH6##04AY2qna zevQ@d)>ry)$cpgnrUtLE=LK=wjSP4kS1Oe21=FfK!=Gz*=xn->)U8Q6Wps0G zQ-5aMZMLfbA{@rgUGXm({2E;*Y-CueR>R%vZKH4cSm(VyqqYT3N*rP)^c`?nz~&L) zLW|faQ4dK}vBDy>iI%ge;hf%1A~kkc$&YUO6fZGuTVbXlUAH@bYWAl9HQi;=v{ zRB(!SAbErah%VGs`tMt{Jcm+};NeK)hA=eRkaF(XMqLhVZ4Y(EP@y^}flhEvEmCl;bJXx%^!Ms{F$qVizDe?e-9jhctR_Rpvx4O;;xJwMIfbP zu)sCZGL?LiNI(jeC~PHWw^{08^W9}iy~S%=_@~3q_kUfRX@@h%_hR>LNhr6?hG`3( z?{3DU4fsj}A}8C1{n*Z<*j(TIWiAIDcRWe970}){;@f~7jY`|>E)<4>Z;xCmSV!Ws zzt+*H9)D^nE@@2IpiCJcvF&=5T5X?|3<3fCaaKE4rP}x!rHn;@|bL(oB-bmJ@YfIA(yr0eYPvvnQNu z)BCM9Fn~@6!k&!)e}DZ~R8W+8p9~HInZ7I%XVenm42986W_&npX8Mk@kU_B&$@j$& z>s*h|C|2NLi=O6V;^FJQ=wd`PU*+V$bBsx)$vb94k^QEZ)EMR8Y=)Sw1~^4Z6#h}; zZgS6~Hpl3prauD0j7&)gQjmXXr6RD}>|W}4!WP(hn?v2*Z)RL@lZVhocRpZ(-^NNX z!wA*TeGT}oBONG_WBSo_e2lEahQX7Y74Y4weB-&q-~`I@YA?1I-vCv~&0$M|m&#&S zTStXuoCC~`mn3vI)iq%Tjw_>(alRszVhQ`K32KEXeq@-K;~?Gb{i2g0{7NE_ zT!Nr}6&e5e$t%rv`+AmyKWbaVOz%5pS>e}Fy$uNQ~`3X zDL^?&YHLrfnp$Z7ZmUisLxd=xNLz?gIgPS{5y$WEr*M9Eodkc(7!3my2{y1Q;iH9eDC=x!=)wZSV>AHkjd%roF68f~75rQy8 z^)|lg`3{R4cUfwBq=;pnA7C9l)ou5U!@Hc1HN^KWMNQCi(N?_0iSO<+yBm~sJ8McX zQzeO0qHxGewj#1CVt!x7V*PK$hD<#KF}InzMMh>M<`h$bfqomI&hu+11To`sX@MC= z3Xc3LcRJ(#B4%e|>9n9_ybKe}_WLRux4lHCCl3-+Yr!bnsgf_QO$UkA%6m~dx7YD< z?~VyW!EKZdN`y7)+>y~-C}?`s^0UDy)7LqOSY{(vf;=`eG`+;PV=1B93f-P7U%q9%nwiMXSGGH zaA_^Xe~+N)-AiC_`vS+Y^hxSsJ`4bqQ#T6}H3nofiJS zA3CnP{okCGAtFgjxDg$0(sCXYfHn#zYnXJdNsfzyFQN=CCq*hO2V}38;KhLUDE1!y#n$Mb%{MPHl4@Le&$e@Ps9qjts=6^iN zP{rU%$#Y%p;75OENKeYDq?Ddgp6AkWZCu%WIF7bO@G(c|G{u)29odjPL_(D|)+teG zO_u3Cu-I0k@o#B`*kn*@+x`ZMtw6UQ>RtobI8WmFojRZ@%#;*f?WZ%=@!&N|9+7VE zRaKwKN_V(Yr#WqPy@<~zl`)aRI{!qCiqMBJ5Z%H_p^p79R~?utDp8NicBb2}E=lz} zn&f>~mxY~98Yeb_&9p*Us#F!Pl5fGQfgS8?d_kHfE2A0Vjul?id)}F%<*D-U#n0xW zN^wT33jl-I_~d8-9XO+Nr~yGYJ1zy>VwBrxBn1vVwc*|LJ?wl-l6$$m@#R(KuUe1R zV3GKr7cO&;kwma+r;phme$&VQ-IYo%(a(x!@8B?@^hjc-fp#l*Nhw<5+ ztgba!Jb+ZizmUlYZ-HHW^N;(q!|lIsRtDCN8xZoSw;hPJ7{~#?eS96*X>b~%mxV4T zD%z{#w8!x6ec5c0o5v~9jMKc5S5xnLLS*QRK7XV6sdl8Sg57fOE_en6E))E! z7W4vDr$MWGvNLE!E#VcSdp$okxTLkf8T27>I@gFRlHfVf_hSJzRuz)%Bp!Y3O6-f{ z(ZE)_AHkMc>yU1eCKZe@-#xME^_J%o98z0rxPefpuK4Cr1t4Lw)OxfH$gg8P_}ZLU zo*Pv+94yF4VV)PF(=?>}y)}4fR{w&tT|~z<<1t$6$z;62!ll#7`Loj1iM!DEDJ<=tk!gHwkW``D+ zhV+Bi@2U_K+*`nZ?qY4Vp7kE;DO}8xk0Y^{LqtE4Vf3rrJTrtx2phSkl0ot6O%79V zA1N0vK9%9yFYuSl`2Sh}-G4LjgOO;i*q+JX_d>k>pfRE2t}Dr1Mrce41*DR8vYjMk z5@xbdI+l;mvujgcDSVWT?1=7>W)KY%`g z#^>dWguGtY1I|6$mn=sBE=qgSMvVr|`=Pr>;)DSiHTy&9_>jO9M#)dbr;axiFZt{z zU%Jk_uM`a|M|)RRdpfMd?f%E_IfdxezPKCUn}GSp9Y6jtksY@2%=@loH5ptu%kExh zh)JDE9hFa_DZW`!uo#p9ETQ#pB51GNvmz(7mh)NV8c535iBytesHx_{m1>zlMgsCD zE|%?G_dOWY`M@FNMcb)E5j$T-$WLUdIO{C!+SE#+ccQ(rWzD{9fb&CwTaZCq^P8!K z%7;1Dj51rR`WoE6o9L0ndmaInSd6q?_CaDUG zSRrK_Q~q+ITNu;)72t*Ueps-&20UnsH~3(`Z1;u7)kA_W=}>&tLPtT~*S9Y^_~Kbh zK}fJsBF0-Mui!%!r29mOH3LOgh643esyWAgb?d=({*A~ka^?}l0fT}E1GL0yH+EL$ z$$7R}={e-}MFJ08ui7QlW_4`n#+GY|rkq?O>Jbwq!2ctc8;5t9l$!uZXP;=;l4h=d zY%oMx>sA|MaW0jtuo*xXs7nytW4+{yjS6=5TCCa8`MSk7ArNP?XELe-UOB^T-d~E* zRi#0ed9UZm9}L3N@rLi}Rk1KGS67Tx(-@`o>_k%5*hX@C^mHkoCj?J&T&!Rh>Rb=a z*%3ty_i*~UkEtw-S`hKR8pc!wm%lfBvBs*ziqsUkApxOU0lgA8QT1O-8>@MXE3RG? zU*Iy1x0u|=>~^x$qq(bJSGuaIIfK{5LYtWS8hJd}7OM+2uemc9+b7$ar{Y3++0+w4 zJJc*DZLB%!9`Iy*6jEKPdCiXmOb+V>suNVRtH9*t3o;041_K4)nHDX8AK#ypn8`xG zJQ4w}7t~i3*=ngD5Aj}WRZC*d$Z|8)P{H0kVtdwS6-*`Oju%D6+7fU$jE~!$o;tQO z5t@E>d5`}9T)~<qfCfMgh5(M8yc z;mvYj{CupgLX4Lky$r7*)jxB-joW?NlzzNl%`qCJ`dZqoL7mo<^C6vpr1>WIbLeaI3j$ixKakJ>zhOf5Qc zv-_1_fTn(*ytoN%)$#C>Sx@vzi(NFhqq7J1gH*6hAU$^=_8cqOLor@b5@mFJOE}mB z-Hlw8$oAT&t?HF_^pIbvSZk=BX2f>#*bZ}WAA`ks`BeEBH9kvIja;e_99jiuSw1ro zc9OF#%QkG&>Rmav|2Qvu@ma*OAA3KdT;NKcT~*uF7%V} z+;!_@Y5cx!8_O<-+kzyS)Eh?}hJ)zpb5xUCLkr-ivHDPdw3_MgKAZ58je?xLNA+G5 zhvYo5EB!$s2aBQex}eqOAzEES`uW4g%`b+IPlsy(@3K$i7Z1<)K__{xWPB9p+(d32 zYAiGDbNAAj2mBGF-t^5ZGE9K#hQL#|`PPo(O&xpPn+p#A+uzBM4`)th#u(u{9Jl<_ zl)`?tponp+9f7o+dTE0>%D!BLSb9LT`UdsHTOI5po=&Byf1) zW`&hmJFJ!2ax6*0b0fj~GHA<`oIbez1#z6#-qCg_P3=a*wCBd(=!m*Kd()OPQTys` zBl`HWaF<>xtybLzi!t=i^inP~YKBdp7N)u3bPkmIGf0cVtvR$XG(;T!?0G&)SWWjU zrIg?O!s;l=JDT*$3WklN<1ESXNordzYAU|3HK&ae8A3m-U*#Aw8F22+REusZrO$op z(Vx{P(F8t6_SmQ;@z?#&(^>+mdQM$2p<)ZWBX2)G;&&>1f|o|?l+gScUfBJ}PUX;; zOvqhcQRCCP#k^_V6;$Z=O?c0CUj%jJUdo_)r%x5}Z!y!CiQWvYFFI>e9d1@tb)Wj! zqkRO{t!NB9@C@@;syIpq`@I+ul(>8;Fm0$I+m;dEb?ZpbP8uE8UjM+ea{l|E+90>;=7n!MNAstGmKwybri30Z zQfBLX39z$W&UvnmUWIzz5Za|3doZ=T5(<61T7XYxridnrI+-5Kap#u6EVHNQ#a4W8(heN)Wnco7d zEFe1*C89#>IbHD$8Wjk{HyuN2!>7f!h<=|cb+J&x^dE_9&JCBDpMFr@XqY`A8Fp55l})(?N7etj;0UajIZN`PM5H@$p&|&9cebw;UXp!t(+Jmd-TeDW z(DCnMWxo9Kkp6Z9``0R96>xtlve?$?j4hN<^{m#3 zzJg6^eqS}m1Iev;%~}-$A6FK!n#5hHu82F$*=)q>qd7xh!SBvw{}p;66z%7W`0lal~#gCqlNvn`Rxf<)*Ei1_D0ggi9HBAiym>IZ#Q}M(cyQj%3^*IXx1>r3M{-oHZdc`)nUZ+ z#}%e6I#}0l5wtNxORdEq)kl5{TB+e;Go_qCaw-ULI9Ncli}=yOAG039Yp1E#sz1ZU z|IFsaT=^EH)L@2IC#_O7MFm!Hl;u<{X$di~qOqd+D1mNIfJN4>Ixg$Gws~}f@G2e| z|Bxs_gpYjT!UaRFERzOJ9L<}EieI!nO7bc-f8l=g@_yT#Ak0)X=&9(GvC<;4ajr$g zZqPYxG>77}4icpI=)GO3b$N3Hs2iZf8+9_72%;J8F0$LyD=C|v3&V#Y$`^`vb5f8KfuM zyuw9m{iN=^);ld2=nc_t1bJ9zkbKV`BYXGIQ?*8p&JYq%jJ@ z5!Nn$tGZ5wK$tZ>wUAKF4j`Of>vl+4lj~OD|C?`C1PB{>-RM4mjTVer!bm<)P@M%k zn@mMD+u7bk@kWy%9T!9B1QAn6&@I}W5NCGuf`Hnf{wDDVb(8O@R(O75CPq-or^#}} zlYGS@v9=WPA#{0$)XEjoW@BUCP*TH+L?c$~7q#!*LM3$XmQ=vc2*H+|e6yC|^g%x3 zVEBGOFj|6%^yAC4nfsY2ZI-z0qn=l_c+LV?3B7Ar47X5o^iUv%9x>+<=>D5zEo?*M z2a8?KL}mGj0D z0E)OzfgPky*ULNsQ|XR~VP8r@<#+ryvx~)9ldYN4m9gn;XjB@yo;L08Sc~bQhgNfU zzc|DlNzo&6Ml*!}1B|#jx*q?|T1}EmdGO4Pv`MAG+gIpK{x=8ha-~|o5uC$<+#p$~ z=I^QUBst~O3AX;AhY5jneK8XhA?TZ9N8NOridlG7?tqoY`T=u`+u;P;%MsIN4X`P- z!FN_bgNz1!9C1-dF9+2L1fH&Z(GQ1C+~d!u^sgVP2W%$4dJXrpdV(Nw3*}v~Yc!>h z<^=;}PQ6|=X0aq3e~m1XwlOD6w_{K8f3L!L5?rY~$UkOGe_SzapDfvW$$grR*ZgYakNxT4e6whM z89oO(5&Wr5Y<4r3IXHAiU#4liwMMxElMSM$FJq8R@70kQoETip3Lq=mp+K?oDcX-LtxI&&p z9Fjgqf~U{^IZG_`LqHx*WGzn19kDj$ziEeBW24%o5_vRG0r?9_%!|@eVbC(>6MTE( zPNka3TKi}A+8m7|IfOQqcDT2>515|8J$Twb2Hv0GO9h>W zx8Cso$_68HLE!pgRrJsZ&TlUy@kO3o(k(AqkoOLg{Cv)@0Yu=f*3$k;79wv}i%ic) zuu?iKv%1PG>E4WIiUoFbvADyg=dZr>o$tQztf+99M-TExs48x4?>)JjkDvUQA9i!> zKR?S9UR8D%c76(wbP7ZzQjQHI8aFEBB%L}2wmao&b#@P8r84DBA(nUK`CC;iC@GTa zy8Cv&n=JPtjTb!&2JQ|P@4c>s6q)1b5;(8TzU`B#y=(|4xMVAznX29SPIV^!+zou5 z_!{*NVAVlTJRH1h*)=;IStn_AtLmkE{jS+6bDh7x=k5Aq9wo7=QY;BU?*IjB*6r=> z&M+T(-sDkWN5Iw2(P}W>-AceIK95=3=acO*h7D0(^Nts>G$KWr5S`;CC% ztM-lFE`?{1t!{W&QgHn_q2EQC-e?c)_L}pz`_(i6h7_P>kUawNu#_79#-7rDxx#YX zndfiqzO$w;yrHHWijx2V9ux+xgM^ld*k$@I{8F9tTi}H9rvR1^z}l2x0!Ov_9I~sW z2@1VQ)Ff(lx0 z^zE_N-n23TNz|_WQ+fF@V!Yv=ac3P$$$x1*xd69bjyIX9y){ z{!s;7ZmFGs>FuNc*$!jS&3;v9iQQDut5S#AO1fM^kcfjS47t7cvkc>XUf|^sB9T?~ z@jy?v_x-IO;D$>+BbD;^OnVk6u2-fXYk^&^T^JRN1QdmHv{)q7faWwlik#~?V5MO) zd{q46i!3>(ZoC7Xq;I^q&%ukEzkfc}5YUMyy&8y90~~pYS6LE1>Z3GIUcC=^0F1|b zORXZn!l`$dw|escD&aY!KWl3s$YS>pL$U@C#k>eVAT^@w7dJ39H+q7 z!Fc)psDpbsKz=LFN3iB}^5+8{FfHaqJAhw46aoJud}B;bqG5;;3Px}lR2KN3?@a*y zz8zrP6#FKdL&>E<5BIvYua%=72|UJUc$VS3(xKMuzDc4=526E^Rv6cBprh)%_Vv?Y zL@7wXe5ScjXSWN8X~EDc(`MOUjV{F^F3XyLq^`uI(HT4hf=GDo!0rGcwmBRHI0Z{Q zcPE7h5YHy0x5E8sMO}lh&vu!&rGxG>-d(O@r3pJxlk=Jy!e34nDDMJBkwTZwJN=G< zTTFavd7IIUT&G_RgY{Kr?VLG2>;19QMQSu|)~!7s4zgxHZ@<->4vk+z*U%!=^s~Y_ z-3S|7ev#XC_l@8hTKOYAf3ogima;4RF>W8W=UJ)ifhYzT9|v6j%eD+BvhxT6lB6EDd}VKfXY(H>g<{l z5r4VGQ}U=)d)9zK`Kwug0vO=0X(0>fp_j`hq#EHVdi*6H9;I{wMwxj$Pt?{(rbHvC zhDOBs^HNdTEn1cZ9mMwiIi3uS3`Q8zzR7X^=}6=v66;}CeTJV<*a&_Rsgh-l&g5XSel*oYArp1AVDGptSi=S)5SbU|U-@5*EK z?#Zj(_)cIzr&SjycupR@Z)7{j!ldyBrP!gwo@9dNp*sf!H#Aj%r==VQ8X6Xuc zhcB>8rt{6Wv%SYMazzmb39Vp+85meg7p~(vkq{Y&GK;Vc?1E~sMB9BmCwY_4JYAn3 zD+VKh&8Q7*#tklfNS36ZHqrvH$Mt2>aOrcqk^AgUe#ldZehfR9EL43p^7ec$`REo| z|E&+Zu7md)l3fM7dTV)0ZGPXH(k#F999GYD$zu8No3>S7&QoK-bF6i10l@+*(XDJ# zrt~_Ql+WRE;XiG;VTOQBTvOGA#WDJk>Sun&&5`s}ATYo@WVm#SVqA%nS;vo4EA!~7 zQvZ!x?!JAYuvTTazNtoyhM_&J;;9St$BuR|jjHr~WK>2GC# zntAl^tYDhWX=Kf6sKa?4MJ4lec7JoPzZ>s>w#g@A@`EZq3QJ!EA`RmQTVTTpWvFdk z3&9o$39Lr;VB_PpzCNIP2G3%rC?Se?AlSi%i@*1zrD-dHS@C^#_&e=F6@~d)YtnHn zSIn}Pz{Ud_$e}^Hhp@QvD%_Gd^@ez%kR7=PQ3k8a%~bQ(0TH^-gVKea68*RhtAqDu ztN3zAJqAR>@M#|F_e%Pmu&Y~CSB)aE*!Q}&U(4^w*cv@JqSY5j2gpg$q(a?#t3-aD zduhLv^=w*$gef_8Wfj14QbXXX{G#6X!lg5-6?#hL6(NA;kD|;X(zNttEzZKwELL+Y ztytnhqYK|mWmhOxG&|ba)>t+ma=|8jtmF!z4p9J6AIl{1`}%_njHecxx;C*P*+dqE z2d^Pf!9)++*+D8I5h`IH2!gO&G>1t=?Iu~$*FlYAS*%3sh8+RTF*NvhU4favPKU2p zNka8GG;=_J6g)_`K#91<)?N)G403aT=NX(w4~gi3PNVM&av#*)8x?)_JKp1IPKz-@ zNN;;;(EUmKcVfB|l`Oq`tEYtGtTY!6chFE~&-|lamebA=ToxV%Cmeor_?9-*lP{th zLvcJg%mTk4Gm?xWamhJ^T2XTrbNqelf`81y1?r*erQmVZnYr1%NW zkx!}CyFP7i@E$Of#|Ri4Y!_Tgcw%2y>n-4;>a}z6rc;Jz3RSNI4Ry-kr+OLii^X?9 zS0V@m69coo6lZYhM#Ju8a!Js7m%e3~jTpmd8}D*Xmw+%y z;^6>LZ2C$zs1*83Z#?by(=!?tOahP(?4TxamQH7SNS?y&5foYb;Ny+6eq{M^hGI# z3sUvWd~@X5VRqPif96nDtIP6MrI;b;Evm};XTaCGbbLEb^_;1XpXJ!tiFSHmns32v z_5adM@q(T`7+=D_HCbeDFTrXk58A{n%6~U9yz@rpTSr(K_LmBt$oQx-Nm)KEG@%#h zDsTjn9|Y#pxfOmlW<7hCSh!D$43f$K4f%oCGswp+q zQB0*0GjQ(fe!Ap@$aKLg`maV$%PM&t%-c?*NO!VYzrro3z=#FrjaWUUnAha;g+v89 zU5XA?1962j6(;*QmeHoqZ;r{m>LqG1OeqGzVOz278c?IB(W^{>Z zUfQ*@Czi)Xb3rFKtDm?6Nv=wYJ_0WkUMOswo~rlaxrXE)yE53Kp;Bc`qJvyGL1B~I zx=NniG>LjDFC7ro4MboO8G$Q75A6lTT58I0o~g2p!}ublB{BXvC)9KtUyaxUNOT=RjyPA;>CzMylUxx-|l%tS>l7BYrj7 zPrUe7EM4*A|M{ZL3^@KciEQ6RI3Z-14H%E#>k$oRC6qj>G~W+PYgOuqQK9{tD8|ev z5GPZZc-V0h2joW2z4m94#rthn7v?$bvz zCD=CqcpofsC}(?Y{osJ>CI_5e`+R!=*CKpYf6qAFHFh2qG25*Nx6agEAa}^*IZBo2 z`Ivb5jAf#y;}}wAMD_B&r@I^!z~SHF`7hKRU{;iDAxJzM0I3;Mc`#s=t;YqU?d3g> zE-K-(PJ0wn#e7-G5vH4q5011-KHfOBzCNfb>fLc}DmiGmu^s z19`^;kX2Qrt1j&D@tf0U1N)=lKG)1SftJJ8V*fLSM!Z6~n_}@uIEgKx_shyw8#PY@87ocl#{}i>v1G$IkP#yTB=I&VG+>g(2BkI*`Ucw_O$zrl>5f_t<$k= zX+HPfTdnkWfCawR@8Yp|92k&BV3w6oQ_1^(+4rFzI)45_l8#!x3%~-{N8Q693X$ns z05dS&9rX~dMFEcfkS6zIS(&?~xf(0gtA^KuiG$H#IG;wA5-$k%qQ6?}2($VCC9`s7R`( z9?SruG$^uLS@yuBdLHK|jF7=H_+(W2p?QK0Ps*wKj;!bI|@4c?TqdaW?c?_IKk4syRdTJ1)E|DhJZ z7`k6|ffl2&N3a&run>A z0>OSwT4vNSUb;0HJb;F9!KV=>t9lMtmsupxE(ZbZcDZrwJKMF7@SzeeG&X7TebVKS zXEf@F(bMG~WwxE*y>B{Ydqn;sbUSvXXo_} zvpcEg?-HI^puYr+#fPU{vkjaO9}%Eq#8u8};Xj1e9ewyw`kn}dRUIxFWa}%2QV6ERiR<(8 zb<15XjD~-dk0cqy&DSYbf1?UBi{~+}i(j$aM8CWRQlCx9HriwDUPGizZ~X*6fjleC zF>o^~77t!FSxO1k_-sOuBV(HZ(9TNZ>gk=lRg11iyrKxk&GFkDBCpv3z_}(8hU9{?*GeLz zF8}^9X*L^9;j#Wbmx0c2WfkY(4Rq&-LI3_c*pV0%>dR(D5BdOw)}^${5$4elYX5uZ zQ|b9Oep5>XwKA5)w*fS#@PUMC&l@ME&Z*h=3?*y^4bz7p%fq@WoCcIvQ3TMq!JnVpw` zBvvVzMQ~huocn4ltsAM6DBlW;9QCg^)i z3B&cIX%k2wM;ow%X|@u;OSTd*fQB^xIx9exU$htT`V@#|u?v**eFHQM+weSGmKx-VuKBg*^Y%m`|KCy4A{o^1 zHQu5zmI=5{$+xz7igRbsuhikD0TPh;4;u}CdG-X~!93Ev2-i;tI{Zvdduzm?E4zrp zI2gU$Z0?1zu%;1;-I(=ibJ* zz@8P@5k1;K=6wd5T-2y{M?s@eKw$<#1<2-9O$h@WhxgG?cELmes*prOk>GA_qgtxH zKJqs*u)Ln}g`eEEB{XY)Lec)67kUyJUy5J7=VUo(!12Ec)L9oPf&?V^qX_o10nGO^ z+Bzj5M0qWU?)OOj7XI4%!_G(rp0cg{$I0#zv_iDMKS%}y_hTVR^h z+l-odqx(u{NeA(M3$7=q)Hcb0gC38YqV6G5{rdd0+>Ri5>g;h6O*9BNi7Bly;Ob;8 zw%--#a4)%^yWwn7Fr`ayvRKSizSqZ7sm+FZAF^uC=;kcjgl(X#Nu!BT6V zf)l-%8yW`3?}+Qgp5RoP6v~U4mE_VB3sd`)W0z;pd+B(=!(QS zgel69Zbo}bXDh*xYfO~wJQkB5aSXx@778}~jxzlQpTLI2S~OCy(~Y-6Qg~n{z4lw-CfQ)t|ZcxI`FEOlLeqa zhBY$M(ur9?S<46=gOVE;uFGw`!I5noz%$&NsmMDSY`0%1t$Y1FO`P#=;cL0vPqE(! z=?yqOZs8IIuc@tiWXLwgL|FvR^LJYN7KCrR7*Z(Yhb0jxdFCUvVNxi+H5V1oxycuS zERyo!htt5h${lP$?jU1OC~DTo1YEyDj2{EXm&bL$M-tJ>?H3uz5|_Wa@+p`?{G!%Z z#(%xgN?#s>BI*u-qMED*2(X{Z$iZQz!gJtCJyYy~1t{lD;W)ZhC z5~tVVgvs0Q(Xyg#v-~5#(`p?F@w40Kt@jy_8wns6sb?yVoXhEexxB4V=65!?X zrT)>Z!^I!5fu6Poc-VIQ8IKj-%D8nYKbpk|#;y3u4r(`s@Pkb(=oGFq#-819H|6?o z90HXK`QMfodBBeMeR^C6eC?8r*2rQzNi|UEtylS@ZN#dex;QtgcT$sF@F+vdwZ+6> zjKPtmrlO?-P%-2Q3!Uf;F4~1it+Xd8TOU5B>4*e2YnnOAlc!&(E!X_T82$U}tm$EIP!ZG&xZwiAJ{1@-a|Zul(h( zKk`LD(Y=9DezAqola}HAyB^QzF(ALOoi5P=ZbZ3%tI?R#f4Ez-8yIM!rzGx5r!mb& zFv7_K&@hJVzh*h*@rOPfh@PcX?P(~(>R56BK-1RVmmW9%y*Z=x&sJa*u@Fh}XnI(S z2q*Dt61x$5QOgNuV}M9ldV8rmG{$j6X{>>0i4##qI>Cq%o_tq+{RNNG&j(Zo|1AGq z5Sk8i274k(qTCItnYv#=qiLURF*6XkAHcGSsE4c=uk!VytdCG#WFpR{U<9d`VL}11 zUub_U4ch?o3z|D4VfoXXL%c`e+Wye*kx&*M9H_p$39C8ijn*XQ9rFU#>ItkXPnbI| zi3t0{@3qh2n}>g|zj23$erICYmzOI@Y(IWGg}(K}Fjo6R?lxg)6%S%a0{Np;dl9 zv_>E$04MlreSgxyOu^3~$~|tPC=UjCyXr9i zpb3zUnG7mBe>q zdvyE$j$N6}HfGjk)Y6wR4;q@jJxdJss(!B29Mmw>#<-KOdiUxF>yI}+O%2FwkyP)g z{fbLR`Z%M z{y#oH0mHPO4d@S2CSk~(D8Ki&ilL%Gvh))S7fKO9t8L1p4FwWPX}xf11Z`pGW?Fez zNU@URx4-SMH*rl27`ry*B#zGj<%r$RkJvifDXq0|bt4S9t4Ert0u2yUt%6+xPnTOSaL7f4*CT2We0m8TJ~i~+ zVs8h_g5*}L=}W>R+Cln>I>+^f+R&bn=}elP?JmK?Xf`_*2C6)e*fwOxKJKqx8L1^b^0 zg}OI=x4ZtWHl~IfM*IFF?fjnx|6)bc%VEkF1Gt`#!Z|%{^JP$&Uqyg1>cBIY^~4>M zy>(C;D>n|k%bK|U|3}o;%4h;aZ4)`fID{47knwm;187y5gRL)B5l3%Yj+*US!sVjb zqYSYL$0RTZ@Fwg2Mdiy@C^mx-QH0e5VO}85J_Ia}V2;@MID>y@L|L?aqi|}@Yn&@#|;_cI`^qm0=o2D^l zTQfj9LD{=kEG&C9KwM29iA~Y6vW1}X_|i@G6~lEv2f`S18BUM|iXI%FE85^SNIA_R z4_8iN*D4r=E%uZ|mbihRJZ@^$3c;$hc4a`@L5A1;Tmc{zklD(wU1PElr98i#hUc^& z-z;10EXGJ0{YybITMhPXR}zBh0m9#Uxf-!QRZh0~BDJ@unuxvjZXBb5;-IJkYi#&Q zoFQJI;)(s^_~122%eEL4nD12w3Xx#?>8Y}ptqq2^?d$HEXi z!9BbLbEiU(0eu+BK-i7kAyVT+Ut->YI*weX!P9ByHJ9{8eOi;OigC2y<@n`(VC#Xj zhTYapgW-mPU25_uT*Cu zF%vXHK)oqI<*~iLiefnP8!#dnhOT3*3N+^DRY>#ihq;Z}r2r?=915I=qj=<9bkLJv zFMPE!9jFC4P?Ec{Wi_mOSO01+W!J{>CFy~cpektR$6Uz&W9u#0>I{~x!LYL-cyM=1 zaCdjN;O=h0-7UDgLvVL@cP9i71Sh!b_j2yJGxN;MAK3ft?yBmpRjX=IJp`bzeTDqk zMPi9yxrMq<)Y8ASd~y?NFN7HDzpJf--_7iJvuDKnKVR}ts%Ye@3`%)>NO@!?CWIiG za(HXV{e0f~y^GXjrO!i0Py9?;og2{iSa%%eMFdqALo%SzYO+YifNZm7aRa2b#KdC5 z-aA5ja!dIxT-tp0^WZ61q~-wXk=a>$Tbn1@hhxGyR)`NI8uh>${lpjUgCS?*az8`9 zt~nB_R7-&bC40UTAq9$_L(g^gz?xq}@fiZ+xqxDLH_M|!|H8dc`#TUEQaU`o|HaDU zMYu7Fg!9`>&(dyS#X=s;plVw4(IAtwh*|u-o-Yaa@eY11#^W=B0_w8}=pDQb?TZD5 zSu3e@hKRxhxuBx}HKnNSw89mMaFL6?{QJesPMLSt7r(r*P-;NGMn-dMQ2W)av`&&p zKQHfc_0c0uV)46kJYYvhWD@1JeKgS4{A*}Vms-CpPva_%78OuxqCi**SgZJ70}QZFa&4i+weRqkR`I$rHDM_tmh#xI<+;EKv3{k730imz z&5a>7tDdJ%SduzQ&RuJ1DhueD%mi>qYf7~(dEP`RPsHM~(^(tXDLecZS{SI|_n?F;Hbeja&?maC(cCw+D|A|-9o{N* zTJ3j4ip6#v6`xjuzuKN)nF>DVbe4aJInwO&joO}@9v|w8<T)md>s|vxtW{FKKQ}CdovQ3#7xjZ+<8ZD46(CBKJcGdA&(_}Pa`q7L!IfgnI z-dYFwW^A`!9sV~jp3k{7`bH0XU@Oc6^8v*r$w^wedqqKyjiAKd75 zoF`IeSfzhfX6fpXS%R|JVW0i=URwfxALldL&eAQTK4H#lVyUIEYZb0Db?0DAmSYHJ ztPEDtg${hldDcPt4u%MWaRSpmJ-z?3`I~KAHY|ja_jV_T~jokip9 zjZk(ECQ2Rv9~BrA`wM|?erv#(EAy7c4m7}0`0yf=FVW^ZU|Q;I(?OJu7N_8>J`P)G zq$|^vKbl<BOh-T9(Pk+ zVm3Yfl-k0(qBz5)O!zYvwOQ-5syLzLt1t*DrK9)TF+iYCKmhoro}k)!-Wn;|^4J=c z@2cvFup4h_+YJL$2N1zH=3}YoJg+U@pX~=<2b)d?oluz{o-QwAEalTi^J4iwQfi3Q z3JDkjdxrFW21oVv#>#LYdlg~>HTwulQ9PmWozJ0D8&ZrqDax8SVdzfKeAQ=otA)5~ zCxi(DtWJ4G&vU$EV<}7;hRT#_A78Xo2EL@t@ru8?Wm*{-+UMYbzlIN zvmoyLzkjo^k2F&TJ38IH*;~=5nA*vvSrGtZo-K99s2f#!^)LNmjKEMCkGzOq>`5p(!3%G*)Dyhhd9tSP}9hUN3 zrC8k4JZ@j!pFBRrhoBiY=TcIa6FuwW+~19>nRM7XudnPAc^sco~k%(v6P4ZZEoCldNtcs^X&&ET!_ zv#>#H?`}TdeUZdmsr}v&U6`j$AWa(y2@D_npG^x{i6x0-1p(B&Ri)s8WR+OEc!x%0 ziy>j6rkj|ZN2rD}zg#YIm9*xM#odi9t`Bpc_90JJmI*(<`5216*7@Eewz0zqbUHl5 z(u^JtX_ZKjL34xwp27u_sSdIsJ^!|Wc=Y)V<~>S|mZX#DN5DU#kK}&~I``eNWULH0 zoGTLXBtidolni?FwHOj0D!PeDU`?ToMmlbfT~?Nbi?U4Z8Gyd^|a_3=Sj%^@V=3oGxyy>rP=3nGieD20ap>X$9nTegBw2 zGOh6KI6^<|A%{f^`dPf&i*kt2@a_4Txw_+->Gk1GujBEEdPFdpKN=H#Jm-WCxYU@B zz8c=%nMw1#?M$!W__QYNZj{Kr$CQFo*|=j!Xbxc0@KptUYOk>fi$-!-?udHm(nk@`5MTg5*&Yl=~ne`lrrHdjJez4yBAMH6uR+vj_<0ZWq6Uuw;|W6=!MaQgDz9M^sSX?U&Fbh z7j-FC@3)sb{>0HYMkp3)xUL)SaLZ?c!f-;b!<__pJEf`aL=LZ4?xeSAnO6@b3w9q0 z({|BX|IT8&Atsyzt${TH`bgv(iVhJ~8{jy~XtQslO|O}$-mmOVPmM=+7|^XMG2<{M z-G;*ec{!2RE0YTL&mm}AMZ{kJ-A*v&-4E>5$2*twzve21NMjfi;gkl7%MM%8qOVMy zS5O;L2_Q4N7r$--zCIvg=ZlTv9VoYh9gKbUgZrY@8{kMW&Qvja%U8w9-lR~$6VM~r zH_y5ZNB=p@nX6)9vKdGS&$3u^19bSTMwQ(r>NIX<7g@{dam@~A1s6D3UE!tfbJY8% z3sf``OuKQaVC0)YlZs7W)ws^)Z{)+D-lU`85=m!-UZwsDh>u-h5Xx%ufAhbwgalBvHU@KVWsZD!C&G zHy=YQ0`~MBcVV+rYjk?$Umre+A2^7guiaVLTjqhRnP=$HeB+`(iyZ8n<>A$vQZXN+>i})M+vNC zoOaqto1k?xE6zekMH^bY!fG}9nc>D#L28R-clgVA`YSD2Q6k-!?pA-G90?Pq>y2)0 z!K(Et^S3(I^zU?}XAZU&gZB$W7@SNA?(9(8ZX}KsGuFTVIF)$?D#=_6J_JReS6C2r z+(4C3--XGu=M}D}3;9OOkf!Z%zN;_K}uO;2r;%|0szHMtQ_$T|s16`5)snHxv1Lf%G2P z9a{_J5T0X`wKMiQ0%YJ@l{JU}wlMu>u`Lv}wEk6)2~30f+t)int+x%Cq{O+uJj!ox ztR%iMIq}`{%&(ubC?}==&9x?St535ThQ$i-Ufc}TR!ZoDxC_JJ~)6uch8Q+a83TQT}1nf+Xbg2nZkK8_Xz8FnSFM3rP`!=o#yiTl|{EQX&oQ-EBho1nZNMyE@kxl){^xp-J z?28&-F@S1O<;`+~hP07hX41wv1i?QNP#j5CbVZOtn@bN2fT`dcV~^q@skA;aKlD6c z!l5sBW4tsrlrDT4rS=!rFEKp_Phc@zYhIsvGE8eI{7pI~opKTv|7#mLJmz&@ZIFM+ zLMf4X;uChgVN7{Hk-k3c>p3GEy5x9#y_WQ_`NB40ZvDb7Y=z%xP1r>Eic^j9;3;&f z>$tPrjpCG6WY$0THDS7~A%i-%|VFMVv&(G zUC$enaPKFzmpAw~=>n-t)&eirOz>~Dl^kaeo5BC(0=S+U4Q4B02_JV!9_qXrB@m8W z7cafR7W$9+@oE416$qGQqerg-zF{lYHg)^-jkCH0(PHUd4T43sXwQF_IGqihwoZ-w zBg^d(Jv?~l_K3PV*DH_aKr}_NW1Y&p=@lW3FdCZb3ZuUBb%pw??4n}Z60HUFX^niiX1DqTb$1zlK=4y>Q$mq8XxQbk)JnG zRxm*u+rzI7uzp!}+(vnvS_!xFz3#nlHfK|K|7{}i zZ}2U2$ACcm#W43jUR3`@$n?$VQ17H4-6LD`x22nF@Y|9D{T32)1C*({0jz94i?R%to|6~C{_-q zT;K`&N#@2)l~9nyDv4N!^L&g(-9GyGtY@)8yro7IF*ZN+wtJ12nJk=6luHgOreCY! z>i3Fnv@peFd`roobYUQ7?P5sa)4@p`OTtzeP0Bp(cXiV0n$=}!qg94#!i6CAcM;xA zjuzuCpi2;_!ssz6Oof)3CxoEzTh9QOq!L;L_?1I5JOC=fGQ;$?rk5!UFuAlZiDXP1 z(Nb-Pf>4WarfCD<{n-k6pO3%E$;2tUXSw}B4Vu6&}AvJqLZVHqJqGdVI_Al zCbFQ99lnCPT_C^|iY0S__ec1L%W+a`kz6Exb{iRrpql{9QcM`s-XE>JYb^CLJJQhS zzjv7@DlLLRSeva}-<}j~`3sK1>8G!=yRgSyvK2@|e3ziCu@}m)|3MZkwi)B?BO{?4 z@VI#JSTrynp~0}&QBn9|sv;z&gc5M?LKn^C(!!eVNqSGV`+#Ssw)N8~EIKcdOFA)=ZQt4x} zP*=ksXM~@^Xamqarc_V2G89pH$%18$qo7muVDb8Dt-g8MX$Q!UXm<_Mpl>iHZ+mhM zMq^Bx(__&tkr}mw0I&I9=kt#iz?Otc5)C6a!fSxs{mnaB@d&4%Q8YLjI6>u@&R!qf zNd!q^OQmYs2I=*-dCGmRFgd$;pLe%6(xLlRdlZ#7)p@|_J%^})Jf!|63<|)2_+Om5+(|+w zZe9bq3>Sr2MVByBqjP#U$##`uDcO5Jia_h<`ju2x5$7CIvpZ^qf974f(1nX zpC(V`y?`(xeo+@sJS$8hSAO;qs}{tA-qV;nGKxBc{HuF_(HHq#x%rUgc9T!AyYvUK zKb`}yX)%TI`X+vHXG}kT=)xjN7KkZd{m(5l+#F;Df`)NI=nlGV0A6GkYce3_FRvd} z9J_;KA$sqx_GHnh)o=_V)JS}@I}l+ibQ!4sy3`2gKDe2|!TeM^$dfSE%@o{8J{5X`^fH&!0`-{%$GviBty22Z#OIV{CD5=aWT* z$_z*n_c~*9oCOr|TaiCWYP$ALSjCUHz$VIrTqDS5O7U|qgeAv;84E@d-X0u4FjU0| zJP4^_nI_4V*!tE4-V?mPoV`C?VI`mO%l4kB_M{KhlPSWK2_lQQt*L3-tJOd*u^4%aU^He@Z6O+vZZh8J$ zc(+6rW*EGgh9CTTrtmHjz(yA2_pQELc;96nvvTmSB z=X3v1RNusd<07+lmUg>w;p1wbi8MorEB{GYWY2}tm+x0gv=h1^}$D)#DX@3&fP&nzOnF2M|e|Ib~hRK&ucKV}KE3GptlVc?OZb0My+ zNc=tXB#2s%wQUMU-lMOY;&tVIr9>{OXC$rv2@`J%bDt0hJ5P4CdHd?2zSdV-L>la<5XdZ!oFS!= zTfMbN8m;eonxeN_gc2T?8@6~Vd+5UZQ;nq#R!Ag42yOWi>8w?Cp3Sf55}i(pw%EaH zweP;#?Y2_A4cvy+kM3``>k`>4*qT5&bZO|=Vxy}OCxbSSmK!q9<|^5IH6NYp<}g~% z=K<14NPMd&PWWJ@8j~U#ul#k-oEeC9+2B*au}dy*4ssd*rC300b&;_WSbEU=d&UJ4 z2m}>~UfwR95?g@Y%;;s)2kL$Lq1NiIpVBgrBSO&H)ZMiaMeZ)#xa}Sz!9YM#hf(#AAn~(qDa$ScSJ6mDe^*hJglJ{UdS1Np@3%y z%Tl=s9Xy`gmo7SfE}3jS7Oqj~Lz@&$$*S=%0Zx(Jst9(hC7m$7fM0DP;D5Pf4ghIU z-?6m!^N&5}dGOU3X`#_;E5A(6?lF^{(-ZqgAL*vNjs}5`0?MlqEhRB$BWVD5NfiV_p^3yI|{bk)#q_Cl?Q+)e`^+6h9RvujdQYL4QsfuLNf z0OKx&HdKUe@KrmPNViC<$^CHO=qX>t%Ziai;VI1T<#zbY{x-thB52y1_zgv!&6U`} zWZIxGl2v2^5sxpjbcX`SCGJf6IP6AAo^O8XVc~OWlWXb$qLimE&Yvf7*#!UieN*qY zPOAHBU;Zl}MyKnja{DD6xtCXfESA3gd|xD`7@V-bowFL>7_-0Jz%=22+lC%DLIMfL zE&AWvkQ8Wa<5j6MKJ!t%OBz+<2+D{D#X>$fkJh;OFC?TyPrth|+YxgL*XF`4Ya zXYzYUK}K+|+?yx_@p+L_x`fWNYv13J!2X>)J76e#yIiEc;O-1+b3WOgx$3B*!{<75 z@l=TGF+oFJ9?=_wY+G4?Gc8<0bU_!_^VkpqWvv;>fUH<;{7f7%${gLUmSklfy>R4m zxC0A3^C=5wbI!|EA%<_oNY_{2`v0cQFOo;n=SP2KQVp8Jx6fSHvMUl5m>gq!@=m3! zhjie(D;#P26*y&in%R1Oe__-W7SLd<^9=MwDb_h?oM?8VyF2U-#V3s?(%_*kx7vL^ z503I#_xQ6)ouZg0$J&@(a!0eak}34$zgZI0{iMQ>P)drNF$Ta4GmB(qmW)pF`uo9YFqr( zVUHRKiygvJI{i+)&MwPl{ zy`I3KnVz3pN4Rs@&O#b}#U36fhca?QV+Ok)t^L~azYd>6%fCg_StY`s6dDC>#?Kz+ zh5(smw8IYPC$=*7vcM}nUlZ&ENuqr^n@Ht=+#OFGY#Bv8Uu4%adTNth?(oJpEt`_kIOe- zDk2|K%;8)2)THt6e!b0bSjF3DCw%%WQefGsxm@d$KoTc9me`m7`|A9>_ai(3BmC-; zZSJan*i5=EnsXR*lhr!ZPO*$CMg-rw$M)Q=onoyj>&-Lwo98E4i_@VSoLp*+XOC~` z5oZS&e}WW^YCSh~Zyc|uI&F#keQ-2Eq~!9snQm~PX^C7mPZ~P&hw&vVr&H@f_Q$7L zQfZh0%$s^O8=ejRL=*~(xu2>rJS63RP#-a$?)Kz(Tv5W6ylxiN{$)uOX2TG0qTwG# z7(U+d_W(^p5#i2O`Z6Qmi!ZU#C35YjO0JT7zSn|RIwPD;QY-S+LC!(H_CtV7{x8Z> z*-cTV0rUQJElw3;p&1spHQI(`N_3ZrU0*D+FnXTH?ylO%TB!7@SJghRLK+qdH32xHrV@q zrp+TUd4N5>;bh)uv6n*P;aAb)nk=WPbCiF>f`jmre(sJ#0u*eW8_&pCes20jB6Toa$ zn+h6eMos*$&mVjHg(>CCTX%mY40#pJaa0uH8SZgfBQG`2bp;nZ6q7fP+D(^cx zTTCxqtqj31dx=P#nt;n8xd7+w&ZEgWQxZ+B6H1qg@8BU2oEP7cd?_8 zC3Nj$aTEFj6D;SRXvvT(f85>`;8RCuPct^s-TU+cR7;ooSm$Mct|1e~u)gqMt zztu9$B0*YN&Mw>au3(_EhU!@F!r^tf#t?z;amFd4#&%u|Yo@*0mMpf?uORs!s&sBl zHajVev_vj)!?_F;vH#Fq=r3u&&5u7=#(t5zpdJ_m(DvCyq4%5pbxd*F-q z2HXiOLH!uVg%};Z1k`tIh^w?;mNBg~3LruNLR_$LJ@3RfgkkB^mD81^@fQQK%n^NJ zf8}CTX=$Q_FH_a%^EMtibe76xItY-Z@jYh!;zr}qHi^g6#+^Hfj6h14Ys@${Ab$~n zdVn(eng2zi+1nSGKNZZpzjgBqRZD_M3&eeW5`KP@p@O%W8kS=)@$j{T*=9 z%5JR6GbZ*h(5skXw7WiQcIE=Cm;qW z`^rJ~N9C9`H&k}Hp3Tt;#rFe%sS6B#c|sk4U^+o@xev*`BOx$}8Ep?pFnE6`MvT)j ziDNsy)jZY@fXDc1KS5Zb9H`&Gdk(o4eI7o2xxbP>kUrEx(cEzpfP*1RsVTQ%X$=^} zKcNcmy6HfNS2laXD8?#H@% zmy+@aZs)QE#E4;Ms8*c5xK2em-m{S)$}+bh{IzB~J+Ir}W~%uZH0nrz=C}A%=Je4p zR~?4Vf3TLxcmizhT!0u+PHsK2zBToZ23MZva;6|nG)ezQ9{j{T`UMrX2B*jgw z`>v+55`*c^0`eYiWc0{zBUEdm%4>(a3W5@^RybAQ;`wP8)?A4q>3KIGbX>j?{%m)1 zw3y0Z0O~4)McNC8^Qg?)FHtH+l*{3J$&6O5(hjTcdW2nXbMD_1A!)(q^HN6^KFt9d zs5%GgJl8Ns?aqj%69hK8=}U*xo@+&GoL*xTNzTMEnC>INkKD#Ef5&k%^LGm-2)ETm zSadxXTdf~%t0vcCB=u+O3hlq|cX1s1b8!{LJ!VMg2a)(^QVcB)r3gh{2iQCFUUnQq z50Lq5o-qC*ms%zT5V5vka8;2=WoA;2m0LRQ{v#Eh0xa{8yindVBxTx34wj5)dP;QDDf7NU#!6^W`VbyE&{nO2Wp23l9-u6e5^N0PMa3#W};QZk5T+P6hR5n|ZI+M||NBiF`gp$pKzW0im`(amLL_%)OEXOM|fuhJX zg*w9zi!ink$T_oJ#BenanR;)pp4SN2L9VYUh=3NSAdvsxzf5n=c8ROq6edg?|1a(} z%Nc#_7&M$Ckwb_o9;NbhymE6))lKyFjHyBq)@l0|U-(ZYt1yQZ#_9QC8P$OYC_{%X zZq0vIPZ0QZmnt8)8#0LfAMml6%M=Ev{c>VMSbp%5QhNZip6o zu#S+Ve&pqLR!MvD{EY4A_(`7V@m!F_ZWG7x#}+!hvhvGY-Kz=GT08$EJb~YNXM3&b zERz(=6RKsLs9pahD?k&+l2V2J(7yI~cMxSwXeRiU7l^#vf(=~RWzZ?DjKGMdZj2&t zHkh|~Yf~#CREZ{q%khZ)OgZ0u5C8u+K2;)jlsbdV@%=9nAVL-#MmjtzAg499x4=uLjO@^`EC^lOEt3KA(9(=_-C$7rnEVc1@~<2GXbu@$IdlE`Z}tRY1o3sM9U7W!(nhWfU< ze=c{;W_Yg|t3(?-(2#Q=}k3WP}c{`kkr4bdIL-%?2YBos1_@$ z#(FC?YtV|PvwOD`h3zRGv3v>!ro5U~X51$-n48Ov6dO8nxXOLVr3{vr6*-)5S)$Ll z{b>KJ+Dwf*2k$)MNy=X~AIyYQ#3EbfIB;@bO?$c6RIVzf+MsR9mga8Oe z|39x4Es3om8?6OtGE<}S-VhV3SZ;B-k`|sv27Y9Fq_ZN=Pj9bx^ysL-(p)$JD<0d=-T(>yCzS;lXj z-g7U*Qb0rxJ7H|yQ2_DX0Z^-mfQ2u3p~RST+&XDOt?X-4g=XD}Nwk`c4ZD?isN+l@-dQ zf$$QirX6-t6zm;7XGL?#&_|{JSZNwZ@iir}zCvR(QoCAOJXWUsYD-&Eq4Miid5OwZ zx7Lx2Xwzd^Ni09gOUuq0=J{fn5Z&I0q-Uue=)eT@y-~+xC&`$B z*(=k6+(tw2K-c%CR8y+aU=x@Lir4d2xo(hE7kJRlcDOs5+$ej%BB(5hH`xv)>)}do z)wc*-fqtW;((b&CkUzutyza1RfaLke{a-I^=+TE1>%MV%xxS>U=<#LPXf+JbcfW+^ z+GdS#wdlQg69rp-AAv%>k53vioZWZ)fke=sWVLAkMjmXLQi>W=p=4`@i2fH*7tU_X zq(0LPcClH`A0dC6*qKUaK`*5w3(Vmpuonmp9eB<((3tQxlg|zrH->0(j(!-&%TdwF zA)P;r(7(F1hGFq$8+fkJr~X;#+?_pAi?yYQ_W5gak6Uw|({~7fAVKF>++V;a3_7!J z%mG)qOJ%k+ePxgSWCXgFT#{#SJ%ac0++}L@viw>u82*I??PR)u>5cxtbeS@ru0<3Y8AG6rtwMWI25%>RQ+It8 z7ge2SIy6z3p}lT-^*ro>N|X{0_?{AnmWDbNIJX03L0J^JsbZwyv?@_ z4_x_IMxBtd`3mG)>lHcsE=c9)wJ1W{t@GM~R7Qikm3{lHVpt$+nD%4-6kYlqVJKqf z;%Kofic1z(V~Poto6ptD_FIvJg>#eJ$wwy$^P?6RsijnJdYxBQZ+B*2sI*=4bs8km zgYB@&={Oj)r(Yd9R(M6@RvqGW+HF6Q@dLm6N&HbEX|%88=94jc&4S4#@xPHS9Vf10 zy9v-hC3gquK+c6`H^&M@-KKsP+=(lEufzXC?5ZCWM3KMCQXy0ni9K88Y36nQ`Uy+g-mNi%bwE6g z$w;ExKipcyP8n195ixh1SVbYyFz`06aZ(60sxodb}lHvhVcSW>2@FOR=SdOk!Hsh zzZKZ)kf?N1<1?gf!(rjcb6i}Nj&1k&QtuP`K{|bmv)jKkfqiA*bKZlyneZdBIYhg)5E@^N6T*Jd<{X~pm%zA0D@gG-?oWNk~DSdyl2 z8ay-Cl(z$iB2#h? z`m_l$6&j3MFO=zFLWwiOq#qt)g!wx}_bocdCi(caKgHk>>>^Uui zlq{BZUM64)pUVKIoFN94$%Df-cD$2+@ZXZf#>h4uTaI8;ru~F&V~BH4mF}y0}(=D=3q={UQ6|O5wFkS*=zf^NO;Gb(Bp%nVQ~-1tV-h_UDC7v zls?^|>N&9wG4JmGPKr!8b!H5nZf{roac)_qPD&us-1S4@68{bY1EOev~t9AuXpvm`EyXs7kR z7&Uq2u8yLWVhpR~?1V42{*%%EY#8->8FrkK*FGF09LQQAM+4~tlGq@YofxtQ4a8v6QV z8U47~_S-i8a;DuBqRdzO*hTxA{L(4)VDN>Oe9NmOkufQN(V-CeMuw0RGzZsoR zHC52}H9hU!?TJ4AdN9g62CEyTG}`cQBdlUIiZP1nBWHq>4*l;)7P|HTphZrSwChU* z0H7WMWb?qst$XgNJF~9crY5=}&##RQ7lQm-5TOAE|WO z>*%|G!CsU>cX~xKX_0O2k={aTy&GSEI8Ov=l}2GY z5G!GF^%m~g&Q+-%RNFNXGDg=rA@5rLE~JB15j4UB^>lP%=wCLBztiCWyj`O(8z0CJ%r5Sley_`d9&Q~S%etR-+4ag7sLqr|JGu|{ zZcaq6R2=RC|9Hmn{I1vBsJ-}$CMVnKguApGo*Qq{Ri3ZT4`;_(Q^eM$?2TeLb z+$W?00B8yyS(O)aO>b}wj#6Qc>LjV9>Ru64&bBt~^KYL%pB5;tVl3AgR*n(2ne4mZ zaX3I1eEO_3P`f#!&tf-|3VrZ|#cGjBlDh`wbQYDJ)n))%JlPvKcP?90?%uz2$dSzm z(m*ZZ$|@St)fP{nUjBmGeb&G5z^VRu0EkJf@;)KlX3My*bUc z`IJd^##Y3|Ib)gh?KofX2ftzzT{=^jvaA(r)E`!_3&8{5{8>9p-OcjN@os zvx#Ubz(UA(@E?}T$_*z98X*@M? z)OfQmUTjoVc)iz{0X1NQxrxJr**xatD&115#Gl?*vSqxl)Ehp>HY}y9e%mPBBx(+y zcBRBRtcFmB5* zid+1VM@p#%c4*%nvFDO}MIzF2D}Ec4v%={zM89y24`V{}=ThA}6(_=FaSc!!*ad&) zlNRL$z4bg4jczAiMoOjP&a?R2j$1Dcp-%-(AbDA0|2x^IIX9YWsz$l-vTU>TN1)qT z)}2C&mxWV4Qw)OTQsHuM;?_fZ^TSI4xqmCKnmv4)Iy6kZRH#>X` z!AsP35~#*!lq!)%6CR)iiahD+T>Kloa$}yvJ(%mpOs>=@rOW&2y(5bT|21!913CQ0 z^ZJeyty~#ONjyfp)R4S}-hHg!UZ5vHyUs>U~W}**>Q7{RIs{ngjUg7E;t!oPo9=kuz-qoU9>8 zN09LkkJbNS>#f78e1gAWI2`5BAuULEiHIWI9n#&62uMnEDCurV>F#bsxHO4glm@j7(K@-UkO~RSov4@RbBUdrLW2Zp9N{>WU4KF>XhcP5p`aM-6Eo|1uHK&)s#wyr3LYfXaI%2EVYxw2Pl)Sb=1cN zD_nIp_Vd-U%i$_XOSDm9yY4Oz3~iQ7g>-@#kJsrOJ!Je>$dR~FZlRz3^|ZQ1FXc;B z0OyYKKb?IJFq^^c?&GX*%yL76Y`9#!EiGj z{bKO(^1_VH_m1Zjhb_jpf`#hCm-!{e(3tUc0W^Ip&=46w-195B_0a$=#D8|#9zYJh zly`kz?)eoE$G@RY=ct(29Jq|uI=Z0&a~%CW`9qJ{?cWbcqAmy}=<{U+XESUdqD5z= zn+(UFu&CyY)d2CzsyhwIcu?A{e^oUqW zjy73@cvAjjOgcOKE(l5{cBKFr0DyknR$S`HPyX!S89DGw9_N|~<}|w> zOxbSfeShlQvCWChp9drANlq?j5LjDC6+WU|ZI+&HQu`X$CKBFVdh}#R>gcsP;|=Lw zGl;dlCCz30Ffr4d$ky4W02(I1!JJgTJE0?vo*>~hB#h}I6jb>vYC({Vu)w=2;Uul( zh_VYz?PiR+M#``Gzs~Z}1FSTt>z+c9Ijjbtj#HboZt?`$9ieihwDbh~A*0h%CivU) zmS0!|I_T?3<;*8mFC&kGEMerA$7H3!9FK^LqBG{z>ONRdtw{Pi{Jd()4EmjI**%v# z=Ix$qSX*04E&t)D>|JQ;PjRO#kFaqG1s}Xs&wg@@LG#I9{op!6l^|*pO}+XY4U@c< z1dv4Z40bzhzb%M0tCMw5#7k}2Cwa`iSYgYobfBg@Q)BUbMZzDDercddm70fra8==4 z(a$HYU{PCzR!cru&PuedU3v>zaO#GKvcRkZko=^6(D;M5YR-u=c(Rug`q*k>`tDCWf(GyI{)*&Kixg*_k-NE9YXL>%~zqNi9hqGcOl_&HG-f zWg69NdMPz{yIo;gecZzGZt}_Bg2tsiLgo}P1_UH9dJGe$<;U1IM&B{$&av?*7~o9@ zLP%W__A6dgoOn1p3%7s;P6UUgN51IQz@uT}Hxn$AxAaQCkp;_8)0X*haq){|vdBT~ zCFF{}m!n{2hM##p{^bRA_d%XOrWMm`{FQL@BnQa@loeFV@GHqmqmKA(=@g0l7Gijf zNg^2oo36o*DQix1z;Z;_sHHx1^k6l`Fx=xQ$vV2F`;p1US?$J^X+&#tAjN!{8eMD= zml3WBq`BUmA~8qA+2)$o(LZ4DbCgjLEJq(UMd@Ia+2bu5G(W$lhtT*DaTHz zDKL4jCw#EZ_Eih+@5hrC=v89fR}s`2bZou=P!cMT4GwNjC_uHG{l={0%$>$)*0CoJ6k8LVC3EK+d#q?Wndtg%tb~{RG z=`V23{dj(QN%fw^HM+ni5Gi~4(61{h(8zEg{Lbn-F>fQ%u?0ui#`ni&q~F|eV+ptp zz8B2UO|mhxg|swMcFE-bjX~-X;1zFe_CFioqaN+1PiysS><14~m;ab~x6bJZN~g4B z?LjSmK=%nurq=pmA3a4jM@PMpr8*)^N1#hPh`=^ag2Csu7EuU&W>iCN9at7=8ikat zcS35(`j8g!VSbljk6fGzoGu#W@mIHUOYvrxvWG#R{1c;`v&VU8;RjE2Eb*aGWYKOi zxUla%wnO0vQ#A|{;2%R(&Goxpj%-YdewTs%PrZ6gtO)y5Vh!S>`!Mn!H86SU28lX2 zhDyF_&d;qBv`5IIB3{t)3V7qd)+Ez-Y#g7Y>i#1cDq3_j1*-653v@_lsDBz#`aFZg zByj`VJGo+*V<_o7UbKKot3O%Y72&0JQuqmLEPZZo-VnfJ*h2C!X<#tOffN-3@~BQZ z%Q(eisRS;~w!Pw@cYwbTOu+k;#EfXKZy}if-_g{Q5xTG^9pS#f#`=|^%Vccx_%J9_ z<^4Zj9wedw(JrunIT2NbIHNWh|Ln~bgZju$)h0t@{Mp~-Xd^fLBoc!(d{vb~Ovr00 z;|QemB0`$&$BzaH0{oxig}%okV9jY<1%MhNWl}}Jl;I+=DhYiXniJhUG8y2Hia6-P zTbapyw^?UTCn`*l=_d+bq2u8fV@1CRr=o&wNBRpQK0YoNyY>hfhq_ym862%(Ha-ANLG;u~{gnCe|@y6neUB1?jE2Zief8wFP3BciXY@=u#vkUIUpSGOLFAylg=Bn;=XU3|i7ga{C?LI&=QC2C zFAGyT6Pr74KA0>4(WqOyEGmC7Xy$y1z+VFxsC>M4;a_Ovzii94H~BZm+5XPNKJnG@ ztcFBZduim0+e1nAulx>F)t)M^<+c{pvFRf$r?twq*do4HnIDW68`7XU`JHmeZCp+A z$gbP4Lcb^(^`|-b^=+bT;Q?NU>!%K#SWkYwvn3?RY<2k4B42c%7q`pp5f7Hc#lY`H zz(2g|PtX@V{|>9WFC+dz(B!usNa9XBJ>mHbcoa17`}d5@kW>~O)1W9A!S5{w9&V3f z;&xcmgJ*H5F(AxHA7kVDjw$!)@iahUq5bX|mqH9quo>Chwux#LhBkVnWDC_CJ0xoH zejk76+bTOZt9GP=Z~aR~0g1DmEOd70EJo#|LGkynr~R^*e>s*kGflC^oYPbZE7^xT z9YL3!R`mnY9vQ?`d%1AbeSC~8Eo1!GI}P_uTa*>_>{us>r{PXug$`6$jjCJ3h9fV% zsmatv60Fzx;i;axWw(LdNy;-t&n!{I(Npx}tL~0EcdpB`!O;KNHYsa@As}LP+Qj^6 zh@u@g96AmPn<8r!NUoXCKs#b|ioU2t z5q#-+uKQOVMa6}(cM$Q)gPjyK0e_$l7ybt`bk7|JP1$}qL9<;;L&ja@T2WQfzA->% z<|XqcBH6d+nlTwJO156geNijQow*gQa4BsuCd1jrLcFM7E@e$1+W!w-b;E$gxfHSj zonxm%Yapmz?E}{mh04_>Cya%Jr!RLRhv@fgk4m;@6Ljmd^jI^=tRyGoe=8#15$7I1 zxXA=UU<>^*s(pQH*g|IpnC{iFBGO!&_d<#gqv4;TCdbBy+E&$ZRxc%1Um4)aYSGSa zG>c4?gvfpPz*OO~^M#~U@E{8DHv6BVkKMSzzFbD(jPv`ydjvFtv97Y!;X-5~*UaSi zH>QO%AHl{V<1=_RD^}DB+x(rwg_ct%o>cq{dcS4MU+sZ?nax`9qdS;Mm3cCWdR<4f zy8^KlahA{mp$B;KIbMx35mvIQn&S9Od^`bixxq?UHL)aO)}lxrytHv5$Q_E39NtNfom9{`GYabm!Chjq*q%Ddv={aso=oBkeePmbt)BiS-> zFRt(x`|UV&#H(Ecd-qbsFftdpqO@FpG*S`#B*y-p0oAl84PdDd>p;iA)5LWo0(skU znxaEzLpjL6c0_ojJuyUfPSe%`bU~ zJBG=mhu;E^_p}qJg^(rudD@A0nfD& zm2FrxsP&U2)I?u$ae?0tRSS`;MucONcRDhl(XWWo(bUsHtz&W0JNzfjdM>s>@AHF| zqN=gkEr8obpZ-EqOtSj}{=y5T;@d?|?;UJ=_5)+a*NJ~a8k+h+g<$V${x2RMHX9Et z*_>^4wPjxZR3biCH~TyxK<7}Lj@QzT1^~y}i-p^TsonJ8CykQ|P64K%)T@dC?uTaL zsPT|4kgb4NtM3x@95`Qsl?;e_jZuJzsbUi3RTBSQ6c`W}g(EqedMeD#R8WuBzW~wQ zo+V+OQbMPOFPbpZ((6M{so@nMKE0m&f^q45n1IV~pTNC3!E^q!#+;q2T=Au6jwLs924ty zleb<MGW;~O_$mA1j5v2qycyGUjYX5hZnw5Y+2>>=HO>Maa$3uYFl*9I7EGWoM#ijc40Y|VrA6U)DZB!m5kr;g62WngFuEPaC7({nB$g+>%?Q}Vy1uWe69)Jxc~y?j#qa)=dM zm35wm;jN2pq#|PNYw-8;!P-+KzfkQ(;9qK7z=isM&%Pys8_UcN8HgE~WX%XJb^Fzc zarhjN=!9+}PDfNu-%aeozUgUl>F$XP$DdD^doJ8S`TU2ZcMlTBa{sCBBI{rnUc+R` zlNqvWJRp~53~Y-YaYoWJOO8gELQ({y5QK$Awt$K*%pO9jhtX^NA3sN5<&;=ah<0d* z7>E(zDv+}D(144zcIkx^K5wtKHN#t*crA2I)_FPx$4}d{u%9v*nPesuy2HRhl7DGY z9u)2m5;wTMzp>qH<#q7wy$bk0w&6Z5s;~SfKE(P?222^*yMdN9FlEl%PcN8(mVJ+s z*%X9nCv?ZZdi1&=R401c$P%@ofL{?A0#>3TK++GWAj;A= zKK*}|)E57v7A%n3O${B39sWg4yqMtsr^X1)xB!~bWOIo93l#0`ym}XkMms>mRNWw{ z_i%s1N!DZo2TrTm{ppX7R~so5bL(Hb9;C8_~V@J8JO-sJS zvJIp4`f@bPTE)v2_zWk%_)8}LWhDw9*8eJ(ZEf7O)*&*}uQerQOXWg+BRp0);FSF| zVe7O?^%?)%d$Aq$64%e%oA*=B&kX&E_`YMoaIo0uCdIo)>V<;+gQ1NaqD_H+oKTHE z`7zeW|+PN5x4jR{#IQS0+UfKT)uoSI0QrX1$z(zw> z)p4D^>(Wh@y4s+(bvK!aekolWRI(SHvx*I;f%CQ)r;_014?%7_dM7i7$_;5{-FB1pBNapCjs_N>kh6heH z_%I4E;4cW%kp$kHN@s3HIUb)9128sMq2DXCuKW9^V$xCF$JH7VN5`ha3uuFxw2YO0 z4}#Yrn7x2};S&hz8*jAJFA&zC26|q6U7slWk@1N=NUO6ge7wU80mThEr_3Kz1%+Wp zCWWKvha&8-z&8w&D)=9F&)FL|oV{+>xx$l92KI(#2+?k@=8f!r4->7dJX}%$_`iBg z|7}`Dh2Y~;jfEuUjZd<91Jus_3dZ=a%zoKHad0F7?4kyN0%ua23x^iUrJ?^RQUpWm zq>K2+w$$m28YqqZ4OA^B8d@o3ge%utsyQG3TD?0N`-Wjl8A(na4$3!+?@m_N#E%Tu zyL^O9(9>U82X#>js@_;hIKlw*{|Rk>j3{=k8#WnH!1OnH)4l4r!L0o!OaHGL{$>HA zew^t%-2xW3T|;no3#O&G0E{PnI6fCv6mYxDN(S0wS2g$9;ZGaw3sVj)*N4(DVkm`0 zSL_AD+6AT3Yze3G%(O-gU*hohzB0L~bOgy%v@&8g$;H*lJ}T zlwPkiFF@M+S&!nJ!q$D-Qs?;b!nZwb6HC2RE3i{$U1UPZpyom3rRV=ZyjQdR9(trb z>dH8gHf~X77mN%p$$n}&yv_I9XysX`bz(RCQjH?)#N(jTfGvqm)VN2<0B`49Y_tx> zu2?i(%t#AAs?2C2F}OYhxV+l{u3Xyg-8}@Mfa*t-i-sm}>UwP*C;NijounE~Q5>FQ zB($*TXV1Tuz^a-3)lFcNRsZ@@WN8}wlXI^|3Fg16z_?`}-eB*6qHY$3 zSc`206x2hNPCj}kYUlS}?w{co9uN0E1RQ$k5ms>#vjZ~5Rja#_;o!rqmtmmG~$P3RAmy^ejC=DW%JmLXb$RZ|nnr?@k_Ga^!JK148O#%izA zg|yL|&1;4Zdi+M21d7eBKn86GlY8Zh#t}u}YIE8Qwv05`zY!twm4|!DD5*097l?%* z`3qZ;FEUDvOD~Ye^h#j>NCN+$#z>+!HOjP>4NFf8_Sb)5mLrua=BJI#w~ zMDe@5VvK9iv@JiZG!p-0xIEa~JXMR#e|``RfRQ=maoy>PWUC+hkU`}C3?Ld$^>;Za z?8Xx=&-%<|$wMp3=1cy~T7=123`z1SGUD?}RH!ASc2}J5CWie4=&m7(+dW8(6KV=) z-duXRe%*();dKrMv`CMkbwE#2EbVy@>fw`qx+xy5mie*83v_{xm#;OeR^Td6w$_e``D2;CdKu<&0^i)7oC@>YHqfZ~Bou0IQ1>js zN~s8g{58|7J=|9nm|w-iXMT^6qlWr7(3lR)(J&xe;%i6Ctjf~B$@vGNTq|k;Br=tz z_g8AQP$Jf?Pd>`B#`B#WvjTQ#S5N<0^5^bB+Glf(UiKS-=K z`eGrS@eSTw>K`sNwsoTbHn?+~7OK4QaB1a}$Ic2lw0s69v!3(x{rjt^IL~6~BP+6; z;{b=phqZJ*4LKT{l|1G7XXu9;?=)31mb14f`CuuP`h^ZoX#^@OHC~KT(UkHZ4<&Qc|3|I_C2UAKIt7R|1OUur$Fi$uLtPkcX&U`UNAV&zRZp@QuC-gcOo zcDredrxc!b?LsD>GntOiwM;PDWeVH-AA0TMD4%f3QoDX{+_B#b%yll*d7y?*UVC&| z4#!T}a)Mrtz~Sw%8rQo9Nf#o;unZ|F5n}wyH*JC30!?Y^6$i3kLt=!1XFQKK z>TW8ub7@#QW6((2=CFef^GMnXQeV7l4PTR!3<{|5TiR5-%V6^p9VWD+hM!_Sl*<@< z(7;c>SY8-K^`BLz{qE!~tVUY4rT`$(Gu!X|xp~s+vv zDE?83>|5V1(^nrX44jrW00i>i_CMNzPC*+81 zOz(45S55x|{0X!4Q9D?>U+l+p^8=OSsvS$d(3(+8VP8 z<|NF+il~wK9P^sr+HD_D7SFaLS&O;~aU#(GsG>X`F3WxxTtl$3rF>v{a&Hnq=4@2V ziK=`d+cjxiYkFTe=X1KwRll=jSiwFBPwh@5+n)W!y~PePf1VMA5=ykRN0CsXA_6W> zC)6s$jhk%C>6VWzkAREd$t46|ySt0J1EVa*r3P}U^PsJRg0VgnO($z8ofUuP_;LQl z?fn)z23llcHQU2ZMUDH60Qw&f46H%1g?e9&(}Sg6Icx?vS6JRv%x>de&+Lzp8lN!* z^slxOSH3Nf7` zo?7;2$`G!HmnUBr20XzhdFS;$4}(%(lU)n>yxoLlt^^d}0qC$Q-K3q*8U|$^L$um@ zxE`q07|ni#;gBzzSN`!9aC)TsMax361+Gw&cE9&UW&3t(Nh_5QyaXf}>KromW0jR8cSx8_j4n3zTeyjGpxWQhefFor2 zabzxr&n~m_(Jqno9~!vHXEzngknaT1JSf2svN#iKrf`D6UiC-|iVT ze`Q~@dws1k7qz%zRjGNzk+mR~^~L;h_a4PNwdn=+zP?-<^RIc0OhY9A^hA#q46G{% z(Zg?@TvPbtKu@0Cy$>4G_uQdg*yPdI+>WPlr6DP02ochL!qoT>WXC?DSIQJOme9Ih zBd^0Q5mq9pu$sxfxO*zud@LCc`d12ma`&Ei9_B2urNC!It0lZkYiZVdezba+`8lbdI&>o}z;;SjwbgL$*K#}i;bxxMBGCqP`N z)=lD-gD9A^4y(I)pSQml4}X+hJ+6Ka z;C~gh&`k~<)VBEvm4EOR!ww}W=(`K9wgl&`(U5TDZx!X?Y)?l7-Q|kIEoSRHUZX9Q z3z|$mv2%~An4W%FD!wAX@kQsZKlSoTy*AmE>S7hQEzpo6j>p0k5&9x%C^l8}YZcY! z^%IqzHU7(Qv-vV8@)TsFk+Vll?l(nbeme1q1|NdxQkUvwr;zS}8W; zhN99gW9VYLEOOT6v5OrXVxU2H+%T{3_^CYzw7r$EPjk3}Ow{<(vowg@=@L$sD5B7$ z75+;TsHLyA{mOBZIk^Tq__Lz)T+EA|QYrcG zgjJDf1iiRho2w*&PmD6uWrMj3Cvx7Q@ql~hHwrdB4UUJ`D<8kom+k*`wsO4d$8yC; zD;sgNE1^{c;jtIluTKGT4@(!HG%DJEN_I8em4A}|BZQ`DoY7&JpCF4Hf1v9UzbLP_ z{P#&J^u-6gHtT@am&aRU{E5HbQ4_*1!}SMtnfS$3S@8$Wj}v-%xZJF9URJ81O%XiS zY_yEsxw+mAQ&(6GZ!vpYL}qbJCI5RpZRF@IE=sdc4QCnj(?IzSeN{*lBnm=VucC?OQ>0{ac1ea|0slEp4^rAfR+xmkgQkxJrxVK z%T-Snm6en#ep}06K9=10aF_Xa=~v4^X3NF6*Wt~toBQ!CZptN(73ZuIAMBG8fvq=1 zZ(A??E^V^$?fd8QoLRMqwtQWca%%iCrS7jkAL=(C-RZv$qEM@%7W*MonairtuDp-N z=AnjnwHKi-dhLNK79>j*B{&A<~&_`S z6D!_<92h3!`)I-n=yX{3Gt&IPn_ZV9KS|Fl1=E|(I|sf6SB|O_TGQIzqrH}s(vK*T zG?tBB_t$!azB#-STK6=im&U!;I-QQ;y9+hWrMz_d?26DR*-F`Gj9I~g(kPBIg2uWjJ!63m;`@bn&DUO9NzMR0s z-=j(z7o+j#_=R_GJJ*s5MZIDnfKP3zj1Qng2;jtO1Mg{@Ln?3C>AxPt4-&yKo_xiQ zL@`vLGSW|{RFFlTDQeURSm;!%x^q4N>>i6{cyO)gkGTFMjWA#&GMg0so1Y zhHWU)6H9;i`P8XXlR*mdS1qAEzQKO<$YzeMdgUhp{QLxsJzN0t5Z1j@xw9HM-Q#?( zh`O@t9AD$J@`1wP_u>;7Jd#tfP;0!80Rhz31D~%2G! zxQMlcu{1(fivyIV|Jir>^NPM>m_0c&J*Oo@<7l<~+}>pClZ`&?88nW7cVW8DO8G~_ zyOiHkfO8{Fz@wIcRa3$3V2N4K^E5Uwk-%fOqG=s8e1BoLP@U79DePwm_(`ZJ_*~x7 zOw{=t4>3-+I9t8(zO25Uqi|oMcIdn+Ok~yKDE`;pak}ijBKx!P{RW_jh#TQ(8?E>K z5hsXdjYp!j%b;^)=UgRKXeY*ZDX8V@XaasLy&xBD_L#Xa%(uZr)>Zi0=+C6oo^{B8oI_ycX6O*mwEP5|KVyv_(A;;=b3;ui1gAP zcHUIJw3(Lpkq{e86^u?8?{TupY;v{siE_ADC2#gJf|xUzh+Vh%K0ZEvJ@?ZyRXi~X z%$xK5vi|pzIq>%5VOFP;vDcsfnw}FfK$xGp$t-mbIUS$AVRrK|B*ZIMKPJ1_Mvmx4 zi-bPjZC&tv_|-)o_jk300JDehSNVlf)*H@mzl~zOTbu{O8vX3lUXLy2Fc?c+Yx)h{ z<8tlO2AIS|z$wDggNhtHf#{wJ!UTzcYpawq^krz%bb)-^fOyc+LEE7wUhD1ENl_h2 z_V-EyJs%tu`N)Ss+L&T1%khlA_b1y^c@~THHany+ao9NE+!+L;gGpR{97tYr3C=;=4kL`B`@vmZx|pAwH9 zm;4RUSu)|3pn@7kk@3uScC~w)Sh7G?Jhmu6#>gn&VkB8k+vjG#$>}TB>p`IA?4X%_ zB4f6p0y<%=(FC15mq`};Wuhtlsqe>O_X zDpm2OAdk?s+gW(MHPQNFQaM1|S*>L%!HiQ!_8)g6%;DYT0cR(7p#*TxsmL$~;JP?b zhGlnR51Az-`!atm^r1mHa4txF+=StYdHvGbrLfC7Sy}P*=x^+=)DV?my-shB1{@p} zL9@W_w)4ezkEX;Z&}M0Hr)ogMbbSeHP^!-28ZH>Jpp3|&vBFDMr1RfC{L&^tG$&2M z?!TyN+3b2r@mS=v!uRgFlrrBwiU#-m_V#2#4r)3<6)qTAVKxx`!f9Q`X0g7c7WI3- zlvgZ+FL>8XN8lUr$lq`B3sv$1PG6kM(5Ma)T|o;w9$M%GgtZDjO)btbGaptg4#^mk z=s%64!Nn-N8EjG~IJ%3={OTVjen~TFI;$YMZoN}niNDf&^Y`$6GEey~mmte(^w{QO zIo1l(8ZLZ6`jaWHM0*G}#ZDHvYAY8PSAZ#2sJJp7Or=1rK9tH7XL)n%v&Kt2pB-CM zn4mIVs85JY7a4{)u0`A3`Ooi$!uh8EtU_P!QAqGz0q!MR9O~(*g+E1Q332z}FesKg z6B`}R64W~jJO?B`LqP45j!rC;iu>y#_kmFuR&Eiif?fC><_6bQl#0?)+ zz@p6=;7__TozZ&U928SsYku!};*CmdYH)#3R1nDjoPs=`8{q<|@{vRoXeXHL_+jC~ z70^)s-m!H){)gHV`~A-Ud7#kP7j6a5Wrgf?^Z56zXrEwx=E667-1I?jFDEMv_(jj` z08NSoutT-3yP7|`{2nA}aBb9K^r4Ib5$X+w-p2KAjHJi| z_Md4q(e?-ews7vZQJ8whPs#d-&v8wasi)hreXmRKL$=L&gV1arsK5AHCom|+gPma@ ziKDU?&>4B2!)dUOsS-B(0u+$uhwh*Tv+mASsL_xF(}jBWV&BT)S%2<&R!C~P#43Yl zO{SSmA(;>BvpdxhzjCrjnMJ#UcGU*QAcdo{oMkgzx~>N*($~1xvEe9XTaub2^TC3Z z>&#=v46##Sef1v%B5PRY=ik6X>#6V1*MeqQp_xK6$`M?9YbTNIe}!pnQFA|?9%c!8 zaj-!C2~^?UpsKXPXSt!q(d2Iu7sOpTRqJIaXq{kO;Y`nHye^-S^-DB74_Ed65$NO3 zbS;vIgY_q8@X;2n=>s)QRx7o|uTl-x&lULTW{;88apwOf^~vOrKIi^RYbr^#SrCCn zg=8hLC}q3UOB46Job>ASr{MHPu!kIyWdl{;jN$c5@@MTIBi~-nrjw=#+ww~0G~SP< zakKCd4@Oakl3R`>v*-L2jD6AXD{3@mjrzqiba0I%1)RWTT1R)RRqfO7D0@bcy=Wh< zwkS2|Ozr&c&Qi!Q1YXq6dmq*fIO4`g7MQmo|Q7x{a6|KEWuM$ zkk3mha>K-|OdH{bBiqKY5xplop&b=o*dxiypVkAb+?en}A0szEFNx_}A2OMiv9U3^ zo_(1i1o*U-#f3i~MH&agFegTN(a{zn{E6Vz=$~YF^UMS)B3+kR;u{&C^MNTyK0XuT z*`Lk)w9)r>#o|JA{(g1ohk>wrmAVxhQ5#40wV>)&lAPhwYFb)d=*|zCs8oS>1#PuV z#^~PERFDOf)X9=cW@cj}l$j#r7P=9fPhX34UQPeTW`eN0A$@WuKvu_y@$)K3=aw*@ z_Fp7kX2Xx7ahzJDG+!f|pWmTO+{VZkCFuXo!n~~CeoGjnLJi@eQ&0Wvhr6Ji-s&SP zX+l-T7-&U}%aY`F$C-B;wKHF?j*M!H??cAK^^nyxU39Nw-BrW{+24AiORx-$lpa`> z!dqg4WG+$sBpbaJgRqOb15cZnoeCj&RbXO0DdKPA_*L?o`II{vlLP24Z;8^VO4x>Wa6mk=A{M{9NjLCsP0HCC>q zllQNx3|hd+*Cz;vcdymai9qOL3Blb@CwIVImg*xU)I}7=A@?JL;a>k{Me4kmCCs5b zMjNmATei}b+dD(W_ciG1mselH%b6NA{-&czJWhDrY`?tynA(?euWMh-w_u% zTm<#aXSD`;NzWQqdGd&wfA13Tjz&TLwiPjcF`q`wQsvcW&EKuiAa*hfXdKP znjV=zLVfpI_>IfyY*(DfO}I$DH)^yI`;5>+p*PoRXR91iNSnvAp5#3_98O0K8tJ_^ z@U_Q-|G-N!GlB2m$~IUzVHiL59^!aYBgO@0y)ByJb5JF^6?w-YhnoQK>3eccKrsO zeL?|`>x>tlXeO}@bFshzH6kv%dh?UdKjDWy<<-%^G>dtPopA127fSf?acBLa>*)vs z&r24+1k|S2XKw7=n?Z?uB)=~y!bP}4YjN z3t}j{UgJx@pl`1heb)7cWtP}#ZN+|KIt;@E zp*>P&y#|+s0KNgBjf03~FATjzLR$zxVlk@GI_lDUf!>BLZCj#Vql1;yg<_m2DoqK&BOmqoj?}XavT1zz1#OISCf_^i?w@O5nKQ@T`B&)jQDDF%@eF+!Y zG8@>cV}nR5>XcR{!g0+p1d;9N6t~rtrGyq2)<9>Yl2;s}QPS&YhuK9!ttIzf~6+g?j@E&^#&yl1eUk2AH z_t`4TZ}`(+q~4T#bfzxR_{%W;3gm5PDJ@QLghy_&?UNclyO(7B>&kib$CI1In#Rh_ zf)m(+^JCNsYPbj*m14W2M(OUmI(|M98A@E=53VfCYXkKTRO`2XudMO3i?rhL{Sjwy zi}HZl<<*3Mys{W><5M9;aQmnVqQcHFr-fV70o{u-+{nm~LlS%LdLuMH@2jae~p&3!oFHvAk>pc=rsDWj83ZfxY)7{@bW2<=~36ot=(fSj45a9Jl1r`=RyrD4S z9;adDWkU;!2G49S)LP+FA>$)~XL5v?$-x6kJBr~%_}1I4fw*4KqUfFBv09>QxcH|K z@Nw(rS}nxKC!r7`_&?ghGB1?u!+HJdrV`nBBK*|n4i%VL&DtNeLCRrulA0C_^+o+& zDiqiW0`LXKb`u|JJ^zf?t2;_+BI~t8&)F%-qx~5sUrHO4f=o&H(>zaaA8LsOni(h3 zO>-1K>@zDcUP1D1;EH#cfqc-zU_{~o!zFP(lUoPq&1E__Js2*KD~D%E@hOjV$AE^> zgI&70ZuVX%bWa3mB(`A=!eUG*P<_N}&WID?XNx31V}^iy?xL{}FrX)CwbF?3JjaLW zLbD2B_21-%W$~;rgePGqXkdd)BnrkOf#XJ&=IBj)Ju*Dw>=P4fDt05B+d7~GY<$IU zL*rm@GOIKYolqzUa+wH%I86^mJv9ONtGH;A590A|KWG3kJR5|*OsF^Px@B@GZbhDs zG6E|mq;@U?0Rl<^EyL@4#sr~Vg1=m01d?%JBjkdy!`VW+t;FAvdR;__j6YT`-fCu? zw|8Z~Ci4!DG(Gql6c$J7tY6EXeLxZ z3my;Vk_XT{Pjvaw^uJGTS#WlUAeJQ(u`IFr7titk4}t@o3#vj5?}oWkja|qBGZ_(x zkXTHf3WOUyf22<8_W!!0iM`1(*?Dt-c8Wnv8BT?m%XPMNIS3tY975LV_Yb6scqD7s z`B#xpCoG^|vHp^X6`_2AZyh%=jrF;Wix%#7g!2A*HWDp-liMN&$W3RA*r{u~aGK}6 z6f!5IXzOHPL8y=;{u}c9xFPa687lWbYdbMZPX=A_-a|>yB45Qg34ur5XmQ(Nw+Qtc zA6*Ut|M=!$Z9W09%4}vYV1TKRou_*U;Emd{;Flvx6burpyq3fNo-nSb5f2PkF1J}MGcr4U+ejJFGIB^{Nn(|6WUUPzjh5NwRi0r?N@K$e zgE~z0ivUG@EEX|=P;`-1s2wxJYQj$$o8k={j_|^~U|!wUxa>Xy*7{J7c)m%;;}_=Z zjvk(uGJsLl&wP73?#25#%$7nCWDm1m^AfeXM$f|zNsRRxJn@aes;=P$6|?o81Htv$ z5e~I%_rn{1Ps`aSUke@reb!fdjPfUPK3UwC|A@aEX4UArJVE&=pg?~|s92P!Dh8YPv0geHLtUzJ>qpOl1HaXN-|fBh>-l`3?) zK-JQ)$Byr3L|pPK2QUJ*D-i2i7LUu1V}Sy$iORKb>6 zCvrTnp3+9vKRg>&#R8va&CMS5bq*nDzP9~4SCmq3H?8pa%tyO)u8Mw!v5TWgqnOU? zd_T#ylB?0XQS?_Tm!jpkhxBI0S@bQqK)YdG-f ztM`d^KPnURwG88R-M_~kWVV)0bS>X!vg*$3b{gKb;3ooR&bTRYX#iX-Vx_*i-L^`a z6o=OO+6lI-$IF{9_5E`?UYF%z=)4%l7;+kT-&D43GIL&`e)_!9#u?t>zM^Bm*KkNu zt0D27Aw;o@DwY|OhIeE9Bq ziuk8|18=J|CQptIhLfAV3hpSft`NEr$rXMZTefTtw(y)TLWih<6>ByQ5o1cx{_Icz{cSX zMi}VX_{p&DHxGq@lrQ$smf9S$6Uz)GlR2+NSQ1$|-CHD9*|Qk-zW-FID%IK?Q0DX|SK04J zYOCx%YTteL+lF=mc&^xpFFOO!ml_ma0iZ9lPr%v3ft?BSc9`;pTkrm;XuAcBCbbXU zzNC9BM@%luXO+c2y;D|iJrxV*gTYEsrFBp&m^k%;EmJl-9XuES}Qsj!C)e zxn}aX;VR4KAbka&d!qe?TRiBRA>FT>l_NBf!dZn$e%+ah3p%k;0K&+2NJ%+%qZtEWuZhGEtyqW*lwy zH%45yW+wmOL5J7ui83ZRTMQOSe&5f9bz+OXOXBZanTxK8#M!>%4V=$E3veI!9run5 z?VNZv><&KVR8B5C-qP|Day+tP_OhbCGX18@tXEopz1KJNWcp98(D6_y;m(8szgv7w znDU54r6~>wq8*BN|C%rRY^R_@eC&+L452uF{T)7&4|Byq0 zdrdQ4L!c)Bipt$PyDfd`k(`aexUW?c++?WIom9HpKT@{%i|Ov2{yg@uu}eq7vKaa4 zoxhXi1re7`^U)IpCl&e*c>=i1$Rdu#!=LiNhq1x^a;E$01BFhVc&Bz}KZPu2!Fvxq zkd%z)ylDikV~*?In-}0D{S!cK}%g0?3kA!HHybprdr6OCg z;Ao4cL7b-tg|J9R)M@W*grC9tzx|B=$so_YI6okUd$Z5nb_>FN*M5uRAzZ?M3`sTM zEc`D+yf2)`{GXSU9Vb$WI7{)XLxC`ot7BxzG?Q%cdjt01B(DD~ZH)u8vmOtjoeJ{e zwL0?uC2fK4HitugXA0RB&S2oq`kQ6(l1Ep7>T=lj=JZbMk&(`OgAk=8+o(Tvi&(%9 z1MeRJexU9_Ksl)hUMi2TH-9~J6gR*PA5P$(Yrwge37nvIXe||FX1vI(E?K0rx&DNV z6s;b7$?|LDJY2g)pZvtGHjlp5#p55QI($6)ha``T`yReJ&I~pH!*9r7^&Is zsGQ^DEhZ1%T>wUbIjZHI4o1<6@MN2X|7TT=@T$dNsz^@%fS1CXiLi>iw7^s1zXEd_ zOld7KhZdv;{%*N!bbns$xF%);GL3~X4!_!USk#MS|2n(*icB;(uJs;|yk`>?RDDhn*)5RhIdIO1%mN{6hYgUC zQLVEai(M$;$C~G*&J2>wMCF96nDH&pWEVVr<)>E|_}?W08}5i0v9tGv1LtAKMOOX0 zd5)QZ`HKImwYQFndix$gVHjX28IY7329OdF5NQ~?M7pFw1%vJ$N;(ArNl6hU1f)|5 zr9?nN8tHB%^qujl_j`Y9y}#bOYt~)(`FzgVz0W@T>~oG0`*5*-|GtQrRQ8hBM%Bp2 zqiKKpm#~Ru|K2T)#%Ay(NYAoCd_-gvB6a^vhgdWlSjx&=c^=r+iL!K%eo7!JmrDK zH^>gf2cATv16XzYT&SMq;sLVr?4ZW@27@62xeXRBlK?Vi@S;~{%}o?Mw{`r^b`)#B zFQz4#U>5iG*T)83=msomItapdZme7wriw9u4Bk)d4iX49!1WyW}gb*!;-uOPq2 zw)p{V@W-$A%{=g2kakaCmVK<$8i+f5TC89C6dX^k436{9mkz??cbt=x9wMJ7rMZUM zY&A;ibYVxCI+vB4^+ph(e9MiM)Y=nvm_d7yILE}sCW9kmUrGT9EH;Cs)70zt z6VgZ@HLnz;4OKLs?M8~pPgXtD{{XHJxNbW>WXm0V?t3&@*l|_wRSFm%v-q7CZ>I9! zjacP1diy9MBtAD&RlyC(zxt4V8&yY7qN$WI-XV6f2M)S600-92n;JEFfP-+&{Kg^= zYQcpFU}H|aBBNs|f&baV1p$fxz0X1xk3azm;ti1z`8AA%++MQGg}vV@)-As559BKv zgrF~}-xLinXghM>7|(BtRiX|iJ|tZ2N8~*dvcC$Cg5RCG9Zt>$4HN)txSw+sNj<@G zD-HxJ9;|lXU@KYd%isnlHy?eMJn;wDTMd)?+9S6Mv;4?M=U+45C2Wl|41!03_3c=- z3{hSAmP|iU9;~=$&sM4Ij|JX80&6)}SKok@xuV#WS#uFpwdSpmgREdBo7Tvd+9>GljhQFbeX8Zh)U0Nk^iGx= z!o|I_$E@a}*a8?2wqi%{Le~Efip&8D#dQ$02h>$Zlh>XkzW(R=mOs}smk|^9B905= z>thwVm&h$|5=n+V0js)1NJ+5s-s)t=Zl$GhpvFN!Z_<*A|JJ)OcmYD`~Se^S;2{JP* zcZwp(+922*}G)1q6>F&oW6;Wv(pS4q)=}4}8 ztuFn#36|Q83Eb2zLX>EbfmuGg;j4RZzuG;yVLPr=Z8u5b9(J!XhCz&Lx&`l={NRdh zZp+bKYZaA<)$XstOMMx8M$mijiJbR3O-HAm%i^aBSjR-jtyQge7rLE@oB!W6;i^Gn zdh71OuZK!|?`gH_Rg{%MVsn16pFk`KrHA3`!9!LJGFar3Cr@~}E?-kP+U{u$!pB{a zVDJ?6+|9e0a!vX%sXCFy@=Lv3*hG_Wy-GW>(Xhe8@gSXV)w)tQl78O0L&8JhdEgKi zG@%eC?t4;6!Koz|jl+js9^~>$Q+UPQ*Ym-2lkdt2YMjiQi@D{RVi;>4^MRjAZX>*k zw{bt=lJ?hZ`8RxmSt%(ToiPkgz(LP1D%YnPy(f``5YP3|@>O3s#qK2TrmY&E0 zgR+3(ccc7zl+>LolB>31)-8|Jb>>)5(ok)FKz;A;Wr+L>^g3>L8!jJ3{X=J-P;y zw!SlKYn*Gqe`tGV{B=Xk!1H45=m;z;kQ@1|Lunp(>DN6d7x*b}`I3N!ShVGMGVD54 zg2xHD4>_d$H^NO1O#Td%$etiXW?B_l={ZAx?T4! zLp0CKC*Iwo(8SaTkjY%PpSwy!w%omSGD-(S*(0y9h@F!KbTlRfgthdn3+{<`IsEJ; zF@RXM@z8J28o_yW+4lc1XVKygt(vL`i4S{ zSjfYD{W3LWb769oq?F}hPDs}!V~IWMQCT#26mY2B1ZbKltbAAHpMkj!15cWb%O?=BG& zHbt<`s+8vTS{Htrisjb5S-NzVcyv3IpB#vdO02VcTR}6>N@+WYlI|#)Bwk9VIcM~p z0S&|=w9(#cPbvo5n#l(v^+oZ?Ar2dv1us!kFI_eMq}kbn3zc7Pj*t7_AR*C|@3ut<p3^_>=b2T8r?7FUddX&t?VIU&{?wmhkuAgtjqGbj`&!hRs=Sv1%RA%DZhG zRco_?72fb=2pOz}Hufzjk111PrN8jw?;`aZ1S|b}k;e=K9v1;u-1c=&eBEdbVHUw$ z20Hx@979-C;gg?3a6Fhag~SVw_P?(>gX*ePdJ$ijP}+Euy_NKxY%R*u^M(zko@EZY zJSjeXm|Xuo@!K60912q2pg74jpDvi>1m!}K)N=Bes-Js0>U5%^SDr}ApOBkB0xBc7 z>U`-y7=9#-r$qhHgU-y1VYxJ;sYAMQ)Y+$h=M1QJPI}aO`%#qQ`xz;&_&4g;Y{*pLQei;0(bAyH)J)r6FdvhyvVj zDmM?(^XxD=>N^NR0yQNoZPj)#b;#@WYo4JT7H((*&Z;thiIe&UZt zuO0AQdr#{LZ?>5_G|%C{(^Q%#6G@@FFl_hr?S}ktw*vEhiqNfwy_g8E@8nU!0;Fw9 zLXFk%wqB25;wDn**hEQWM%{NS_RIsp3m4#>U$8c~^LF^IUWo0m9?t}&ZU|Y^ALGR= zeKFzC2a3#s>0kwZoTZD(>!0QKtJ*Ek6?@69AROi<2*w)xEAlo~DbIeqAG?@PC#7p> zdDeL2b&q3w-Th?77l+PC{7yN`u3AM7Y~dehS@=XO^FBu>GcG`}GP8(Y>psGxdV#yp&2T0P*=j_sNhRoyN8f#$ zP1aW}14~D>%2$isK8y!kXkTJbLL?qxi^16o9|=GT!cl3xk&BoWoj9x010Nvv`aX%WU@VcafE z*rp+ZkU2dEMSD;)o6(1%F4yP?YSG}?LX*pKoAAaU_ukcbGq15jS**j4r`C5~tHLj}n`_mx7KFcBfb!1I z*j%Jfj4~2*cn|A?5x4JLqq-F@`vheGChL!J1@M^zmRZo1_PY^xTr-(21y4)lpB8aV z**t^?!2{vJHlyq*8obi^;Tc0wp`6y&?bC~@!7O61zb$C{-LP>-P>e;W|HnQ zpwf561Ne5_t=R8`p`u_mbj!)sVDW*t!6ken_q8uP-Sd}D_t#&6ncb>F61XG|GwG`k z*DGT<7S#|N{n6tS`>V7)5=xK48g7~_ba!Xk39PhV;eq?C_t|B=!i?mfCc$8~Qi@1hcAQ?@)mUV4m?5M1HW%^@HIkA;)7cg=x(w4wf`e zXq07_hqbewLYESB)vuh<5r??sbw!RQ^tN<{70BYG+`<}Ye$N*E(u~4K+`u-1=cSKY zmd#~`oR=OSPw*!x+rxXw8OSI>6;fecnx5hZJW|H>CPI?t&MGtipXb#%q1=-_5d|C5 z&1Mcvuk32>JsNtU$yHZzfAI3kSViHf_tB(#R!<7wJ8QX591zEL`c1YDK__9n#iGJY zry~LTDe?Q@j>4K`J)KzU2V`MlPwHJ(kTp)5;8HMtuYH@ND#w~HBqOlf1EAa>yN?f~ zmTt136YYyXydGliw~1CcO1iNSDt~u%#LPxG#cS#*-|oPn{t&mYioZD3EEHxn-O;J)n}r#ddyr zr0+aLa>|^1#Sn?fU(gH3xw+4Q^v|nJNrkKvaasSY!KOB!!kei%>p@|iH8n@0U37kJ zChxY1FqsD)rAB090k}bP;DRzMm`Lbm~0iCpy$h3zpGIoZ20wlC5pW zOpr&)9Qq~cUe%y@`3;zBig;{iUm_*(1;Dk=O}_?A%U-j*`6?I0$R>mo9Eciknx8u@ zf-c+CG`UR1p(BOrObhxGvcz`V*qdHo^l?te1CHxwN$s<3QQDB|F3Z9Aq`((Yt4Kf~ucmm9WauYz*d zr&mo@DW?HnACV!@bU83YWq4#pRt2Ju`MM~V}G8>bSTi#(ecvL;|7c!_Ia(e+0^f3 zg`HC~Cs_Y$>nun^Xim#g4ARtIZ^BArzRo;x=6hj4AZ)x}@^n3?JpNuNLf(sB27krL zp2S<4d4HDOzBdilb0vf5#`br?5#uNKvq04Ta2J5n*=k*skEG&kx_wML@=EAAp2Y~b zc_p%AW4JgOu}k8(S=<^5?*`?kbFc0FJx}Rd^6WwC8JaK&ct+mh>Hp$~JZo9lnqKVe z!BY{@lcny?Fha@3ImVG_RwEr&`0zVnt;^#^_mFT+89Ad*+wU;*=R{DN|KZbf*-4uw za6KX=+4aK^dzr2)rt6|zUk`#PG-<+!&dfs)z?eG0#YE~LS2w&wyCEbH(ZXldp#(}l z7XTL@(91En0?(CtX(ZXC49A=GJcB7mDLg#7PriV8^MLl$(fi+kvcC@9`l6N&rx)wJeu<0|bxPN~Gcw9PIx7W%8;sUv`{EeE zmGRikG)3&Qyf>NTe;TmQ1a`fqda}$!w(51TTEtg1X|M$@f87-=Xl`f>yuKs*&n70! zNCQVtPOGR!&yG^B|Fr5(!8#;ZoxfAymT~Do<{Fr{__`fiT-bp;M-N$)Teef6@>=4w zWCu0HtjxmRNQWU9&OmK^&FKf5=B(z^-ZM^O>0ta2=or`&!Vd8rOBy?iv+R&m;JHI~ zAX`Zs1?Ozsc>6UG-BKg^kw6*``*E(l_!8c1;i;??JTB}D^Fd_SMXlAaacSc3d-OCc z!^Gvd&l^D+EGe^nX;grqKK_>c-Gex0S)Gs@mwX-%u^-+;4wH~=s%5V=3#NvnV4N_E z>sAz)`(7UqN#ASxJTiUjTA)-bn*k_cKKZQ5TN{hyKeVd+TH~)P@D-%(>Xxm*vFRIno1F6!Ra7C`{kw?{QBjgAm&ZfQfnE(az~RD9 zxZcJ4hJGO9mGCi%yI8{K_NWCZrB-)lQo9246V19EOp?ixtan-|TgY1K$MO8``-|#I zO+NP(8CFER#&NNiw$2cXaK~UopHkPQ+*C>~9SxZaByDqG^1gbcv?qhevB6zY>wnBK z|3qD~NDeQ;<;?Sfb3j+%cAz=GLXAdJG@fQm7yIYUDXone0lSHs$V1Xg8{Iddmtv#& zB-1p#q$*sTKtVGunb~@>+#VYQlOH@15Z$#oBMq{?{#joNJ~x^irj%t`8hU|2g&k6^ zK43NlDk6Wdr!s(;3MvD*!1UtAnCqJ263TR`;wq%ZZ*%ydkuuVTDiE-nfxu_^d8p3a z0;&K7?0lhhmT2HxEzOt@Kd&@Cs7t}gVrhHqd|sx^w4%!(AE?pR#ADxk9CVJ!ude9H zH6Us$Cwq)EO=73zAQI~e>_ zJOW+s^-IS+)SO%6y#^&&@6VEIRv8Scsy+|eX3n`cb^9LD;oW1BO)Kns-?-wJSmd zax~Z!0qd$otK0^-}0N$p75aFi94lv5!Cf~z}EYTRi5F?qCY zuOpB|u150vw~NC}!AaF`K{3C}z?FFcT6y<|gN5!A)MBWLjg_du)msxG zMfsO-5+s#wod;gLb{N6Btn7OdPJJ*v4JJscg^z>2YB(?{LN{2_JO{A?w+VAVIaFY5nc?8Ioi#1qsyGqLYquw_Q zk=5Mmy;NjaQE>9K90t;MVdrsSjJX*i&K-@UgZg}g;K-ysN+>P3OSjdR3HMHXqMp5f(K93kcajp7KSZ z$CwNyNVYEuY((ILx@-N~gD*ytWV|qD3d5Oh0m7$ao(}iITL3e{m~))Q4uS!@8^e+tMK6IgTHe=$|3#n#e28lF@O%_<(G=AA6`H zQS65-pZDP-wnRH0b#R_8B=4@}WuXT$bU|ImvaTCp(HG4WpS3tSe6#Ay(z#`9>KqH2oD<_6jG zEnHC9ak=M*G6Di)?NN){;qKg{Nr4}K^zi9H*Ws|%nvBnW9QYK~nTco*x5==6M`}Vr zyzIi<6w4GR{F5}Pyl!Q0J<7XZ{It!``^Bdr#n;PQvgzjZJU0e@g1rDkKLq>lHHeLl zV2^aT^H+3Fe}AqHlTP0Ym5p?jeMS>PdLl076GOorV>l4c>GK$Z@6Z6|=|jazWU_Is zl2-4WmDHzP2Gy`7LPPnIOHArt!mqjI&k!q7;Wa2dwjnoy6(UwZo z0ms^}i;Lehx<2w@YF9i-NsId7_gss?Te<2yOv`F&R6VSJe@bpXH7xUCyYN+Hm9UnQ zbC7zxY2PcFcBU!X-gi-8tLHQ6c;7e_^kNGS!Zl&_1#Q&*hFcMfrSR5@^1>DG7=M;` zk~hCLzkM*nuDX?@_=UqM3wwsl!D@96$fK;J|#N(ck=6&xLi<3O}1lZ2Pb+LY(k&<%KVbopM&Ug)6^7))>h6!wRDMiiut+fIPa}S(E~dTStR;nU-V&SuW?abF^ei5`t?TJBlBUOjmjYFjy8GzX`bvS29lE$bA}<@Mh#ooW((M>L-@^?a-E# zg`+O_P^qMNHANN63ORq%SpiH19Go1?S(#fu-coM)0nQlvSlS1@LvgL4>GMEKjy|RK z0P5FVxGVy!`s;oZxk_N5gfb)PDFB3li95<>$B;aX z9OC$7{?5Rne8Z(ar2i`S!fm}roJ8Kdm0g4vR6+5F3xImd3_HDf9)`e;(z!NXY)h)t z_vkx)XUi(VJk|>Sl&aYN(Q(cE6?pkLGd)<}236aip2sXzW~ibH1B)r_F5^6GTr-AK z^^4zEQv?|R0_`@c(|~tR&`&@*LUimjy`F{Oy?Si&%39%`gH2>(^ZIEx|K3_>zEPDO z|Ld>UBVW&M0|wjzb%)DxrOtgZmo+?Z-c_E=`uNg3Qa_-Cd=ZQYVu7H;AWVm&-_z>^ z2#h~3kqhpm9_3HYKX5%gKclVPf75NE?`v|uiqnFrdGBlOaLUh{C+zE1&L~U{AsdFN zW5g#@8jD8)D^Q9*TUbc#$TGU&Y%JRBHg?7HU~I~c?%AY}#_e{}cG&w zl+SB2ce@%X7sl?JDV2z~PL?=+9`2uFs#f_fwrY68%nWBO*HVwfn5{hD($<=Z1nf}= zv%};oHq82Bpr6S;AwR9|VOy)yGH3aU8jo0oZ?GAqL5nfxDy;kA=ZI5z` z;Js1qTi=CHTeA;pcZ<6g^zRUTOoOKt-a6w_6T1LgJ=bW;vnK_6dD-qBssXu0V#y;$ z@Cby%TH1Pv@`u0aX;sLvdzOt;sNVBiZn>)OQW_{O<^06hEHCftW0vOi_+izlgr_F> z-O0t&oMfZf!#MnV3(QXTS%qw%h@UG*$Wf<(e)PO?$ZmZ2;5*HS458*nra#Niwm0;h zPKNlt-}ymNG}ut@wN(8?aoE5{f+>qb*UG5-YbkM(Ze*d#)Y*vAH2ZX-Q}sxBFb>`@ zWgC$fZ(L1;ibOZPE{_U9Ad`lh7k^HOmn52?DlS?XVG zC2@GylSdqwK=|Jp3K@#;$+O`ZxzS$XR4w4d9=qE@^v3obSL(5jd+Hk(|4&7WuXfX# z7ie3lx5)aqltFCE3MU4pV*X->fjmqD;sy_ZdzigSXUFMm;7&I7Dw;+*6suM;N1qK9 zKQs@%v$c9w!WnK!bx#^az|-eTEkN6^0u?dFW1T@@U`lOGGOJ4sDRnef$me^w z%9eLcF};03v7`SG92r7hV`~-Ba6M;Fe(KT&c}Vm6Pt6PKV^?jxiS?&P;^o3n^IP$j znforhV|5n!UL~$a&p$Wpu{_nitPK@i=4C2Wf!qL=Wg}boiIp5ii7mEHAnx`JEk03D zNvvkdRXw5iRbqHjOsIRC(Y?59s?XNUlog^q;-B}qR-Khca|?AHS!Mh}>3-`GVjFSN z5Z+SJoDqljnn}l!Z}DZ|E|~Jy5#DM_Tw;32!@~YLE}>eFgmRbobRiR^TIQ?)>b3ka zNlDH)bP#MbU({pgmE!~TY4kvaaZ+=2cYg`TRLygSZ*S|LDUpseHMw>#8M8u|8MDGl zxni4Zl2Pb^HRuu)sV44s?EBF!FM-L^tt9cavA|@Lluv&RyTeh84((LMV~X0M^nIp-rw!W% zbRuVa>Mu$2g68Wat|ps$rLtXl?CX)dF7hLKJB&tk8_@0`j;#P;XokXC?nBpItT4NP z*_yM&)4S9B3;+L8U@WGmI_&1nYXatC>3hNln81?e-vm*Jqw zEMwWVZ)^ZMSJ>ITe=wN8XKS^P$$w7Y+xGDT@2Ou-&)JFNir(wAn`<|ERkVd~fRZ*@ zjC&p0Nq_51aP!pXnTvmMy$tstgxB(O|8%bk3+@ecv#Pvnyp)e?5!y?Ed10$ab7y#pfYYF)M7ChLn z9Pbd5#@(>joH4h7q4EOohZqnaHWGT*(j_qDqNo6i?_o2Vu?5&5HSXVJ!>r|qieCy< zsz{Z^3YD36uqg=Wo&8`6c-Vs}B4t!Pl!K6|nI8>ILYTuUa5$m8j`>vR@5aL|Menro zM~B;cR#F-PDsgB6K&u+M>#7psHY{&bJ!zb`<73fYNxiLSzVXwEm!*%p(5 zCBz(zCd3>h`Eku2{UH0K*s6hb(iy1^2s6O!785^4`1>6`4yxH5z9y3pD{}|-YkfF!WL=eZgRCW%>92iN=P?Qd zc4a)o>=%)Ra8QM(Q54!ywtf%5dDz5#m*@*?l|R9Z#07T6dh*9I>#V z49arSI`wyK*|4mf-W#l4iMfT@KjR0G-oHq}#DYx@SN&$S<&RVWm^gO<~39m5_? zG#jWqJP0HOIbf zp1XCPbIkJG4wCE7Y<8C(!=XgbOjbGB_X#TTVvA{Oum}Oa@43s-O~>?`#k=ZqAvD3q zMr8|zu1BSIlP_JLd^`LwaZ0`LFl~?pn;o7Fa|uiqQ6z`)VNZxfb!BT3Bh`$%DQRD6 z)fk2;3N@cbpC;D?PhW8#r)EK&Sxhr+{S?d+!fZJCy+uldi$IPI+ujoHjaxi1dh-F* zR$kww%7^c0{U7=}5j6X%PT(?8_`4lYZGhPAS`dh@X(`6=fhCASlrGL^uY9BYu<9c{ zS&5KKEL*Pp5nbi|frg*d>G_LkaRh zXWNECR-nvHq4Rg)3|G8u)i@KHeUy&KEd8ga=8Y1UWrs*R8))c)&5ZMf+0G0$y4x{P zITXm~);9l=666MRHm=3T7>Xk@fy@GF8lE%)g+Z+@kSkBK5T$L~TxTjA zs_-^xmU5mA#;m}pY9~ugW%uvTE@8Q(BQXu3nCfMOvCpslZ@&x$ngh6M?s6Po0WkRe3qS)u zgBKi03N|ueoCC)7xBy{CU66930?7UT!NDHl7PP~T#h-S-fGz;$49qI_fm&dU8Df4A z4BO#XB|$m+pQZz#zWbW!S(oAO-Z21BKoN1;+Czay{oNEH3eZppWfCF!7XS=YR-2=0 zj<5Ye3@`&9ps~EoVlDkI0Bqn|iDA@Cm;a?{8MEn&!SCCZzlbRzF#EEwXXoDiMT`~B zfH9+YvFW(~0{H*Jv}38oz>8nR*j-;^f&Y}{Z^@O&m^*Za<($9tMHHL*T*3 zZBuQP=l36cIc}899>0i3Kk=&cQL&RP<$-sYB+pq67DM5$jd^~cA!b+E|IpTjp^f%G zw6$P%iGqUl|D}x<(8ls#+K%Oc>jj(l{zoB@7=^g=ABDhf29h`l`Hw=}!6*dre-vVd z8pL$X|5XS~U=;sfg*XEWu}u9Rg^0%}1pj{&0&NDcJ^!yl@M9F>@qZLz8%(yc&Hk$p zct9b#{;LrGUzqlTbS9l)!2yYK{a+c9qmK_b>|F35h?%=kgkNLNbD9erx?m|2^$-}tqGt=u6hvD{cehC z@d8M{UJ@`Mh9Jxt!P~_h+$-SA-!uh;0+QRIzaESbpw8<0E(ihweuHkw1&t*l=rRHT zinIW0UT2QSIDbf*X~Zyaq?(2nhDQGYe;-&!G5$pwg(3hA*k}e|;B731v6`J$qkkFl z1yK1=BCFLBV6q2C9}C9vniKp>lQ>`q?`6;w3s!RrFw@oT1;HP)CV^ezLFbz(8K`cI$vg0q9<~6!`m`HW&Zj#u_qMbNU1d*C9YbFl_f7+M&7ehau<# zfb{Kt>oOVuSRB0VohLE?U;ZJB6p$QA@asVd&|B9Gh6jOv6cdeB1cLRV5E2FIv&|2% zHeJ*p#{Vm0Z_L|Ldp>@E%Q^UawVy`fFVbiR`fuZFx*1XOxS z2DJlB7J(W*WHf6b|Cc5Y3`1_hF%KLv05jLtH7@>viv<N`0I(;J=(A4h zGVtXedt(F)p}zR*fickAHBqr4=pV(z!v1AL|F5n~gkYl4HwbxpGFZK&USm5`w%k8q z7etrx`E|qB4RN!)>+(IfvU|pyYA2~K{jz-tjHs2VZT~tjG@1ch7czQfj=GI{5crQ4 z6~LO;-*`p||FYE+atJw2rH;@%Z6#U>zcR+dSK{sNm#aJI^*L6*k36`P%@~gbD91XW z%~JGVhND9X3^cK1kG(t+vc&*57C_HQEb>AB@-6NLHaCGeY`XG1oEz|?2MB!ROfoR! z?-!;jErbx7wh>i!rpLGtNhR8&76kl= zd`lFj2cF~{e!zbMK>xE(oYx5c@W15>2xT8{ zSH0H>hzEFG1sdpzed*=@kZB5yqG*9Pd3jQ90P{-;065S#VA1^*Fsda6O$KnF)`kQA zegznK)ray){tJP8I}Zcl8;HgLgcVk-owQr#HS~W_1U4hzauGv>_LQ6y_(A~~yWlv^ zGSk0bFv_6Rv599Ri|~OXQ3Z_l{qU8B`wtt?Yy`{9Xl5TC5lZvxfD3fsgGqGg%fEa^ z%y2@uFpMm0ckwn)v(vDeFuOhKRgw z3k(D#u#pH<4((qe;oB70`k+045cCTI#tpp63^4iI0|G!;Ap?v|QNcVzL3bhz|9Cp^ zfQoG<3IpJUvjuRFXeR*RV|U&aZMDRH7bAHkcZzF9=!0`Zvu zxSQm1zW>7g6yLH_+`00ZH#zJlIR5;jW1Zts2aeeuDgU|b&^lyb@aPfVWOr)xRo$c9 zb&<@=&D3Y#`p~rxzoPY86}aUH#k3;Kdo(X2HcYoB5q+ zt>p(~Cf@I|`krO&hWYbKX`B40L2V`^vgO)t*ab}Fb9B#(FwrbcAK87Ll(HWfuBTqu z+B|a&x@scD)-1UDakn}y(mfgLkvUqheyJH?oS#>=Pyo?g*nL|p2D5zT2 z)EiT8LKWY}u$nUc1NPo!0QTNi%ZFKqNYVnOV$<=*sLzBYS_IT zk@FgKl2i=Tr>8~6XxFjvE*!L2(M78jU-Bcxcz;IBaOC)H8Mv)~2CEh$m_udt-sise zKb?!r8icB@hKWas!`KBH?OzBTcC8Kch}>VYP2-3l?Y+O*)qIV?0WL{?O82o?yrG<09bVN zA=b%XHk1)#$L!uP`y}qDUCfw7ecUrXwJ#bz0%>-xNq*IlW?{QrC9M$jk3De!&~#yFkR@VSCSZE7Hj8n5lWbp~4bkhm~P1y0-YRl0(Zbwm5)r7;Oizc9o5M z{MU6g1fW!A#af9Bb3HLS)#k$2VWPAaHl}`bOZ)e(&{1sC-%*FIes)x08 z%(2XI-KMcOc8?gU(Ok?)__0yE6jVUg(mmMe&fgHRsE!o3q>+9f*~L)&nzj7gXJ z^Gh>7s!p_Z9)67(`z4GS0zgb=c9i7bc2^Y5=fk6&tgRo}<$rNKgrvBmFK{qqzs0Ep z@h%qR0)S)r;NP(lMF^qxuT}DU^6`^e`8$Ca0WB$sN~<`hh}_tiSaAj1EUp(#7b{_y zrkt3jD*tIJ$nx-Gg-`dw!z=D?3YzMOU6h!plWU|nj)&QM$peOLd5n61i4FZr>HRn2I5aE$qS6W#0NMu_VmFci`%lb+1^GEW zb*|{DJMBpCUmT9UrBV1c4@*ek5uOSUkN>r*p%&EO$Gd@d3l4E!6lkaTq~_c=lF6sF z)9zlpp;qQ_yGVN{FN1~Pwx*}nwmE}8gzA`kX>(~jx#imN+)?+!)M*1_OnSr7-uzDO z`HpB-|G7^SwMOTqklq!xcJ@ev%?X%&i1T-6^HanJ^(mGgR}-HYC_g{e#w3 z2n>P7g1}O4wZzZI4ILDbe=f>mB^k4+J4`EYy`T12d3Jyyfjku%!x2hbk4hs$wXlMg zPlzdc<*=|pM_AbXgf9%Iv-8Y-pA_e{(y`__`}gZ9t<<4rdW89Pd#5~ z1mDII!2Ki?R9pW6iZH(%u+OuSP$L>|XoiE=D{@-@=!`#njm{cH^nx54x{g2{SH0sH zRQv@83V)%E5Ed~QB2(-+`J%jVNVlsp6(91ob5)U%A>H}Y#)38|F+pTQVa*Nre*ky~ zoF(|IiWXlNrMf z1R6C7At=7cYNh&^ctcW`@q(Gg5zfS{TY%7R!H4=R-lxaXI|-7PCw~J)9WO8d@_ym@ zl}I>QypZH43i5T*(wme8D?;^1h3*WU*+?!WV&3;KM1MuAaffm(YX(8$nMhaJHKV0osGyj%eFKMmT zmyq%)I>p zI!3?p5;SzP_cyYa{p!ZRX3@u0TW-xH;=dV{C(g*M%xjz2z#yXKway*RDD}G4c5<&3 zZ-vpT@c6CW*BO5Co$S4?+<-~Ek6*0cdgTy)1R6z01oyKQKXzgGhnG;f^x2WFJzw2z zU$=Fh-A@Q!Ky4VeXCX z+EgmKS_cvkoz_3#US?Jrs@V^S-R#r|wQtD(vm3+!S_-w7p zaJMgwSEX<*@b2Mf)b8fPKdZZ%I*vsvI^qSeW*<&ZCM>Q(J!YVUv%6&@vA)QW&Yv0-8)&$2w zzT!eAe&*A4%Kq*{68n$NL{ka&A7i@L*|(lbHSK1)G!|8}s;?J@%v2-@A7#DyIZt}G zclus85%*D7crM%S()}ZF`B%P^Z42+h%4ywNf92MYJXN0uYO~=~I-EYuJS^m;%Y@YU zva6ZTL5_uOwj~r^R)94-@@!tE6yqa+5@lyX6hh6ah(%mi;hy_PysGBalQd>_i8FT~|VHe?{D2l=*F##W0Wu z9`4z)-1s^bXNq&@Q)BFqxrFC>8Kd#JnDObm9{Z~8;v21^`wN|dnJZ!*l}$cg3dT&S zRm;BTW2>`c#YyhEhOhk>dBucEGSy=WhJ?mO>|EC-Ceh)gxh{Z>Scy$1C6wN%GG zu%KUb`^g}#@Z2O+AtXLubl-SWyQ@5CAdEZn$ zrPc&FPjXOSb-jYF+fU^TOw%n1H9yCGo{*I|y?mg}41pOKp|>Ay?Bu)uc8VIIDDBaW z?}>+vn?v3~-!@M#uT6h79sI2NukjRVVXAXIY6rUC#PpSS@DrwTLtZI zhMQ#BiCfK993T02^E1kKTY@}Bs}*ez+-h9u{FS}-FQitV$<{Wl_1-@2O*9$5>F~xa zPpe|Fm+pMhqIyYzy-)`Fhz4q~u_l$9IwDzSN0E zrY7Ee_NFgF4KI%iZc_F8$w^Tun~=qq^KY);j;}jLaz8ekzTx*~opeKls zzoE{(b;2a%a(FYuPbVR{+P*Q(-!zTWZtP8xU-QYi|9H7_$&lezgmI1I|M*IWS!FwU zpk1p}h_f%Y?-~A#Iu-%zfsbfw@8ku$tg!D!fkwCE1||gN9p5R>`!)Ow`+X^CCm`O+bS_+KISkNB)Vt&1Z3Bik z19bqjkuP8I56~P`+bZoezT=J30E1g^schx^L5)i>2p5bY*0GOr# z=6B|Tpg&s3guV26>7R(<=ZScmgdL~}aeSX(Efk}xvdZ6NvhsKjX2tPYM7q}Bqh{7 zd^3^FV6PLG-v6o;|25|&Y^WRvQE-3r0gVz2SP)C@4jy4&7LzJ=_V;Z(+ulK=7HXZ8 zJ?cYWG*?`~;W&D;^Vk6( zCW;te@HDRucyo~Yn(;*d5>OTJ48#yqu-|5fn&HRj*~zYT)pyG7tjV8VkIo*&zdEz2 zYxfX2a{wC3!Js^0PAfcQs2y4ASx|Gpp9=~1nB*jH2=_Vie1cX|_({<4` zIKN>$x&p68-qKsY{k;F|C9V05mItHV+4sDLqe=-|%6%>Gdamz2rhKoBX^DdiYbFVv z=le}nStwfchmtK?S3?VhWj7P2Puc`L;R&Ap56K@SSE4(COAdGpbcAlP1JfKMJad+S zZk)1lXrw)Q?FjNB)ztNA=}Fp*k(9tDP^f+wh*#%TivE1e7qE(*qE@ylR5RSX!*=|o zKk8vpwEz|tuG6nt01#I@11|TEY4QISkikt9?o5il)xH3FxSdZ)pK)dbUvE{QX*J?P z^q1zHyG0f4KSHy`U@13&b-cmOt^EV30qsm}Gn{~J()pogYHtj-c50zHee_bmNB3Bl zx?Ys-XVYg06kfv$tVHdvm0UuU`7AkUGS{5B)Ve%kc+n3Db=jOoC%oEI0@1kd+am+{ z^5gHvD~h!32hkO`@K*?c1G)_$ug>P~{DGW@@>6blksCL3>(lBbx5112t0MxoLPW3b zd5`#s>)-HutK_Z$FuB`jfo-91fz%ZfI0<5cZusvW&@H-z!cO!Fb&|Tg^0to;9JX*j zH?PU+8@?1_?3dUsXxJIJu8D16!Wqvw7v_|byHg2b{r@{IY$u|h;odrSml?iiu*#7K ze6@-PDzWh8^~#Bc1bV|%ArrH?S0x~LR5>|c={dY4%B2&71(5=y%fk6zeoS!0nZ&&g zotb-*Ec5(?(ICXUxCdICI#qSLs24H?T%y-a#7^>0!Gt({IJ|Lp>>ur=u{ zixxf&%a#$gtSaJK3Ya`_(+@E{m``8PeXh@Ae@~WMAez-yzGVu?+&fmPQSo=6K}uxI z7^v$Cg5+;{wj!0c$zL~-*+nFuJl5y2oqB!#EvZ3!SWd=Xo1SMp7z=Vh1_lqsaPQx7 z5>`Ml#pp@9p6?Bh_7X}#6(_veG|?jg9|eQnRX?3Krjo-kS6(uD=muGxzF)0qAQMtB z&WFZggwO$$HQKRI?~gGQp~hDDKlJre9oTNy1-c4S3^^^+RYt$@vRT3{Zk822*n6P` zW_M2DlvGBy;pslM-aeIF+1vwrZ~&$yaE;Tsw$B|vXDx$(K6N5($-hnqH(*uTpqDr~ ztI5S!<3JU6E~~m$nyBsk;O8s1_``!b3OSr}Z&Syy%G+;^jo+#_m+l&;Qaqg1GYL_2 zUO27}^`me(*sa|1815-KVcy;yN21ZgK!fz?G*5zld(;9-4pB{3E@&~+!Rg!cuj1p> zuHu>+q1i86iv5-_5#1{=Kvb=Eedhf`ZZMj#wNK-fXkOpNtHoCaPYe7?ZQmN4r)9;O z4X4)sX!@bsTx@7U=|oWX)I(w!3W3#t>7^@nq|sk_|I*a-d~phQ3-)MYi87~l_j;IEc+@Yp$q?zO^iMg0BNK^nci z2BE6{9RdA8G({U&exGCR@c#jN73h&k%iJG5`UAk35boD2Vpj>qum1qW1@RS;!9>KL pZh!k#%v?pJGg|MTdDTD60-yZ<#q=Mf6w~=J&m3Qv|L@}b{{vp#PXGV_ literal 0 HcmV?d00001 diff --git a/site/graphics/fullarchitecture2.gliffy b/site/graphics/fullarchitecture2.gliffy new file mode 100755 index 000000000..602573102 --- /dev/null +++ b/site/graphics/fullarchitecture2.gliffy @@ -0,0 +1 @@ +{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":150,"y":426.1250001192093,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":58,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Example Architecture:\n

TorQ Processes In Purple

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":477.5,"y":388,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[62,16.00000023841858],[62,-50.62499988079071]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

On-Demand Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[627.5,-431.8750001192093],[513.5,-386]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0,"py":0.5}}},"linkMap":[]},{"x":793,"y":211.12499988079128,"rotation":0,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":130,"height":50,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":156,"uid":null,"width":126,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Client Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":923,"y":198.62499988079128,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Clients

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":333.5,"y":446,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[339.5,-169.34199153021825],[256,-146.1249998807907]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":1,"py":0.5}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[351.5,-228.34199153021825],[265.5,-221]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[345.5,-232.34199153021825],[263.5,-190]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[163,43.87500011920929]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Periodic Write

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":56,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":23,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Persistance Database (PDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":180,"endArrowRotation":180,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[-100,-3.5],[-143.5,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":1,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":91.05118074954362,"endArrowRotation":91.05118074954362,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2.5],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":110,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Log

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Ticker Plant

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":254.5,"y":60,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Feed Handler

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":533,"y":260.6249998807907,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[210,-144],[210,-57]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

Report Request

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":93,"px":0.5,"py":0}}},"linkMap":[]},{"x":693,"y":41.62499988079071,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

REPORT ENGINE

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":529.5,"y":189.6249998807907,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":624.5,"y":304.6250001192093,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Load Balanced Queries

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":737,"y":283.6249998807907,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":29,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-64,-38.033008588991066],[-156,-158]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}}},"linkMap":[]},{"x":341.5,"y":387.6249998807907,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[331.5,-142.03300858899107],[239.5,-246]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":1,"py":0.5}}},"linkMap":[]},{"x":673,"y":223.6249998807907,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Replicated Asynchronous GATEWAY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":489.5,"y":262.3750001192093,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated HDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":481,"y":104.12499988079071,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 \n

Replicated RDB

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":473.5,"y":242.3750001192093,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466,"y":79.12499988079071,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Real Time

Database

(RDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":693,"y":203.6249998807907,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

Asynchronous Gateway

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":458.5,"y":224.8750001192093,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

 

Historial

Database

(HDB)

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":544,"y":478.0000002384186,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[45.5,-36.5],[131,-36.5]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0,"py":0.5}}},"linkMap":[]},{"x":675,"y":391.5000002384186,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

File Drop

","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":489.5,"y":404.0000002384186,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DATA LOADER

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":157,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,-9],[170.5,-94.37500011920929]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0,"py":0.5}}},"linkMap":[]},{"x":799,"y":408.6250001192093,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":1.9999999999999998,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

DISCOVERY

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":913,"y":318.6250001192093,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":110.00000000000001,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.2,"y":0,"rotation":0,"id":121,"uid":null,"width":105.60000000000001,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

HOUSEKEEPING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":796,"y":318.6250001192093,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":103,"height":75,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.06,"y":0,"rotation":0,"id":119,"uid":null,"width":98.88,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

MONITORING

","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":1023,"height":492,"maxWidth":5000,"maxHeight":5000,"nodeIndex":159,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#1B1000"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture2.png b/site/graphics/fullarchitecture2.png new file mode 100755 index 0000000000000000000000000000000000000000..7b6ac8067aa5624e9439ad89a3f8014d2e1b618e GIT binary patch literal 113571 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 z%0DyK(f5=HkRX7D?^7z+H9DRI<#yi5t-Al< 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 h_^48KcLYDxK>|G_09Nm#wX8QF5=@& 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 CS7BQK literal 0 HcmV?d00001 diff --git a/site/graphics/html5frontend.jpg b/site/graphics/html5frontend.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a5370ac501dbaa6f0ab9f9b19223a975ab46a654 GIT binary patch literal 157632 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 z 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 DqQYb^ literal 0 HcmV?d00001 diff --git a/site/graphics/logo.pdf b/site/graphics/logo.pdf new file mode 100755 index 0000000000000000000000000000000000000000..f531e5b946b9206105546c5dd353e5b034876d9f GIT binary patch literal 212032 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 qBk+jIU1ZY6$W@ByZ z#O20I{4WI8-|;`o^u&b!f&i^}iPdG~35Dz&O$b@(Sm+pt`CthN33(iiO}P|>MgJrI zcg9O>4g}hB(bK!Sy3)Ba)7d$i(KB*#a?&#}(K9j8{zcF_x!VE_+-Pl`NdB$lzw`*3 zI2k!w*aI!>YzhC-YhY;S4CEyy{>RXNU;pvb#{Rzz**g7))n9(}ZU*-BjC2h2|34w1 zh3Wse_kT$J^W@)R|6=uTV?2LD!zJWsVgR&rRJOCT=KF_{g{_s7k%7I*KfHM8|8K7jumW7GIF8d2ow@lBv1#d6>F2ZTm?qLZ*}*#m$zS^r<-eVEHWgO zXz%hlmrs|9&Sj^WO2w0$&Slv~ZG?DE;}2jU^#(hA^mYtnE|CtqbRg|`zr2X9FlG3d zf&~*hD?Ybsy#qX+p!c}ma6-R0F2|e`7-zW9IPEyQ-YkXE+6@U z3YQG#v+OQ1{O0os;q2|T?#$sEQNPhT?)whz^m4r?E^1j`4Q-}hHLOzG9T9}OCK8G5 zpWl2sy4Uvk5CS(^pVO$j(+TAn+GA(nhFJT_I87a8DE=(4$MCbjPn^IP-{hKPYF*;> z@~hk)`BTb&XAdFUs>pmj678)GERu%@Zm>1N&&TB#`3BYz z?0w({AR0G2>kcy-0I0j;=K^i{YoF5|^w>qgY9VBAyB^FyIf5y2=%4Mn7M|K!UcL8y z#=`u~SwgZ3vN=MgW!W#k@S!$SQfOK;KS@orgsiSS{szmbu`wl4G`j1CBzo_QF+6?K ze(#ziXohM*iw0x$#M3jD>*l;l0{>p2pEe(#buY+BdoK%8X6WV^ygH+s{@XCtCjb*C zxVA9HTsUljN2hNv;r`*%BxNEkWq|{xg_Uxn-mLxg;>yzh@STwt*YXwx3K6T z2Zz=2^#KlpqguugC;P3VKF+ZB+Gw#&dpWEoj?@0f9jkjA>>8>sli9d77?a@3l>j80=_ zvm}Z2J`g?%HVj$V+|zBB_a{2$(5p&o$SLMXX6UXxZ778GqpUpi!%8R1fUQ+_e2XS4 z9nOK#VwORS!rJ;gEwFcrvU=I~C$cqLw$>yq7`mHe+1wqq|62@gmtEIL{zFI|nLzi% z+^1OY_rNo}z-#TLhsd+T$0$MOFtIJW?(sEG%izI%9BzF`xg3T`x0}Ix563Dy4Hft` zq5L6xt7}rA`*&k&QRoLy#%T(^*~155SUT|@ z69ef@evv)C(}ao?eU6sZm_?I$=uCOc%Z)?V86K#BB=U~nz_eJ4EawL0(W}KUNAu4_ zUtxuFl945NY`30uoO$qV*zOA^&KUQj0o8cBb8kaHyLY6Sq%GhI3C%0cG2f;=GEVso zX72TL;!Sx%L#0FBQVq&JK{2fW-{BmgU*>q+8PJ>pDUHR-+gPd=6NVwHHcc6~y|b+~ z^zaKe>uR=!{<(8>wC@!pQpA_l0cdrc_R=Z6H&(fj3d%pGrkofcB%^;Tt!u`F%72{L zim%RQ+Y0B6g{R=-VWt|<=ZVaScc{DCMuN%s@lz<_A zca_iD*`2=1!ouh?ord$-l{;E^36vi)8w(|XiBkRXnl@vQd~&*++hwH=E~n}78>OBp z7V@L8-ZKR=55dF?$SJ^<-O7Q}7oLQ_!kTEF6;JEJ!ccWNHA^qPR@5H5-ytj`q2(YK zd-!LSWqJ7(Re8B5-GYOEy%Y?k2o6V$obADAY1B~I;&QLJ()w~Q27_sjpWtAb3WUUs z>c@P>qoRKo_sopg)Va;>c7md>IFJ{%BghF$_;6F0Ty3L$Ro4hvP#5L9$*~L?xu^j! zMr-FmF=H>}T6f8*>-znN({#NAc2ssb2Hi#ee&87fPB3)(7SYBPbv3=tRq|Vkq*`b% zu0MC`8B}yS=guBAU5*od6E=&Sb-ij2SI4>u83FSlxsOdHWfXwZ2EFoAzl=Lv{P)?b zE*2!FPXrJLF9u!TKYhwrMWAs147R65vv zxu#tZXq}qwU>!AX{C+(EBb2D4*zGgbyWBoWBjGL4s@rMX6d3r@%hXvwS6@(BVYl_U zQ>G$undNQz+I7>%3}9y`4KGON=3K=sxPP7gg~E^D;dYaf%zCteJ*|3Gui^4%0xc%G z?|EsvIwc7C*~?f;h~p%w{AfvSOGQWZNn2-HFrN+lo91r_;yU+nx$99<{F*Vysni;b z)UCY6gX3ca3YhOjl&^!a8M5!wvm>l`^{-kWK(8di`aK?-&Bev4CPSjf-6=O+lc)P1 zk4#j`hBR4B@2O{Z9(<ceWO|olCpUThS#D?QS{m#Bl%K6JOy6M z0UcT2qATer!ut4!#_iGu>HCnAlJt7lqYhyCxhKa3n1{1KFG(ayA9M3=3nI5}7aelx zO7*%8);g_57Fx^kc_D3}070rf{>|3ee+-7gF&Src>!S# z8+Fu2okbe;vhbg5@yhd&?r+sMpAZX2L^BY&PWi74KW%scE5N9qS~wEiSHi15$fgRC za6Lb+91G+6pqp*a2h0!&c#TT%jm4LoLnY!dMCbcJ*B=pNd}&Uf z#c!7aDLQmb?nFpwl3bvR^Hao=B~E^xUM}ec;;RPO&97&EN^O434?fK~38I-u?KtyDXy1ZC=Ij zkwPf=E!kI8iQJ!rab4s3sEFhaE`+6n~NE~Uz~;nz8E8=`r#|gZuI(9tHY~t<-)p9Rn_R{ zxqtdKpr4*lCd`ORDJsJ?@FY}T{fHal&<<7fCyYNlmopQhqOunEOHjw{v6Rx+OlId& zSS)m+Hs^TVLM$fDr(u)%C)a@8<~}U~)Fj}^=a*-ACTMg_v|jk;HQ>pi_qY$;>|xNr zjaoOkF;b?HUbS=Hw{5+zsS9X&S#lYjR^4hG!MMjYWA>pf*IBC3a$WYlZP_&kA%-D~ zC%ufuZ6Td_shp$Ftx)c`GkKXy(p{~i zt9Y|2!&+*GM%38rGYaELc3bQKitEnsZ2R^faz)`yYwWnp9jc;^%d*w)2&w`6!bH z7V?V_z$Q6mqRvXD8@bf^zUpC#QqnKQKWbIe;ra`vEL2!(AK|zw%1d&oQNwqI$rThN z#bH=KUNGr=@4t5%u^lskYuaN_5E#5;1xkA4-~dL>1UpGW#z&FllchtK9@;Z#KDl&E z`1EYxD)hFFjJfO`3j|++<7vxaB_c?n$aA3XM(hQ3zGyJHE8WP zLs&ba6^rf!CG+gk*H3Sb6~$j4mkE0-QbR-+4s{R7j02*Fuq2BVrPt%*Pa7s`TrYgi zV{cZ+E^zNGc9p4m5A~91+>EMjD|FuCE9YY-HWZfciEmJv%!7^~9uA&IFDJ1*atDdt z4A+o$S~X%KVniazIFC`nCpC#&*NAl-awLwx%04iAm+RTwpnIgd4R67AK6^EI6I|H7 zn_#!!d#bfXb;d(#?TmKkR#dR#!QhuuA>k_~T;CXtiKk<#pR>4*whP89P~oVEMOzi_ zt~O3J^4BSncs&Tr5GCSLvBodf0>W5L$8kVC$>ryboRK2H;X5IgWvytVw&9eeEhEbh zhLkrhta=I@PqS2YYsQ(9V$KHtmFexs$*2q(&nZ+J*Fiis`_4p| zZebty8scw*#Ix!!$bBxaYJIWl({xi<@-EH4^zn;gxvft5@KfQ6nU^jBgy9A6d9u0Z zSdb8f*3rUfJ+jTAg04Zc>}rwnOFIBSZ^;GHI!&%IDe7535V_LGX2*nVJ*AnlF>%J> zBv4z^$i(dOo8yi+DhAtL5(1}|1g1Fy;kayf%)S}#!UQX)tp@+wy$;i!}(CX21i`SWo#gn@%4?MB}&3=dopopCLmjdpAPK$>n{ zt4J2-F7G4nMzOx6voDO-R2x!#R7j%fg5R}oAEKx?0o7<|o2{Yi`gyWYPPdjW;rd%z z3yi`fhO7X;(`5=!UQi6F_O>;QZkjhjNIJu&@TKSz#u53AMmp8j&=zaLlJuo?wH9cZ4*>_mI?mmIY~^XC>zX z1y4a5#CT)pKn~gBZQ{pv!#y1T48(aL54|d zj6~6TlkpnhS@BKk7u1>BbPB`_j$rK;%*e1tZ6rAaEBv z?zH74xByIIlruew%{8@NEGC;V)>BX_;X9{^d4eG~)BcY9Qbn5}XQEU*!ey=6)gLI8 zs^T60fENjuwQn{x8zZ8u+ z{Zs4L2nNY>@|j<@In4XdxNl6e0%D`;YYhn?fs!c9e}5K;WA`WdMpb9J1ryJ16XkgA z#w(IXXoKg!IaKYb<6Kx{tjKzsTND7lOkimo zCv&wjrb#dpHC+4F?z<#S(lpu_aESGCC*2}3<)Zq8_`|(utX7>N2+^C^cnQ{H9q*f_ zjt)h=tw?KT#hOKYajWcFB?kTHDMnef1g(e&3(WUI$2)GAB&!e6eTV=1&UpjyJkY#GjOiI^66}4;aXU3YYqh7 z)Y2;bz}^6Y*-%iu7))GfwdUE;06Wmg_lB?z%>kR&tA*Q382U#wzsc&~3TA#v=&8UY z&A!S?%{1f4C5vDz9}sdDR5G!jfCAS+SGS$W-|5hVDxzTKVn5+DnY%U{GF*gz60cYT z)79@Y>+1MA18Q#QBeGljs_aMe4U2z@w6FYXPM3dLaVamMd?o;PbsO};VI!Wx3AS1P z(mTv4R5ecSs>+DlbC1t_IQ8=&G8X)009Gt>TueUEmezTa7qbEb2*L}TO4Nd>Vo;+J zHLKMHyP%y=4xlS@KGNqx%MG@lkuG+_O((^drj$4 z_gm0$L0*@R;5ck>7a)g+VDfvAz) z*i3)OnBX%KTsq_MPTCn1I3BSwGrG3d(MGc769Vy2p`S)vcxi#1nb^WFjW1{swsAyD zWp!2U#!nm}@Z3}SPD{@;ct#<+4n#7uVnq=ruXr-`v_Sjp`a3LF?dFVmI##O>Ev-p? zVvp{Ha-+LWj-#zhHi%Bam`*Nk25PUz+19F+$Z+Q5N(z1vhI+{|gzrfQ1`R5f2YVXg z&S#@>Yt_3Ss{uD*zp0jB)g33~vr^@sUS8}*wNzLJr3Y29ZyOAJPA>(-QHPJyIlL)Wr32lpKa)@r z&sMR!frF<=jt+WvlfS>!L4{WVKi4_j4ugv05T897t4ux?I91z7H4f8Oyj&bcNkIay z2ywx|o%Z3xET-Ix1@_R3X+1r_o|$ODUSmXlIIY{ zUpUu8ij-Gth-rf7&M-o1G61Yu2195DA8*$6DfPn8lLQ*DbdvR?<>PDxK82tfdoR34IV7iP8N}UTx{D z!?PEA>UyeZ2a5EoS3k@{N8lzP$>*NUHUMjD0kko}h1(<3j0ek`+(|{?5CTN)BC?8y z6tU#i`hKd<T6$EF9NUd71P_%i_cN4#Q5of|yBtT%q_kQ7cK2u->#1i8MQ2y3QeKHivA ztDJ5wMoYKzqx_HX1`pe#f{KHj9=?y~asSD6(NUXO}s zZpGU9#YU^pR%hpg4CJA1!MuHcdN5_ngPn7QSbe;D5Eh#f6{?K4n+F;G{kT)A8IF)#Vb|;)dPw|Ttt{+Y;fZqee=#DcEhimN;75iM3 zF27bnZTOpv94`(HJhg!1jB|I^9b6Ja@H}sgB5>82OHId3^EF$7KDjxI=|=?J zjERB#Z79=j%zy%UvkA7tfm{E2_v$60$MljH_!#FGk=_d|IbY|7o0Dkl=X5*Jd299e^U zzbjNvZELD;cHTaDWFT}&n}kv4RgTkS7|?Bwwr`JB`_|mLh*(yUN58JdE-zb$MbcL* z-JLSEG}0}ikl11&Do)Mv$i8MhTAdndEmdVVro?;I>VS%HzJrZdTKkk48u~qA7el3` z$Sg_voPS{h7FJ6@%nfc-cknLXMBBWiP_qOH_lKY9I-| zFUL8%O*|h0m@N%L5wG5L3Z2ZfAHF+ZY{J!r1KhB+>KA_JzUBv6j;Z}*MK?@JOG6x6 zJpADm>l?vybOWaMbVeFw#dPuwwOl4jkG(ad%RHzRlRBHHjGl5ldFJ>Xc=Li}DEPIxEP(msBhxYVgTVtL zK%6=kD_3iv!727|8mB4!d|3uXWU?8X$*IqV&=&q`kiX@&Aa_U)m(OT-V@kH_#nahe zW<0v7X9a<3qbVrqw#*xu6d%%C@Ew)DzUH2ZR|oQXct!s+FW^32V3Iu0s3*CxRVBd+ zCpy!)&nI&4?*dj>ONmWvU1B)`3yg&PXN4G>iE;HcEE~I zWKYw}?KeVQ=|`49)3N-)ic5t)MI7`;<-5D?i$F=U3rxCz$)3rj4|zz)hb6>sXvNwbfG zOU<<-HT3KKfhqG&Nma3PMt#l>^MPL$;&;NxCFg4r*j@S^-ju#P7rWG&;kmJJvC1`| z4mi+dG0h2RC%9YP#=YNNifA#+nk}6a%krnJ^;d6e(>Ch9jXuX@)rSzU?;($}+j)$b zHid{@x!5;?x2cx`lJcf2uaW3DcbZl7!u6Psha3o20m_pGl3#^NJ6UquYheHYuud)R zEpv_b$tGdX-5UQ$Jk}F(3d?t4T7w+E`9fsb#7yll@=aqDFRUdHN&olqdfj^+ryP|Y zhLi1B!&C1#k-@_FzQlM7-o^*fesQclmCIINa7yK@2veT(LTjQ#Hfi=CPwYVba_e^! zT-3qCday0_%Hm(cndVQnt0%D6K|j2hmvO4V!*H+|-*^ zO}wSTi$?p7O)kLw?20C}GKPfSKh0YQZyxQ&u;l4Oaqxxsy#!!2+MV|2&zg?8sQn5q z?jdp6Ao3;g?y_82I9>k_`5^ZKs>VXA@78U?y3!(*|&>qAokwB$KOhPjP~Kq z24ua5XJP7T+o4QWb;tbPL=a(+U-VW7VM?9gYR8llz2NQ;9_K)4RdFXxqNQ`5JDIoC zADY2452ezGz8EmHc=5NTd=J9kuLogGm78^1NQuD3+E;U0mxcZ;%n%b-mkkH<$0T+u znlQ-ILwr4j+cKfkMy02g+~^Z2(?sd7BfmfG`>I9>6;Gv!r?;_WfKrorqf0)zCtp#v3$I40BS|m|0syRg9;)L)%KA^)o?^Uwy%frs{><=+mo) z3b-}6gO$@{W^Wt_e~C(}Zb$$SEQ>i~)4I)+-8)Pi%Q5RcOpOSodDfmh;Z3l8e+<_j zVA8g|E~w%uugDfhy3ceY?eP@26J8S*1PwxWX<&28?Pu1(EG{RpRM)DyGoyx%r(Q#} zT#-k*FxC&4aZ1Z&2pEYM8y%4q+<3#|;^8&toVAGU>hg!fUxi`}Gfg~5LxzyTs6%+a z=U=pEq6(`!CPYK_&EO4ze{%Ed&rd`-nouX}DM}~byH3yT5PWXB-^8lfAt8EljZS>% zkNBSU+?LpR=fh;$(dcqK4BJHffKPA5Vz%hG0Es1%7_${I`MKmA_HOeI>973tV|{F| z(ZMLc9AShcx>cY!d4oz=*NQGd?dE`&RB2tp8$qBmR%eik(BGLVnYJ-XUN;1uN;`P zRqM;%gS*vyEx}&g(p&&G`+%#29iW&4#mHow;6VJPFTktJUwNZ zL@0~-P>Wpr4cq;>BWd%xd^kphAERFGT#go>$))yzRRRV7eGyt&niP3nN{%?T3m{GC z#k3Yo6iPInKuE(-KX6V*9`;|F; zA?n=oWBQ}#@FDW8(}%;b@^A@oBWC1E1ZGI!6bj1M2+cM9I$S6$FyT}&MC(yNR;tzQ zV1BpBra`euY~BVvo=5Hz#t(bs>oZ`uv!ESImkPiV;J-{;sqV79BcZ#$onP+xN3qvPeTVoclAwZXe|DgxkaUx@>|%=8+bh_P#r)_DMUI z-)1gAj@;tSM>-8yq9&*=MRwz>QRi#88K>{PAqXJKwki#!mWZ&jKp2nCb|rS)>5dye zHrHm&d&-qCabW*H8(bdm-JOas-|q~Vw}_3XA`@jrsy1=L!}&7Ujp>jY zI1&f7EV~d1Ebgc{KWtq|OQ!ZQ(wq7D5n%aj(gh}0Bvfdh5u5rscp`IEo4 z(+GvZTff7{u`UU{MtcGKE$%kb?XpNp|FoP@5OHjp)VM$i&oW5^G;;~GvJ^gl(Y{F7 zi{adf!z35QdKS4NfaEg(og>q0&waAVB|Q-TS68(Q3@CA?CZ$B4uMRcij6-=-N?s0B z=+uYd0=a2aWO>FX8dGK-Lf^P_M-YCbz=PTn(=l?SHrOA&&|i-_-;x32nFuZ4CN7R; zx2EY`#7DKh3l?j;AHa={zTy|!*qode(bB6cT0n?IC}oy9yylrzc@Zk1*#uwskg^DN zU#Y_4X6y4Bb1+vFiZK1OfKkE#xoGx!EQ^@-XKnCGJP$hL+J}?F_P)M%fSRrRg7WF^ zc@=eSUz0@p!LmDm+N&ktq`PlOYaNs=H=X2zH;@Xd|40~=S_lesLrtXFesKWWveZ~> zrCaRlo55J*MVX?DOqX;@8tOp8aPdaC9A-$-XS@jwQh8-ZZXB<#6T${DDum4R5>*YA zlCGWx)&R42IwFUw*O-;LIQ02**n=SSl?F_al|Fv-OwEAcv2a3tz@JnK%*HRjM^a}) z|1{!57Te?lyZxK!m6_w{199j~GrpACHFRDn(njh$qNM3yL{7c7HY!#)k&#VG-u{4_at;DIN32H7&@L zND(aB4DCCd>MDFL>aV$$t{~oHuUHIx2&qRDFrngn{pWn;%{)~C`DHHTfMXNDH>c9u zr>>i;rP}r5g$*!ru52Y1J`jy9vC`go;Y<`UN;A~8Z>YkkHK|$6yCd!tkK<1%I`JiS ziNR@1BN7P2lIfZX>h4ts_~<|`m__FRxdjbNFn-UHD|FklrUsvhM$(XP!LYQ~_Uw29 zdZ9Dt{c*uivE@)SKOk-VxNtS>56Q*XRnGsYx4qZBRNI2pPF%#|%AMf0BJ}58nM3v? z3)}g=KWqeXP)ss8cJxIo7u^nptfWaM(&!6FB>-wD{fvgZs?~(l8KFI0z~3FQuFVtX zA|PV3arSf7y7~}+?g&Qu0@KKJk}8o6y!XsnEs{A6ua;!8uhy8yGq94wDQok;sm}AW z7L(|X!#3Hfc}%M5V?vnTLw?5e_n7f>l)!2`+7{JAoPEiJpt;1{8PdU~(6xHmqS7Ze z$R#zE-u=NwLoz7hPJb^^ITU9)7sH1UmqA-Yt+r+} zW>Hge2ca&#^tv@@>|JAntZskDwr_w5+Gs5IWFQHBz9Zr0p5dl4MQbaPktmvMI^M=T zAc@P>uwQ3CI|HK#@l(-5Ok!5OR3w1xiTeZnyun)Rnwg`_4AT^ji#?3;RwTf!p}oW$ ziGm8`+r2ha-c8OSCz-(8mopnsuXF1RYAA#y{y{~wqg>z>%?)U`() zWZDmPKW7DJ9c%@2 z=`Zs1YOMCTfRpDgEXQsL;^M#*2WY<`lNX$%#@ZA#Z?2G<%32s3*vQGzg1Eyz(H=&m zGjeaAz#nJ7Wg%84KWg;!d!8i}##Q_(FrJ7c-!+vSy+cUEs%ABd2k#?xnWps0Nyo zp(JYxBKc zHF2l^{Mgzf_QaAu+UxGbLiFu}+1Tp2qp{|c>wSM`3T$0wJ#e&hgzPPF6>TYi_qmQ4 zQbkN>wdI2U^rYencNsU6|AbW|yI}ObQTgJ*WSd99z2{^dZZqM&)nAtOybSF=V*B_i zIyie_tt*4IL$Ko9(qJ>$M5xpfz`A-u-d0hV1}@!}${qhg_*)N`{*2@ENWkmlWtV(|Kd^iNqT(c5Kh;v$bkcBS47o|)soR=!L((IZqQmxd29wW>?t0E? z>0cA7bCI;4MXK&nVhmwc%lOb8fZnYq(ikVSWk}bBj8l7b1ZclfqIU5Z#s;Z>(L@Px zD7%LYs3fxZ)%a?=^AL+)EJ9@1E&R(Rn=Xw>HW^?pV0T;otgXwNW=; zC~`GTwovJ9_ijxY;SReoe5Hmx$X1(Lv0_hjt@aQRxhbdC-I#|OvFo-!Nz7v!>`I08 zRm$%gLpm-d$jMU8#uLf9kQ&FL|CmgbH(4dc4%N`@-0n(qf1p$Gg`B|o((ui>o%?fL z?VK|1t+6)U;7PW2m44CK&|S+}*n;Z0YdQE)Q}9+v0wdF?sLj2uU*>r5@s=Iu3W+3pR3L4V;pnL<-^ZcVl;H$ukI(Q9Iq^CEjT zOfErDD6d3%w;6`gBU7te!5t-0M?tYkhYMWO6rge}S694j^k+qxz1+b9(e?Zx#jm3( zAigK4lsqHX@i0WIxpn-hlA~n)w`#}Q4&v4N@XZb8KPr=R-fa^4EUGu7xxGrci6_N+ zmA3TX{p1R{rY)w&VV+1vhVufV$j^`}S>!tSFH&rfHu+!bpVsH^tF}Fd;k))u6PUy; z?#)bt^KAjHmQS!(D6n23)7>94*ktZqPvGNkf!6(vezh8&;5YZpA+jZ4JiaRUi%24& zT|`UN?8D`w8xbks55g#tGGfSPI}D7tv>+f|0-R?lME z)ko?)DhqqG-INXvOt5J(&%SmA|Cr4q3CZUnR8-(-aDiNJba3*%W>wMiUMgVnrf>JU zYz}ycy8Bxvc7)XB5CAl;zYiy0qHXuulqo?I@o~XjWA*V^No>s_y^{D$M1;TS#%l+1)S&H>9B5 z9woE`TAoT@|K^Pb#|tGUz#{B^4*H0r{R(AYFBZbZoI=r`#}236;gYiUSdvT3xg}&l zpU}-cVEw7#+!Ts9>%y?isiSE20-a*$VvpqUG#39y_8dQ*v5V+J@pn;#-!q;8%)9E9>Vr;q5R@geAf{*m8*5!(dACI16aXaaw z=jV34&WYXKg#f`P{`?|uVJRLHBsXK_FgX1$9fs8=B|x2Jl<0HY43n`GBxBpz=`k?g zu*@oJRd~0k47tM{*XJrho}Uf?yj#wp>o)$J?X4$^G!j}f4hM#sr1ZDev$G0E=%#5a z*{P84X{&2)J;R3LY?8Dr^q;=_1bZbSLh{y;C}MhAu8!@uOSR6o?13A}wHy9m0y ztDu=0MU>XESp7W)a3b&^^~8IP8MxHt;<5s|F=?%-^o0k%@)kR^b!6VurRWbF#}Q+( z2M9gG7b|Zd?)SE+y^1M3$9+HkETeijIh*aJ)kvy>JNAi@@l5k_l}Mp0UV^H&dw2)i zRtU}idFD(LRC~l$be*8X$V%31`jOx3(|Ppj&5>;+G#BdbZFc4*z8WEQh9e2+`>1ay zN#$W;z5t;JR_QVkZGZbQmitu7@?^G8Z}TeVO)#JA6nlD9!}*-7h~=|nW6XSWs88$= zZ`OB>_Kx2=!&OJLygc87vBw-Tp5CJXHff0%XATX9Xl}^1E#FL_Fc^q^UeU&Tp`|pl z*?^0Mb#pgYmfplt+kmCLt@aAhK}c4G^p%uvZ^=P?9tCu&x(1kyGwmOSiPg703Dh~_ z=ih~yq)fg9Du-SkT>93mxWX2zdV35ex_2x2*dVQ;t7VQ_9&P|elHr<@yY?YxHUK^C zbV+qE)(=D`_xBZPR#^6!d+amd%(xq#Fq)5KSTAnxx5c@(-G6|BE6*RTo9|8E%u>yl zc*>$?CSUcXuE`PYI9vHY3X2%o?ZkV?M$488a1 zb&@DXVAW50B5C?Cv4?cPQ)5;7$pSoHNJI{;+<_jyIyK&^7>~t9lhZHmM(k9x$0QH> z6KB|v$4SC@+d>Ow$sWsFp9L>udH~haX4cbUbUmre2*U0tI6{TxqiZ`6LjHUq<11C_ zMG93JL%i$FAx47-(!kD=O3Rxi|?CS>Y-{ H{eb@kmq4+J literal 0 HcmV?d00001 diff --git a/site/graphics/reporter.png b/site/graphics/reporter.png new file mode 100755 index 0000000000000000000000000000000000000000..4120464c5cda7db2615a87868a73b67a45d00777 GIT binary patch literal 19542 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 literal 0 HcmV?d00001 diff --git a/site/graphics/simpletickdiagram.png b/site/graphics/simpletickdiagram.png new file mode 100755 index 0000000000000000000000000000000000000000..552d5572818c0add3aeff796c2275a3be2ae6632 GIT binary patch literal 16225 zcmeIZbySq!_dhyFNec=LARsDI3XC*Jmx6Sw-Kdl_(%sz+(w)*ncT0EIeFpWd z@89?PS@*8{`~C4(xskSrF*fZ4e0I z`|Vr6FT6Ny7{GrB7P6uOpuC>@tH2i|J$?y(5U4N!<3bY|_>N}wQpExU!ft~9A+(uh zXoEmJN3VqV5-^duhgVnE19$XGqP6=katPiL-UYNTXJrTFoi zIAT-}FNe$DDO6c+W*)h?=n0Y;kY;_2rKB0Q>#{l!=s_hBu=!c^p6WY{B zUCyJqE>J*xcL7DI6<_Rm+JJ`SZo<=Ed_Ip z1~HQ|qRbA$3JsKT9o+P8ftYE4@9QV0p0~sJ&MvDOY>Ci7IPeuE#iltL@L!^NO6_!k zKBl3xf*vQV@8}pRC2%9vfj~PTMwAB#$a-``t!9hLXup3!C71Nl&g-+X1xwum*#Zh1 z=sM78^emoCvX!q2H4X{1gUN`JAXpVQIM!yNK8)x>^dyBjT)*O^9zg>QICxaexqXRK ze@NgzKa`D5U7TTSQ-cu;$bhMcY##YnsL${DA}Hg45&IBYHPjeUG`QhYfsqxLyn%@t znDzF6xUh{2tDMi@woCth4tBL`0Dn9LRFbp;GI>Vu&my0mS&x`FVGyCWf^txO5q^N6 zj10fYz1_&0zCihB=)dWye%rG88n7*b1`L@KHVV%cl_hL-E};@qbvx z$?lTw51S^KBekFZT4!p>NS)u~GX%5_91CYX_&dfgHtPwh#Fb11|HGp!y7E8N-?f@y z{6ierZm5#UpC!$p8MVm&Ve|BgGymenoxxP#za{85w}m}X5U|8H#eM6$^NYy^w0{Egzu*=_9w}Q0`sZs>!>AHgT5~~*NIN|rPC}Yu_s_c@-V6hU0!BFVVKs6;|bCqbvFQLa*Xudrs$_=qq0A0ihQ+dMMV~S5W}?lEnwQl zImRY+9Y0U(753JTr(#ygoOR1;<+RL7Q*V~kOk;l^yBV~?7VFPOo>@~8=Km*!YgG7K z;bN=I@c*8uN0-O<-)ZWOj|@iHs=wzxV!c)0U$Q|FgiTmQB$j-aoDeaDo=$5B~8j z|6bnf??)AonB2b&ShZn{_K(#506JAV;0BWe=Z;7aKIA($&{TpjMD$NT468TRTia`ozQ;aR{p!|A~tE-x~N4VQXu|Pz{**i8hojEC**ZMI1?INVwwSUa(YsXuGqa2L!Lc{sA zv8$9rekTD@Yc2Gx3Hk!1x5B|Q&ei)Cbvh80=!>}XM>=vd!tT__vU52ES^l&V-cjOM z?GoNetB=n(;x%SIg2j@%RJ5I=loT`& zhDjRv*o;ZmgZXMsx3*`(Vqf##BdOGE^|V0YVX52~Y&6W)mtR4psyVkcyPoMLKf2iK zm{OA1E;ZO~>z{*aDFsZFzo($Fvr$$Q!5qwN6cnZ;GE}`f6VU%|0`L%3{DDj7j!B|G z$gNB>Me)gTG;9rx71 z@p;vC1bJLblC3y%w6YTf9twd!)+#tsAgfvANWI zTH^epOWneD`E@q#bhT;~`bFc98DC-YhKwxH#C6uz>T9>HM1MT6vg_Z$c3}ISLrXK; zq^UG|GIM?9;nZAZOa%nVkK5NDj$b+|w^Q|I6L!|~)V(1ZwOCo6ot)g%37108em_XN z^^(@-b?NXX#{+GnH!|rNMlk+yZKT6Xzsl{BS4jwonsbQSOrs|l;_0O=H;X1HI$z99 zCyw@cag#wY=0{Be^5Xir3`UBI@xLjkhdRi`^2GIi4$gF{ixfbS%0Afh5L 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 literal 0 HcmV?d00001 diff --git a/site/graphics/torq-logo.png b/site/graphics/torq-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..767a5cebc1262fecfe976d59b9ccce3a7be1ac81 GIT binary patch literal 18931 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 u + + + + + + + + + + + Handlers - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+ + + +
+ +
+
+ + +
+
+ +

Message Handlers

+

There is a separate code directory containing message handler +customizations. This is found at $KDBCODE/handlers. Much of the code is +derived from Simon Garland’s contributions to +code.kx.

+

Every external interaction with a process goes through a message +handler, and these can be modified to, for example, log or restrict +access. Passing through a bespoke function defined in a message handler +will add extra processing time and therefore latency to the message. All +the customizations we have provided aim to minimise additional latency, +but if a bespoke process is latency sensitive then some or all of the +customizations could be switched off. We would argue though that +generally it is better to switch on all the message handler functions +which provide diagnostic information, as for most non-latency sensitive +processes (HDBs, Gateways, some RDBs etc.) the extra information upon +failure is worth the cost. The message handlers can be globally switched +off by setting .proc.loadhandlers to 0b in the configuration file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ScriptNSDiagFunctionModifies
logusage.q.usageYLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updatespw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer
controlaccess.q.accessNRestrict access for set of users/user groups to a list of functions, and from a defined set of serverspw, pg, ps, ws, ph, pp, pi
trackclients.q.clientsYTrack client process details including then number of requests and cumulative data size returnedpo, pg, ps, ws, pc
trackservers.q.serversYDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.pc, timer
zpsignore.q.zpsignoreNOverride async message handler based on certain message patternsps
writeaccess.q.readonlyNRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.pg, ps, ws, ph, pp
+

Each customization can be turned on or off individually from the +configuration file(s). Each script can be extensively customised using +the configuration file. Example customization for logusage.q, taken from +$KDBCONFIG/settings/default.q is below. Please see default.q for the +remaining configuration of the other message handler files.

+
/- Configuration used by the usage functions - logging of client interaction
+\d .usage
+enabled:1b      /- whether the usage logging is enabled
+logtodisk:1b        /- whether to log to disk or not
+logtomemory:1b      /- write query logs to memory
+ignore:1b       /- check the ignore list for functions to ignore
+ignorelist:(`upd;"upd") /- the list of functions to ignore in async calls
+flushtime:1D00      /- default value for how long to persist the
+            /- in-memory logs. Set to 0D for no flushing
+suppressalias:0b    /- whether to suppress the log file alias creation
+logtimestamp:{[].z.d}   /- function to generate the log file timestamp suffix
+LEVEL:3         /- log level. 0=none;1=errors;2=errors+complete
+            /- queries;3=errors+before a query+after
+logroll:1b      /- Whether or not to roll the log file
+            /- automatically (on a daily schedule)
+
+

+

logusage.q

+

logusage.q is probably the most important of the scripts from a +diagnostic perspective. It is a modified version of the logusage.q +script on code.kx.

+

In its most verbose mode it will log information to an in-memory table +(.usage.usage) and an on-disk ASCII file, both before and after every +client interaction and function executed on the timer. These choices +were made because:

+
    +
  • +

    logging to memory enables easy interrogation of client interaction;

    +
  • +
  • +

    logging to disk allows persistence if the process fails or locks up. + ASCII text files allow interrogation using OS tools such as vi, grep + or tail;

    +
  • +
  • +

    logging before a query ensures any query that adversely effects the + process is definitely captured, as well as capturing some state + information before the query execution;

    +
  • +
  • +

    logging after a query captures the time taken, result set size and + resulting state;

    +
  • +
  • +

    logging timer calls ensures a full history of what the process is + actually doing. Also, timer call performance degradation over time + is a common source of problems in kdb+ systems.

    +
  • +
+

The following fields are logged in .usage.usage:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
timeTime the row was added to the table
idID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication
timerExecution time. Null for rows with status=b (before)
zcmd.z handler the query arrived through
statusQuery status. One of b, c or e (before, complete, error)
aAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname
uUsername of sender
wHandle of sender
cmdCommand sent
memMemory statistics
szSize of result. Null for rows with status of b or e
errorError message
+

+

controlaccess.q

+

controlaccess.q is used to restrict client access to the process. It is +modified version of controlaccess.q from code.kx. The script allows +control of several aspects:

+
    +
  • +

    the host/ip address of the servers which are allowed to access the + process;

    +
  • +
  • +

    definition of three user groups (default, poweruser and superuser) + and the actions each group is allowed to do;

    +
  • +
  • +

    the group(s) each user is a member of, and any additional actions an + individual user is allowed/disallowed outside of the group + permissions;

    +
  • +
  • +

    the maximum size of the result set returned to a client.

    +
  • +
+

The access restrictions are loaded from csv files. The permissions files +are stored in $KDBCONFIG/permissions.

+ + + + + + + + + + + + + + + + + + + + + +
FileDescription
*_hosts.csvContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed
*_users.csvContains individual users and the user groups they are are a member of
*_functions.csvContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users
+

The permissions files are loaded using a similar hierarchical approach +as for the configuration and code loading. Three files can be provided- +default_.csv, [proctype]_.csv, and [procname]_.csv. All of the +files will be loaded, but permissions for the same entity (hostpattern, +user, or function) defined in [procname]_.csv will override those in +[proctype]_.csv which will in turn override [procname]_.csv.

+

When a client makes a query which is refused by the permissioning layer, +an error will be raised and logged in .usuage.usage if it is enabled.

+

+

trackclients.q

+

trackclients.q is used to track client interaction. It is a slightly +modified version of trackclients.q from code.kx, and extends the +functionality to handle interaction with the discovery service.

+

Whenever a client opens a connection to the q process, it will be +registered in the .clients.clients table. Various details are logged, +but from a diagnostic perspective the most important information are the +client details, the number of queries it has run, the last time it ran a +query, the number of failed queries and the cumulative size of results +returned to it.

+

+

trackservers.q

+

trackservers.q is used to register and maintain handles to external +servers. It is a heavily modified version of trackservers.q from +code.kx. It is explained more in section connectionmanagement.

+

+

zpsignore.q

+

zpsignore.q is used to check incoming async calls for certain patterns +and to bypass all further message handler checks for messages matching +the pattern. This is useful for handling update messages published to a +process from a data source.

+

+

writeaccess.q

+

writeaccess.q is used to restrict client write access to data within a +process. The script uses the reval function, released in KDB+ 3.3, to +prevent client queries from modifying any data in place. At present only +queries in the form of strings are passed through the reval function. +Additonally the script disables any form of HTTP access. If using +versions of KDB+ prior to 3.3, this feature must be disabled. An attempt +to use this feature on previous KDB+ versions will result in an error +and the relevant process exiting.

+

permissions.q

+

permissions.q is used to control client access to a server process. It +allows:

+
    +
  • +

    Access control via username/password access, either in combination + with the -u/U process flags or in place of them.

    +
  • +
  • +

    Definition of user groups, which control variable access.

    +
  • +
  • +

    Definition of user roles, which allow control over function + execution.

    +
  • +
  • +

    Deeper control over table subsetting through the use of “virtual + tables”, using enforced where clauses.

    +
  • +
+

Access restriction in TorQ can be enabled on all processes, each of +which can then load the default.q in $KDBCONFIG/permissions/, which +adds users, groups and roles allowing standard operation of TorQ. The +admin user and role by default can access all functions, and each of the +system processes has access only to the required system functions.

+

Permissions are enabled or disabled on a per-process basis through +setting .pm.enabled as 1b or 0b at process load (set to 0b by default). +A permissioned process can safely interact with a non-permissioned +process while still controlling access to itself.

+

The access schema consists of 7 control tables:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptions
UserUsername, locality, encryption type and password hash
UsergroupUser and their group.
UserroleUser and role.
FunctiongroupFunctions and their group
FunctionFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.
AccessVariable names, the groups which can access them, and the read or write access level.
VirtualtableVirtual table name, main table name, and the where clause it enforces on access to that table.
+

In addition to groupinfo and roleinfo tables, which contain the +group/role name and a string describing each group and role. A user can +belong to multiple groups, and have multiple roles. In particular the +schema supports group hierarchy, where a user group can be listed as a +user in the group table, and inherit all the permissions from another +other group, effectively inheriting the second group itself.

+

A user belonging to a group listed in the access table will have the +specified level of access (read or write) to that group’s variables, +e.g.

+ + + + + + + + + + + + + + + + + + + + +
TableGroupLevel
quoteheadtraderwrite
tradejuniortraderread
+

Here, users in headtrader will have write access to the quote table, +while juniortrader group has read access to the trade table. If +headtraders have been set to inherit the juniortrader group, they will +also have read access to trade. Note that read access is distinct from +write access. Headtraders in this circumstance do not have implicit read +access to the quote table. This control is for direct name access only. +Selects, execs and updates are controlled via the function table, as +below.

+

The permissions script can be set to have permissive mode enabled with +permissivemode:1b (disabled by default). When enabled at script loading, +this bypasses access checks on variables which are not listed in the +access table, effectively auto-whitelisting any variables not listed in +the access table for all users, which may be useful in partly restricted +development environments.

+

Function access is controlled through non-hierarchical roles. A user +attempting to run a named function will have their access checked +against the function table through their role, for example, trying to +run a function timedata[syms;bkttype], which selects from a table by a +time bucket type bkttype on xbar:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionRoleParam. Check
timedataquant{1b}
timedatanormal user{x[`bkttype] in `hh}
selectquant{1b}
+

The parameter check in the third column must be a lambda accepting a +dictionary of parameters and their values, which can then return a +boolean if some parameter condition is met. Here, any normal user must +have their bucket type as an hour. If they try anything else, the +function is not permitted. This could be extended to restriction to +certain syms as well, in this example, the quant can run this function +with any parameters. Anything passed to the param. check function +returns 1b. A quant having general select access is listed as having +1b in the param. check.

+

Further restriction of data can be achieved with virtual tables, via +which users can be restricted to having a certain subset of data from a +main table available. To avoid the need to replicate a potentially large +subset of a table into a separately-controlled variable, this is done +through pointing to the table under a different name via a where clause, +e.g.

+ + + + + + + + + + + + + + + + + + + + +
Virtual TableTableWhere Clause
trade_lsetrade,(in;`src;“L”)
quote_newquote,(>;`time;(-;`.z.p;01:00))
+

When a select from trade_lse is performed, a select on trade is +modified to contain the where clause above. Access to virtual tables can +be controlled identically to access to real tables through the access +table.

+

If the process is given the flag “-public 1”, it will run in public +access mode. This allows a user to log in without a password and be +given the publicuser role and membership of the public group, which can +be configured as any other group or role.

+

The permissions control has a default size restriction of 2GB, set (as +bytes) on .pm.maxsize. This is a global restriction and is not affected +by user permissions.

+

Adding to the groups and roles is handled by the functions:

+
adduser[`user;`locality;`hash type; md5"password"]
+removeuser[`user]
+addgroup[`groupname; "description"]
+removegroup[`groupname]
+addrole[`rolename; "description"]
+removerole[`rolename]
+addtogroup[`user;`groupname]
+removefromgroup[`user; `groupname]
+assignrole[`user; `rolename]
+unassignrole[`user; `rolename]
+addfunction[`function; `functiongroup]
+removefunction[`function; `functiongroup]
+grantaccess[`variable; `groupname; `level]
+revokeaccess[`variable; `groupname; `level]
+grantfunction[`function; `rolename; {paramCheckFn}]
+revokefunction[`function; `rolename]
+createvirtualtable[`vtablename; `table; ,(whereclause)]
+removevirtualtable[`vtablename]
+cloneuser[`user;`newuser;"password"]
+
+

which are further explained in the script API.

+

Permission control operates identically on the gateway. A user connected +to the gateway must have access to the gateway, and their roles must +have access to the .gw.syncexec or .gw.asyncexec functions.

+

Usage Example

+

To connect to a permissioned RDB in the TorQ system, a group and role +for the user must be established. If the RDB contains the tables trade, +quote, and depth, and the process contains the functions getdata[syms, +bkttype,bktsize] and hloc[table], restricted access would be +configured like so:

+
.pm.adduser[`adam;`local;`md5;md5"pass"]
+.pm.adduser[`bob;`local;`md5;md5"pass"]
+
+.pm.addtogroup[`adam;`fulluser]
+.pm.addtogroup[`bob;`partuser]
+.pm.addtogroup[`fulluser;`partuser]
+.pm.grantaccess[`quote;`fulluser;`read]
+.pm.grantaccess[`trade;`partuser;`read]
+
+.pm.createvirtualtable[`quotenew;`quote;enlist(>;`time;(-;`.z.p;01:00))]
+.pm.grantaccess[`quotenew;`partuser;`read]
+
+.pm.assignrole[`adam;`toplevel]
+.pm.assignrole[`bob;`lowlevel]
+.pm.grantfunction[`getdata;`toplevel;{1b}]
+.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]
+.pm.grantfunction[`hloc;`toplevel;{1b}]
+.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]
+
+

This provides a system in which Bob can access only the trade table, +while Adam has access to the trade table and quote table (through +inheritance from Bob’s group). Through a virtual table, if Bob runs +“select from quotenew”, he is able to get a table of the last hour of +quotes. When the system is started in normal mode, there is no IPC +access to the depth table, however if the system was started in +permissive mode, in this case any user who could log in could access +depth.

+

Adam can run the getdata function however he wants, and Bob can only run +it against sym GOOG. Similarly Adam can run hloc against any table, but +Bob can only look at trade with it.

+

Additionally, any system calls would need to be actively permissioned in +the same way, after defining a systemuser role (or expanding the default +role in TorQ). The superuser is given global function access by +assigning them .pm.ALL in the function table, for example a tickerplant +pushing to the RDB would need to have a user and role defined:

+
.pm.adduser[`ticker;`local;`md5;md5"plant"]
+.pm.assignrole[`ticker;`tp]
+
+

And then grant that role access to the .u.upd function:

+
.pm.grantfunction[`.u.upd;`tp;{1b}]
+
+

Although the .u.upd function updates to a table, there is no need to +grant direct access to that table.

+

Gateway Example

+

The gateway user will have superuser role by default. The execution of a +function passed through the gateway is checked against the user who sent +the call. This should not be modified.

+

Within the gateway itself, access to target processes can be controlled +via the function table. For example, if Adam in the previous example was +allowed to access only the RDB with .gw.syncexec, you could use:

+
.pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]
+
+

Since .gw.syncexec is a projection, the arguments supplied are checked +in order, with dictionary keys `0`1`2... etc. This could be further +extended to restrict access to queries with the +.pm.allowed[user;query] function, which checks permissions of the +current user as listed on the gateway permission tables:

+
.pm.grantfunction[`.gw.syncexec;`toplevel;
+    {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]
+
+

+

Diagnostic Reporting

+

The message handler modifications provide a wealth of diagnostic +information including:

+
    +
  • +

    the timings and memory usage for every query run on a process;

    +
  • +
  • +

    failed queries;

    +
  • +
  • +

    clients trying to do things they are not permissioned for;

    +
  • +
  • +

    the clients which are querying often and/or regularly extracting + large datasets;

    +
  • +
  • +

    the number of clients currently connected;

    +
  • +
  • +

    timer calls and how long they take.

    +
  • +
+

Although not currently implemented, it would be straightforward to use +this information to implement reports on the behaviour of each process +and the overall health of the system. Similarly it would be +straightforward to set up periodic publication to a central repository +to have a single point for system diagnostic statistics.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/site/index.html b/site/index.html new file mode 100644 index 000000000..cc1516186 --- /dev/null +++ b/site/index.html @@ -0,0 +1,389 @@ + + + + + + + + + + + + TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ +
+ +
+
+
+ +

TorQ

+ +

+

The TorQ framework created by AquaQ Analytics forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from code.kx.com (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.

+

The easiest way to get a production capture started is to download and install one of the Starter Packs. We also have a Google Group for questions/discussions.

+
+ +
+ +

For recent updates to TorQ please check out our blog.

+

For email support contact support@aquaq.co.uk

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/site/mkdocs/js/lunr.min.js b/site/mkdocs/js/lunr.min.js new file mode 100644 index 000000000..b0198dff9 --- /dev/null +++ b/site/mkdocs/js/lunr.min.js @@ -0,0 +1,7 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.0 + * Copyright (C) 2016 Oliver Nightingale + * MIT Licensed + * @license + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n":">",'"':""","'":"'","/":"/"};function escapeHtml(string){return String(string).replace(/[&<>"'\/]/g,function(s){return entityMap[s]})}var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tags){if(typeof tags==="string")tags=tags.split(spaceRe,2);if(!isArray(tags)||tags.length!==2)throw new Error("Invalid tags: "+tags);openingTagRe=new RegExp(escapeRegExp(tags[0])+"\\s*");closingTagRe=new RegExp("\\s*"+escapeRegExp(tags[1]));closingCurlyRe=new RegExp("\\s*"+escapeRegExp("}"+tags[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function(){return this.tail===""};Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||match.index!==0)return"";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={".":this.view};this.parent=parentContext}Context.prototype.push=function(view){return new Context(view,this)};Context.prototype.lookup=function(name){var cache=this.cache;var value;if(name in cache){value=cache[name]}else{var context=this,names,index,lookupHit=false;while(context){if(name.indexOf(".")>0){value=context.view;names=name.split(".");index=0;while(value!=null&&index")value=this._renderPartial(token,context,partials,originalTemplate);else if(symbol==="&")value=this._unescapedValue(token,context);else if(symbol==="name")value=this._escapedValue(token,context);else if(symbol==="text")value=this._rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype._renderSection=function(token,context,partials,originalTemplate){var self=this;var buffer="";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;jthis.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&& +(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a= +this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f); +if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval", +"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b, +a);this.check()}));this.errback?q(a,"error",u(this,this.errback)):this.events.error&&q(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b, +registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a); +b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n, +q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d, +e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==e&&(!("."===k||".."===k)||1e.attachEvent.toString().indexOf("[native code"))&& +!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"), +s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"=== +b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this); diff --git a/site/mkdocs/js/search-results-template.mustache b/site/mkdocs/js/search-results-template.mustache new file mode 100644 index 000000000..a8b3862f2 --- /dev/null +++ b/site/mkdocs/js/search-results-template.mustache @@ -0,0 +1,4 @@ + diff --git a/site/mkdocs/js/search.js b/site/mkdocs/js/search.js new file mode 100644 index 000000000..d5c866164 --- /dev/null +++ b/site/mkdocs/js/search.js @@ -0,0 +1,88 @@ +require([ + base_url + '/mkdocs/js/mustache.min.js', + base_url + '/mkdocs/js/lunr.min.js', + 'text!search-results-template.mustache', + 'text!../search_index.json', +], function (Mustache, lunr, results_template, data) { + "use strict"; + + function getSearchTerm() + { + var sPageURL = window.location.search.substring(1); + var sURLVariables = sPageURL.split('&'); + for (var i = 0; i < sURLVariables.length; i++) + { + var sParameterName = sURLVariables[i].split('='); + if (sParameterName[0] == 'q') + { + return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); + } + } + } + + var index = lunr(function () { + this.field('title', {boost: 10}); + this.field('text'); + this.ref('location'); + }); + + data = JSON.parse(data); + var documents = {}; + + for (var i=0; i < data.docs.length; i++){ + var doc = data.docs[i]; + doc.location = base_url + doc.location; + index.add(doc); + documents[doc.location] = doc; + } + + var search = function(){ + + var query = document.getElementById('mkdocs-search-query').value; + var search_results = document.getElementById("mkdocs-search-results"); + while (search_results.firstChild) { + search_results.removeChild(search_results.firstChild); + } + + if(query === ''){ + return; + } + + var results = index.search(query); + + if (results.length > 0){ + for (var i=0; i < results.length; i++){ + var result = results[i]; + doc = documents[result.ref]; + doc.base_url = base_url; + doc.summary = doc.text.substring(0, 200); + var html = Mustache.to_html(results_template, doc); + search_results.insertAdjacentHTML('beforeend', html); + } + } else { + search_results.insertAdjacentHTML('beforeend', "

No results found

"); + } + + if(jQuery){ + /* + * We currently only automatically hide bootstrap models. This + * requires jQuery to work. + */ + jQuery('#mkdocs_search_modal a').click(function(){ + jQuery('#mkdocs_search_modal').modal('hide'); + }); + } + + }; + + var search_input = document.getElementById('mkdocs-search-query'); + + var term = getSearchTerm(); + if (term){ + search_input.value = term; + search(); + } + + search_input.addEventListener("keyup", search); + +}); diff --git a/site/mkdocs/js/text.js b/site/mkdocs/js/text.js new file mode 100644 index 000000000..17921b6e5 --- /dev/null +++ b/site/mkdocs/js/text.js @@ -0,0 +1,390 @@ +/** + * @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/requirejs/text for details + */ +/*jslint regexp: true */ +/*global require, XMLHttpRequest, ActiveXObject, + define, window, process, Packages, + java, location, Components, FileUtils */ + +define(['module'], function (module) { + 'use strict'; + + var text, fs, Cc, Ci, xpcIsWindows, + progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], + xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, + bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, + hasLocation = typeof location !== 'undefined' && location.href, + defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), + defaultHostName = hasLocation && location.hostname, + defaultPort = hasLocation && (location.port || undefined), + buildMap = {}, + masterConfig = (module.config && module.config()) || {}; + + text = { + version: '2.0.12', + + strip: function (content) { + //Strips declarations so that external SVG and XML + //documents can be added to a document without worry. Also, if the string + //is an HTML document, only the part inside the body tag is returned. + if (content) { + content = content.replace(xmlRegExp, ""); + var matches = content.match(bodyRegExp); + if (matches) { + content = matches[1]; + } + } else { + content = ""; + } + return content; + }, + + jsEscape: function (content) { + return content.replace(/(['\\])/g, '\\$1') + .replace(/[\f]/g, "\\f") + .replace(/[\b]/g, "\\b") + .replace(/[\n]/g, "\\n") + .replace(/[\t]/g, "\\t") + .replace(/[\r]/g, "\\r") + .replace(/[\u2028]/g, "\\u2028") + .replace(/[\u2029]/g, "\\u2029"); + }, + + createXhr: masterConfig.createXhr || function () { + //Would love to dump the ActiveX crap in here. Need IE 6 to die first. + var xhr, i, progId; + if (typeof XMLHttpRequest !== "undefined") { + return new XMLHttpRequest(); + } else if (typeof ActiveXObject !== "undefined") { + for (i = 0; i < 3; i += 1) { + progId = progIds[i]; + try { + xhr = new ActiveXObject(progId); + } catch (e) {} + + if (xhr) { + progIds = [progId]; // so faster next time + break; + } + } + } + + return xhr; + }, + + /** + * Parses a resource name into its component parts. Resource names + * look like: module/name.ext!strip, where the !strip part is + * optional. + * @param {String} name the resource name + * @returns {Object} with properties "moduleName", "ext" and "strip" + * where strip is a boolean. + */ + parseName: function (name) { + var modName, ext, temp, + strip = false, + index = name.indexOf("."), + isRelative = name.indexOf('./') === 0 || + name.indexOf('../') === 0; + + if (index !== -1 && (!isRelative || index > 1)) { + modName = name.substring(0, index); + ext = name.substring(index + 1, name.length); + } else { + modName = name; + } + + temp = ext || modName; + index = temp.indexOf("!"); + if (index !== -1) { + //Pull off the strip arg. + strip = temp.substring(index + 1) === "strip"; + temp = temp.substring(0, index); + if (ext) { + ext = temp; + } else { + modName = temp; + } + } + + return { + moduleName: modName, + ext: ext, + strip: strip + }; + }, + + xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, + + /** + * Is an URL on another domain. Only works for browser use, returns + * false in non-browser environments. Only used to know if an + * optimized .js version of a text resource should be loaded + * instead. + * @param {String} url + * @returns Boolean + */ + useXhr: function (url, protocol, hostname, port) { + var uProtocol, uHostName, uPort, + match = text.xdRegExp.exec(url); + if (!match) { + return true; + } + uProtocol = match[2]; + uHostName = match[3]; + + uHostName = uHostName.split(':'); + uPort = uHostName[1]; + uHostName = uHostName[0]; + + return (!uProtocol || uProtocol === protocol) && + (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && + ((!uPort && !uHostName) || uPort === port); + }, + + finishLoad: function (name, strip, content, onLoad) { + content = strip ? text.strip(content) : content; + if (masterConfig.isBuild) { + buildMap[name] = content; + } + onLoad(content); + }, + + load: function (name, req, onLoad, config) { + //Name has format: some.module.filext!strip + //The strip part is optional. + //if strip is present, then that means only get the string contents + //inside a body tag in an HTML string. For XML/SVG content it means + //removing the declarations so the content can be inserted + //into the current doc without problems. + + // Do not bother with the work if a build and text will + // not be inlined. + if (config && config.isBuild && !config.inlineText) { + onLoad(); + return; + } + + masterConfig.isBuild = config && config.isBuild; + + var parsed = text.parseName(name), + nonStripName = parsed.moduleName + + (parsed.ext ? '.' + parsed.ext : ''), + url = req.toUrl(nonStripName), + useXhr = (masterConfig.useXhr) || + text.useXhr; + + // Do not load if it is an empty: url + if (url.indexOf('empty:') === 0) { + onLoad(); + return; + } + + //Load the text. Use XHR if possible and in a browser. + if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { + text.get(url, function (content) { + text.finishLoad(name, parsed.strip, content, onLoad); + }, function (err) { + if (onLoad.error) { + onLoad.error(err); + } + }); + } else { + //Need to fetch the resource across domains. Assume + //the resource has been optimized into a JS module. Fetch + //by the module name + extension, but do not include the + //!strip part to avoid file system issues. + req([nonStripName], function (content) { + text.finishLoad(parsed.moduleName + '.' + parsed.ext, + parsed.strip, content, onLoad); + }); + } + }, + + write: function (pluginName, moduleName, write, config) { + if (buildMap.hasOwnProperty(moduleName)) { + var content = text.jsEscape(buildMap[moduleName]); + write.asModule(pluginName + "!" + moduleName, + "define(function () { return '" + + content + + "';});\n"); + } + }, + + writeFile: function (pluginName, moduleName, req, write, config) { + var parsed = text.parseName(moduleName), + extPart = parsed.ext ? '.' + parsed.ext : '', + nonStripName = parsed.moduleName + extPart, + //Use a '.js' file name so that it indicates it is a + //script that can be loaded across domains. + fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; + + //Leverage own load() method to load plugin value, but only + //write out values that do not have the strip argument, + //to avoid any potential issues with ! in file names. + text.load(nonStripName, req, function (value) { + //Use own write() method to construct full module value. + //But need to create shell that translates writeFile's + //write() to the right interface. + var textWrite = function (contents) { + return write(fileName, contents); + }; + textWrite.asModule = function (moduleName, contents) { + return write.asModule(moduleName, fileName, contents); + }; + + text.write(pluginName, nonStripName, textWrite, config); + }, config); + } + }; + + if (masterConfig.env === 'node' || (!masterConfig.env && + typeof process !== "undefined" && + process.versions && + !!process.versions.node && + !process.versions['node-webkit'])) { + //Using special require.nodeRequire, something added by r.js. + fs = require.nodeRequire('fs'); + + text.get = function (url, callback, errback) { + try { + var file = fs.readFileSync(url, 'utf8'); + //Remove BOM (Byte Mark Order) from utf8 files if it is there. + if (file.indexOf('\uFEFF') === 0) { + file = file.substring(1); + } + callback(file); + } catch (e) { + if (errback) { + errback(e); + } + } + }; + } else if (masterConfig.env === 'xhr' || (!masterConfig.env && + text.createXhr())) { + text.get = function (url, callback, errback, headers) { + var xhr = text.createXhr(), header; + xhr.open('GET', url, true); + + //Allow plugins direct access to xhr headers + if (headers) { + for (header in headers) { + if (headers.hasOwnProperty(header)) { + xhr.setRequestHeader(header.toLowerCase(), headers[header]); + } + } + } + + //Allow overrides specified in config + if (masterConfig.onXhr) { + masterConfig.onXhr(xhr, url); + } + + xhr.onreadystatechange = function (evt) { + var status, err; + //Do not explicitly handle errors, those should be + //visible via console output in the browser. + if (xhr.readyState === 4) { + status = xhr.status || 0; + if (status > 399 && status < 600) { + //An http 4xx or 5xx error. Signal an error. + err = new Error(url + ' HTTP status: ' + status); + err.xhr = xhr; + if (errback) { + errback(err); + } + } else { + callback(xhr.responseText); + } + + if (masterConfig.onXhrComplete) { + masterConfig.onXhrComplete(xhr, url); + } + } + }; + xhr.send(null); + }; + } else if (masterConfig.env === 'rhino' || (!masterConfig.env && + typeof Packages !== 'undefined' && typeof java !== 'undefined')) { + //Why Java, why is this so awkward? + text.get = function (url, callback) { + var stringBuffer, line, + encoding = "utf-8", + file = new java.io.File(url), + lineSeparator = java.lang.System.getProperty("line.separator"), + input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), + content = ''; + try { + stringBuffer = new java.lang.StringBuffer(); + line = input.readLine(); + + // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 + // http://www.unicode.org/faq/utf_bom.html + + // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: + // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 + if (line && line.length() && line.charAt(0) === 0xfeff) { + // Eat the BOM, since we've already found the encoding on this file, + // and we plan to concatenating this buffer with others; the BOM should + // only appear at the top of a file. + line = line.substring(1); + } + + if (line !== null) { + stringBuffer.append(line); + } + + while ((line = input.readLine()) !== null) { + stringBuffer.append(lineSeparator); + stringBuffer.append(line); + } + //Make sure we return a JavaScript string and not a Java string. + content = String(stringBuffer.toString()); //String + } finally { + input.close(); + } + callback(content); + }; + } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && + typeof Components !== 'undefined' && Components.classes && + Components.interfaces)) { + //Avert your gaze! + Cc = Components.classes; + Ci = Components.interfaces; + Components.utils['import']('resource://gre/modules/FileUtils.jsm'); + xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); + + text.get = function (url, callback) { + var inStream, convertStream, fileObj, + readData = {}; + + if (xpcIsWindows) { + url = url.replace(/\//g, '\\'); + } + + fileObj = new FileUtils.File(url); + + //XPCOM, you so crazy + try { + inStream = Cc['@mozilla.org/network/file-input-stream;1'] + .createInstance(Ci.nsIFileInputStream); + inStream.init(fileObj, 1, 0, false); + + convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] + .createInstance(Ci.nsIConverterInputStream); + convertStream.init(inStream, "utf-8", inStream.available(), + Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); + + convertStream.readString(inStream.available(), readData); + convertStream.close(); + inStream.close(); + callback(readData.value); + } catch (e) { + throw new Error((fileObj && fileObj.path || '') + ': ' + e); + } + }; + } + return text; +}); diff --git a/site/mkdocs/search_index.json b/site/mkdocs/search_index.json new file mode 100644 index 000000000..5e8333e87 --- /dev/null +++ b/site/mkdocs/search_index.json @@ -0,0 +1,524 @@ +{ + "docs": [ + { + "location": "/", + "text": "The TorQ framework created by \nAquaQ Analytics\n forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from \ncode.kx.com\n (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.\n\n\nThe easiest way to get a production capture started is to download and install one of the \nStarter Packs\n. We also have a \nGoogle Group for questions/discussions\n.\n\n\n\n\n\n\n\n\n\nFor recent updates to TorQ please check out our \nblog\n.\n\n\nFor email support contact", + "title": "Home" + }, + { + "location": "/Overview/", + "text": "Overview\n\n\n\n\nWhat is kdb+?\n\n\nkdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.\n\n\n\n\nWhat is AquaQ TorQ?\n\n\nAquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document.\n\n\nAquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are:\n\n\n\n\n\n\nProcess Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level.\n\n\n\n\n\n\nCode Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped.\n\n\n\n\n\n\nConfiguration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously.\n\n\n\n\n\n\nUsage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message.\n\n\n\n\n\n\nIncoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level.\n\n\n\n\n\n\nAccess Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management.\n\n\n\n\n\n\nTimer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers.\n\n\n\n\n\n\nStandard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled.\n\n\n\n\n\n\nError Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue.\n\n\n\n\n\n\nVisualisation: Utilities to ease GUI development using websockets\n and HTML5.\n\n\n\n\n\n\nDocumentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included.\n\n\n\n\n\n\nUtilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have:\n\n\n\n\n\n\nCaching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame;\n\n\n\n\n\n\nTimezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones;\n\n\n\n\n\n\nEmail: an library to send emails;\n\n\n\n\n\n\nAsync Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions;\n\n\n\n\n\n\nHeartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment;\n\n\n\n\n\n\nData Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks;\n\n\n\n\n\n\nSubscriptions: allow processes to dynamically detect and\n subscribe to datasources;\n\n\n\n\n\n\nTickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files;\n\n\n\n\n\n\nDatabase Writing: utility functions for writing to, sorting and\n parting on disk databases;\n\n\n\n\n\n\nCompression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression.\n\n\n\n\n\n\n\n\n\n\nAquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own:\n\n\n\n\n\n\nDiscovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process;\n\n\n\n\n\n\nGateway: A fully synchronous and asynchronous gateway is provided.\n\n\nThe gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client;\n\n\n\n\n\n\nReal Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes.\n\n\n\n\n\n\nWrite Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n \nw.q\n\n\n\n\n\n\nTickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.;\n\n\n\n\n\n\nReporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports.\n\n\n\n\n\n\nHousekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks.\n\n\n\n\n\n\nFile Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed.\n\n\n\n\n\n\nMonitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks;\n\n\n\n\n\n\nKill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.\n\n\n\n\n\n\n\n\nA Large Scale Data Processing Platform\n\n\nOne of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. \nkdb+tick\n\nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this:\n\n\n\n\nHowever, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this:\n\n\n\n\nA common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms.\n\n\nOther common production features include:\n\n\n\n\n\n\nA modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc.\n\n\n\n\n\n\nA Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job\n\n\n\n\n\n\nProcesses that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter])\n\n\n\n\n\n\nA Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system\n\n\n\n\n\n\nA Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system.\n\n\n\n\n\n\nBasic Monitoring (section [sec:monitor]) of process availability\n\n\n\n\n\n\nHousekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.\n\n\n\n\n\n\n\n\nDo I Really Have to Read This Whole Document?\n\n\nHopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition:\n\n\n\n\n\n\nWe have added a load of usage information:\n\n\naquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ...\n\n\n\nIf sourcing from another script there are hooks to modify and extend\nthe usage information as required.\n\n\n\n\n\n\nWe have some pretty extensive logging:\n\n\naquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ...\n\n\n\n\n\n\n\nWe have added functionality to find functions or variables defined\n in the session, and also to search function definitions.\n\n\nq).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api ..\n\n\n\n\n\n\n\nWe have incorporated help.q.\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\n\n\nWe have separated and commented all of our config:\n\n\naquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...\n\n\n\n\n\n\n\n\n\nOperating System and kdb+ Version\n\n\nAquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.\n\n\n\n\nLicense\n\n\nThis code is released under the MIT license.", + "title": "About" + }, + { + "location": "/Overview/#overview", + "text": "", + "title": "Overview" + }, + { + "location": "/Overview/#what-is-kdb", + "text": "kdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.", + "title": "What is kdb+?" + }, + { + "location": "/Overview/#what-is-aquaq-torq", + "text": "AquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document. AquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are: Process Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level. Code Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped. Configuration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously. Usage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message. Incoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level. Access Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management. Timer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers. Standard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled. Error Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue. Visualisation: Utilities to ease GUI development using websockets\n and HTML5. Documentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included. Utilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have: Caching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame; Timezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones; Email: an library to send emails; Async Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions; Heartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment; Data Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks; Subscriptions: allow processes to dynamically detect and\n subscribe to datasources; Tickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files; Database Writing: utility functions for writing to, sorting and\n parting on disk databases; Compression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression. AquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own: Discovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process; Gateway: A fully synchronous and asynchronous gateway is provided. The gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client; Real Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes. Write Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n w.q Tickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.; Reporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports. Housekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks. File Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed. Monitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks; Kill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.", + "title": "What is AquaQ TorQ?" + }, + { + "location": "/Overview/#a-large-scale-data-processing-platform", + "text": "One of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. kdb+tick \nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this: However, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this: A common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms. Other common production features include: A modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc. A Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job Processes that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter]) A Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system A Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system. Basic Monitoring (section [sec:monitor]) of process availability Housekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.", + "title": "A Large Scale Data Processing Platform" + }, + { + "location": "/Overview/#do-i-really-have-to-read-this-whole-document", + "text": "Hopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition: We have added a load of usage information: aquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ... If sourcing from another script there are hooks to modify and extend\nthe usage information as required. We have some pretty extensive logging: aquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ... We have added functionality to find functions or variables defined\n in the session, and also to search function definitions. q).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api .. We have incorporated help.q. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions We have separated and commented all of our config: aquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...", + "title": "Do I Really Have to Read This Whole Document?" + }, + { + "location": "/Overview/#operating-system-and-kdb-version", + "text": "AquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.", + "title": "Operating System and kdb+ Version" + }, + { + "location": "/Overview/#license", + "text": "This code is released under the MIT license.", + "title": "License" + }, + { + "location": "/gettingstarted/", + "text": "Getting Started\n\n\nkdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented.\n\n\nWe provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will:\n\n\n\n\n\n\nensure the environment is set up correctly;\n\n\n\n\n\n\ndefine some common utility functions (such as logging);\n\n\n\n\n\n\nexecute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files;\n\n\n\n\n\n\nload configuration;\n\n\n\n\n\n\nload the shared code based;\n\n\n\n\n\n\nset up the message handlers;\n\n\n\n\n\n\nload any required bespoke scripts.\n\n\n\n\n\n\nThe behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.\n\n\n\n\nUsing torq.q\n\n\ntorq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below.\n\n\n$ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1\n\n\n\nTo load a file, do:\n\n\n$ q torq.q -load myfile.q -debug -proctype testproc -procname test1\n\n\n\nIt can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script.\n\n\nmyvar:@[value;`myvar;1 2 3]\n\n\n\nThe available command line parameters are:\n\n\n\n\n\n\n\n\nCmd Line Param\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n-procname x -proctype y\n\n\nThe process name and process type\n\n\n\n\n\n\n-procfile x\n\n\nThe name of the file to get the process information from\n\n\n\n\n\n\n-load x [y..z]\n\n\nThe files or database directory to load\n\n\n\n\n\n\n-loaddir x [y..z]\n\n\nLoad all .q, .k files in specified directories\n\n\n\n\n\n\n-localtime\n\n\nSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P\n\n\n\n\n\n\n-trap\n\n\nAny errors encountered during initialization when loading external files will be caught and logged, processing will continue\n\n\n\n\n\n\n-stop\n\n\nStop loading the file if an error is encountered but do not exit\n\n\n\n\n\n\n-noredirect\n\n\nDo not redirect std out/std err to a file (useful for debugging)\n\n\n\n\n\n\n-noredirectalias\n\n\nDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)\n\n\n\n\n\n\n-noconfig\n\n\nDo not load configuration\n\n\n\n\n\n\n-nopi\n\n\nReset the definition of .z.pi to the initial value (useful for debugging)\n\n\n\n\n\n\n-debug\n\n\nEquivalent to [-nopi -noredirect]\n\n\n\n\n\n\n-usage\n\n\nPrint usage info and exit\n\n\n\n\n\n\n\n\nIn addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.\n\n\n\n\nEnvironment Variables\n\n\nFive environment variables are required:\n\n\n\n\n\n\n\n\nEnvironment Variable\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nKDBCONFIG\n\n\nThe base configuration directory\n\n\n\n\n\n\nKDBCODE\n\n\nThe base code directory\n\n\n\n\n\n\nKDBLOGS\n\n\nWhere standard out/error and usage logs are written\n\n\n\n\n\n\nKDBHTML\n\n\nContains HTML files\n\n\n\n\n\n\nKDBLIB\n\n\nContains supporting library files\n\n\n\n\n\n\n\n\ntorq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.\n\n\n\n\nProcess Identification\n\n\nAt the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded.\n\n\nThe most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways:\n\n\n\n\n\n\nFrom the process file in the default location of\n $KDBCONFIG/process.csv;\n\n\n\n\n\n\nFrom the process file defined using the command line parameter\n -procfile;\n\n\n\n\n\n\nFrom the port number it is started on, by referring to the process\n file for further process details;\n\n\n\n\n\n\nUsing the command line parameters -proctype and -procname;\n\n\n\n\n\n\nBy defining .proc.proctype and .proc.procname in a script which\n loads torq.q.\n\n\n\n\n\n\nFor options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file).\n\n\nFor option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry.\n\n\nThe process file has format as below.\n\n\naquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2\n\n\n\nThe process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.\n\n\n\n\nLogging\n\n\nBy default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are:\n\n\n\n\n\n\n\n\nLog File\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nout_[procname]_[date].log\n\n\nTimestamped out log\n\n\n\n\n\n\nerr_[procname]_[date].log\n\n\nTimestamped error log\n\n\n\n\n\n\nout_[procname].log\n\n\nAlias to current log log\n\n\n\n\n\n\nerr_[procname].log\n\n\nAlias to current error log\n\n\n\n\n\n\n\n\nThe date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.\n\n\n\n\nConfiguration Loading\n\n\nDefault Configuration Loading\n\n\nDefault process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:-\n\n\n\n\n\n\ndefault.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments;\n\n\n\n\n\n\n[[proctype]]{}.q: configuration for a specific process type;\n\n\n\n\n\n\n[[procname]]{}.q: configuration for a specific named process.\n\n\n\n\n\n\nThe only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.\n\n\nApplication Configuration Loading\n\n\nApplication specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:-\n\n\n\n\n\n\ndefault.q: Application default configuration loaded by all\n processes.\n\n\n\n\n\n\n[[proctype]]{}.q: Application specific configuration for a\n specific process type.\n\n\n\n\n\n\n[[procname]]{}.q: Appliction specific configuration for a specific\n named process.\n\n\n\n\n\n\nAll loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory.\n\n\nAll configuration is loaded before code.\n\n\n\n\nCode Loading\n\n\nCode is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder:\n\n\n\n\n\n\n$KDBCODE/common: shared codebase loaded by all processes;\n\n\n\n\n\n\n$KDBCODE/[proctype]: code for a specific process type;\n\n\n\n\n\n\n$KDBCODE/[procname]: code for a specific process name;\n\n\n\n\n\n\nFor any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded.\n\n\nAdditional directories can be loaded using the -loaddir command line\nparameter.\n\n\n\n\nInitialization Errors\n\n\nInitialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", + "title": "Getting Started" + }, + { + "location": "/gettingstarted/#getting-started", + "text": "kdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented. We provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will: ensure the environment is set up correctly; define some common utility functions (such as logging); execute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files; load configuration; load the shared code based; set up the message handlers; load any required bespoke scripts. The behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.", + "title": "Getting Started" + }, + { + "location": "/gettingstarted/#using-torqq", + "text": "torq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below. $ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1 To load a file, do: $ q torq.q -load myfile.q -debug -proctype testproc -procname test1 It can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script. myvar:@[value;`myvar;1 2 3] The available command line parameters are: Cmd Line Param Description -procname x -proctype y The process name and process type -procfile x The name of the file to get the process information from -load x [y..z] The files or database directory to load -loaddir x [y..z] Load all .q, .k files in specified directories -localtime Sets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P -trap Any errors encountered during initialization when loading external files will be caught and logged, processing will continue -stop Stop loading the file if an error is encountered but do not exit -noredirect Do not redirect std out/std err to a file (useful for debugging) -noredirectalias Do not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix) -noconfig Do not load configuration -nopi Reset the definition of .z.pi to the initial value (useful for debugging) -debug Equivalent to [-nopi -noredirect] -usage Print usage info and exit In addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.", + "title": "Using torq.q" + }, + { + "location": "/gettingstarted/#environment-variables", + "text": "Five environment variables are required: Environment Variable Description KDBCONFIG The base configuration directory KDBCODE The base code directory KDBLOGS Where standard out/error and usage logs are written KDBHTML Contains HTML files KDBLIB Contains supporting library files torq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.", + "title": "Environment Variables" + }, + { + "location": "/gettingstarted/#process-identification", + "text": "At the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded. The most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways: From the process file in the default location of\n $KDBCONFIG/process.csv; From the process file defined using the command line parameter\n -procfile; From the port number it is started on, by referring to the process\n file for further process details; Using the command line parameters -proctype and -procname; By defining .proc.proctype and .proc.procname in a script which\n loads torq.q. For options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file). For option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry. The process file has format as below. aquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2 The process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.", + "title": "Process Identification" + }, + { + "location": "/gettingstarted/#logging", + "text": "By default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are: Log File Description out_[procname]_[date].log Timestamped out log err_[procname]_[date].log Timestamped error log out_[procname].log Alias to current log log err_[procname].log Alias to current error log The date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.", + "title": "Logging" + }, + { + "location": "/gettingstarted/#configuration-loading", + "text": "", + "title": "Configuration Loading" + }, + { + "location": "/gettingstarted/#default-configuration-loading", + "text": "Default process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:- default.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments; [[proctype]]{}.q: configuration for a specific process type; [[procname]]{}.q: configuration for a specific named process. The only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.", + "title": "Default Configuration Loading" + }, + { + "location": "/gettingstarted/#application-configuration-loading", + "text": "Application specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:- default.q: Application default configuration loaded by all\n processes. [[proctype]]{}.q: Application specific configuration for a\n specific process type. [[procname]]{}.q: Appliction specific configuration for a specific\n named process. All loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory. All configuration is loaded before code.", + "title": "Application Configuration Loading" + }, + { + "location": "/gettingstarted/#code-loading", + "text": "Code is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder: $KDBCODE/common: shared codebase loaded by all processes; $KDBCODE/[proctype]: code for a specific process type; $KDBCODE/[procname]: code for a specific process name; For any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded. Additional directories can be loaded using the -loaddir command line\nparameter.", + "title": "Code Loading" + }, + { + "location": "/gettingstarted/#initialization-errors", + "text": "Initialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", + "title": "Initialization Errors" + }, + { + "location": "/utilities/", + "text": "Utilities\n\n\nWe have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.\n\n\n\n\napi.q\n\n\nThis provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order.\n\n\nDefinitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition.\n\n\nWhether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace.\n\n\n.api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done.\n\n\n\n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 \n ..\n mmax | function .q 1 \n ..\n .clients.MAXIDLE | variable .clients 0 \n ..\n .access.MAXSIZE | variable .access 0 \n ..\n .cache.maxsize | variable .cache 1 \nThe maximum size in..\n .cache.maxindividual| variable .cache 1 \nThe maximum size in..\n max | primitive 1 \n ..\n q).api.f\nmax*\n \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n \n \n \n max | primitive 1 \n \n \n \n\n\n\n\n\n.api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches.\n\n\n.api.s is used to search function definitions for specific values.\n\n\nq).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE\ns:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n..\n\n\n\n.api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views.\n\n\nq).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n..\n\n\n\n.api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging.\n\n\nq)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g\n\n\n\n\n\ntimer.q\n\n\nkdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms).\n\n\nThere are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen\n\n\n\n\n\n\nmode 0 will reschedule for T0+P;\n\n\n\n\n\n\nmode 1 will reschedule for T1+P;\n\n\n\n\n\n\nmode 2 will reschedule for T2+P.\n\n\n\n\n\n\nBoth mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.\n\n\n\n\nasync.q\n\n\nkdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway):\n\n\n\n\n\n\ndeferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed;\n\n\n\n\n\n\nasynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result.\n\n\n\n\n\n\nThe code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results).\n\n\nq).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\"\n\n\n\n.async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready.\n\n\nq).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3\n\n\n\nFor more details, see .api.p\u201c.async.*\u201d.\n\n\n\n\ncache.q\n\n\ncache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries.\n\n\nThe result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold:\n\n\n\n\n\n\nthe function is run multiple times with the same parameters (perhaps\n different clients all want the same result set);\n\n\n\n\n\n\nthe result set changes infrequently or the clients can accept\n slightly out-of-date values;\n\n\n\n\n\n\nthe result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts.\n\n\n\n\n\n\nThe cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size.\n\n\nIf a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored.\n\n\nThe main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache.\n\n\nThe function is run and the result placed in the cache:\n\n\nq)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3\n\n\n\nThe second time round, the result set is returned immediately from the\ncache as we are within the staletime value:\n\n\nq)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3\n\n\n\nIf the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned:\n\n\nq)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3\n\n\n\nThe cache performance is tracked:\n\n\nq).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2\n\n\n\nSee .api.p.cache.*for more details.\n\n\n\n\nemail.q\n\n\nA library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details.\n\n\nThe main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nurl\n\n\nY\n\n\nsymbol\n\n\nURL of mail server e.g. smtp://mail.example.com\n\n\n\n\n\n\nuser\n\n\nY\n\n\nsymbol\n\n\nUsername of user to login as\n\n\n\n\n\n\npassword\n\n\nY\n\n\nsymbol\n\n\nPassword for user\n\n\n\n\n\n\nusessl\n\n\nN\n\n\nboolean\n\n\nConnect using SSL/TLS, defaults to false\n\n\n\n\n\n\nfrom\n\n\nN\n\n\nsymbol\n\n\nEmail from field, defaults to torq@aquaq.co.uk\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i\n\n\n\nThe email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nto\n\n\nY\n\n\nsymbol (list)\n\n\naddresses to send to\n\n\n\n\n\n\nsubject\n\n\nY\n\n\nchar list\n\n\nemail subject\n\n\n\n\n\n\nbody\n\n\nY\n\n\nlist of char lists\n\n\nemail body\n\n\n\n\n\n\ncc\n\n\nN\n\n\nsymbol (list)\n\n\ncc list\n\n\n\n\n\n\nbodyType\n\n\nN\n\n\nsymbol\n\n\ntype of email body. Can be `text or `html. Default is `text\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i\n\n\n\nNote that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time.\n\n\nTwo further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection.\n\n\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i\n\n\n\n.email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information.\n\n\nq).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n...\n\n\n\nAdditionally functions are available within the email library. See\n.api.p.email.*for more details.\n\n\nEmails with SSL certificates from Windows\n\n\nIf you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are:\n\n\n\n\n\n\ndownload\n \nthis\n\n and save it to your PC\n\n\n\n\n\n\nset\n\n\n CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt\n\n\n\n\n\n\n\nMore information is available\n\nhere\n\nand \nhere\n\n\n\n\ntimezone.q\n\n\nA slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.\n\n\n\n\ncompress.q\n\n\ncompress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table.\n\n\nThe utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed.\n\n\nCompression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.)\n\n\nThe compressionconfig.csv file should have the following format:\n\n\ntable,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7\n\n\n\nThis file can be placed in the config folder, or a path to the file\ngiven at run time.\n\n\nThe compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file.\n\n\nThis utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed:\n\n\n.cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nThis function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already.\n\n\nfullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n....\n\n\n\nTo then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles):\n\n\n.cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nTo run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use:\n\n\n.cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file\n\n\n\nLogs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio:\n\n\n|comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file.\n\n\n\nA table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab:\n\n\nfile algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n.....\n\n\n\nA note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.\n\n\n\n\ndataloader.q\n\n\nThis script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of \nthe data loader example on\ncode.kx\n.\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields:\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nheaders\n\n\nY\n\n\nsymbol list\n\n\nNames of the header columns in the file\n\n\n\n\n\n\ntypes\n\n\nY\n\n\nchar list\n\n\nData types to read from the file\n\n\n\n\n\n\nseparator\n\n\nY\n\n\nchar[list]\n\n\nDelimiting character. Enlist it if first line of file is header data\n\n\n\n\n\n\ntablename\n\n\nY\n\n\nsymbol\n\n\nName of table to write data to\n\n\n\n\n\n\ndbdir\n\n\nY\n\n\nsymbol\n\n\nDirectory to write data to\n\n\n\n\n\n\npartitiontype\n\n\nN\n\n\nsymbol\n\n\nPartitioning to use. Must be one of\n\n\n\n\n\n\n`date`month`year`int. Default is `date\n\n\n\n\n\n\n\n\n\n\n\n\npartitioncol\n\n\nN\n\n\nsymbol\n\n\nColumn to use to extract partition information.Default is `time\n\n\n\n\n\n\ndataprocessfunc\n\n\nN\n\n\nfunction\n\n\nDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}\n\n\n\n\n\n\nchunksize\n\n\nN\n\n\nint\n\n\nData size in bytes to read in one chunk. Default is 100 MB\n\n\n\n\n\n\ncompression\n\n\nN\n\n\nint list\n\n\nCompression parameters to use e.g. 17 2 6. Default is empty list for no compression\n\n\n\n\n\n\ngc\n\n\nN\n\n\nboolean\n\n\nWhether to run garbage collection at appropriate points. Default is 0b (false)\n\n\n\n\n\n\n\n\nExample usage:\n\n\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]\n\n\n\n\n\nsubscriptions.q\n\n\nThe subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions).\n\n\n.sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant:\n\n\n.sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\n.sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants:\n\n\n.sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nThe subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants:\n\n\n.sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nSee .api.p\u201c.sub.*\u201d for more details.\n\n\n\n\npubsub.q\n\n\npubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.\n\n\n\n\ntplogutils.q\n\n\ntplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.\n\n\n\n\nmonitoringchecks.q\n\n\nmonitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure:\n\n\n\n\n\n\ntable sizes are increasing during live capture\n\n\n\n\n\n\nthe HDB data saves down correctly\n\n\n\n\n\n\nthe allocated memory of a process does not increase past a certain\n size\n\n\n\n\n\n\nthe size of the symbol list in memory doesn\u2019t grow to big\n\n\n\n\n\n\nthe process does not have too much on its pending subscriber queue\n\n\n\n\n\n\nThese checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.\n\n\n\n\nheartbeat.q\n\n\nheartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.\n\n\n\n\ndbwriteutils.q\n\n\nThis contains a set of utility functions for writing data to historic\ndatabases.\n\n\nSorting and Attributes\n\n\nThe sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration).\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\n\n\n\nAs an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true):\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0\n\n\n\nTo invoke the sort utilities, supply a list of (tablename; partitions)\ne.g.\n\n\nq).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table\n\n\n\nA different sort configuration file can be loaded with\n\n\n.sort.getsortcsv[`:file]\n\n\n\nGarbage Collection\n\n\nThe garbage collection utility prints some debug information before and\nafter the garbage collection.\n\n\nq).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n\n\n\nTable Manipulation\n\n\nThe table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.\n\n\n\n\nhelp.q\n\n\nThe standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[\ncode.kx\n].\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\nhtml.q\n\n\nAn HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the \n.html\n namespace.\n\n\n\n\nAdditional Utilities\n\n\nThere are some additional user contributed utility scripts available on\ncode.kx which are good candidates for inclusion. These could either be\ndropped into the common code directory, or if not globally applicable\nthen in the code directory for either the process type or name. The full\nset of user contributed code is documented\n\nhere\n.\n\n\n\n\nFull API\n\n\nThe full public api can be found by running\n\n\nq).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n..\n\n\n\nCombined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions.\n\n\n\n\n\n\n\n\nNamespace\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.proc\n\n\nProcess API\n\n\n\n\n\n\n.lg\n\n\nStandard out/error logging API\n\n\n\n\n\n\n.err\n\n\nError throwing API\n\n\n\n\n\n\n.usage\n\n\nUsage logging API\n\n\n\n\n\n\n.access\n\n\nPermissions API\n\n\n\n\n\n\n.clients\n\n\nClient tracking API\n\n\n\n\n\n\n.servers\n\n\nServer tracking API\n\n\n\n\n\n\n.async\n\n\nAsync communication API\n\n\n\n\n\n\n.timer\n\n\nTimer API\n\n\n\n\n\n\n.cache\n\n\nCaching API\n\n\n\n\n\n\n.tz\n\n\nTimezone conversions API\n\n\n\n\n\n\n.checks\n\n\nMonitoring API\n\n\n\n\n\n\n.cmp\n\n\nCompression API\n\n\n\n\n\n\n.ps\n\n\nPublish and Subscribe API\n\n\n\n\n\n\n.hb\n\n\nHeartbeating API\n\n\n\n\n\n\n.loader\n\n\nData Loader API\n\n\n\n\n\n\n.sort\n\n\nData sorting and attribute setting API\n\n\n\n\n\n\n.sub\n\n\nSubscription API\n\n\n\n\n\n\n.gc\n\n\nGarbage Collection API\n\n\n\n\n\n\n.tplog\n\n\nTickerplant Log Replay API\n\n\n\n\n\n\n.api\n\n\nAPI management API\n\n\n\n\n\n\n\n\n\n\nModified u.q\n\n\nStarting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.", + "title": "Utilities" + }, + { + "location": "/utilities/#utilities", + "text": "We have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.", + "title": "Utilities" + }, + { + "location": "/utilities/#apiq", + "text": "This provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order. Definitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition. Whether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace. .api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done. \n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 ..\n mmax | function .q 1 ..\n .clients.MAXIDLE | variable .clients 0 ..\n .access.MAXSIZE | variable .access 0 ..\n .cache.maxsize | variable .cache 1 The maximum size in..\n .cache.maxindividual| variable .cache 1 The maximum size in..\n max | primitive 1 ..\n q).api.f max* \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n max | primitive 1 .api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches. .api.s is used to search function definitions for specific values. q).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE s:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n.. .api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views. q).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n.. .api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging. q)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g", + "title": "api.q" + }, + { + "location": "/utilities/#timerq", + "text": "kdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms). There are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen mode 0 will reschedule for T0+P; mode 1 will reschedule for T1+P; mode 2 will reschedule for T2+P. Both mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.", + "title": "timer.q" + }, + { + "location": "/utilities/#asyncq", + "text": "kdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway): deferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed; asynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result. The code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results). q).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\" .async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready. q).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3 For more details, see .api.p\u201c.async.*\u201d.", + "title": "async.q" + }, + { + "location": "/utilities/#cacheq", + "text": "cache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries. The result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold: the function is run multiple times with the same parameters (perhaps\n different clients all want the same result set); the result set changes infrequently or the clients can accept\n slightly out-of-date values; the result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts. The cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size. If a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored. The main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache. The function is run and the result placed in the cache: q)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3 The second time round, the result set is returned immediately from the\ncache as we are within the staletime value: q)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3 If the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned: q)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3 The cache performance is tracked: q).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2 See .api.p.cache.*for more details.", + "title": "cache.q" + }, + { + "location": "/utilities/#emailq", + "text": "A library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details. The main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure. Parameter Req Type Description url Y symbol URL of mail server e.g. smtp://mail.example.com user Y symbol Username of user to login as password Y symbol Password for user usessl N boolean Connect using SSL/TLS, defaults to false from N symbol Email from field, defaults to torq@aquaq.co.uk debug N integer Debug level. 0=no output, 1=normal output, 2=verbose output. Default is 1 An example is: q).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i The email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure. Parameter Req Type Description to Y symbol (list) addresses to send to subject Y char list email subject body Y list of char lists email body cc N symbol (list) cc list bodyType N symbol type of email body. Can be `text or `html. Default is `text debug N integer Debug level. 0=no output, 1=normal output,2=verbose output. Default is 1 An example is: q).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i Note that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time. Two further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection. q).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i .email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information. q).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n... Additionally functions are available within the email library. See\n.api.p.email.*for more details.", + "title": "email.q" + }, + { + "location": "/utilities/#emails-with-ssl-certificates-from-windows", + "text": "If you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are: download\n this \n and save it to your PC set CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt More information is available here \nand here", + "title": "Emails with SSL certificates from Windows" + }, + { + "location": "/utilities/#timezoneq", + "text": "A slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.", + "title": "timezone.q" + }, + { + "location": "/utilities/#compressq", + "text": "compress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table. The utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed. Compression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.) The compressionconfig.csv file should have the following format: table,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7 This file can be placed in the config folder, or a path to the file\ngiven at run time. The compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file. This utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed: .cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file This function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already. fullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n.... To then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles): .cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file To run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use: .cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file Logs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio: |comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file. A table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab: file algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n..... A note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.", + "title": "compress.q" + }, + { + "location": "/utilities/#dataloaderq", + "text": "This script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of the data loader example on\ncode.kx .\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields: Parameter Req Type Description headers Y symbol list Names of the header columns in the file types Y char list Data types to read from the file separator Y char[list] Delimiting character. Enlist it if first line of file is header data tablename Y symbol Name of table to write data to dbdir Y symbol Directory to write data to partitiontype N symbol Partitioning to use. Must be one of `date`month`year`int. Default is `date partitioncol N symbol Column to use to extract partition information.Default is `time dataprocessfunc N function Diadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y} chunksize N int Data size in bytes to read in one chunk. Default is 100 MB compression N int list Compression parameters to use e.g. 17 2 6. Default is empty list for no compression gc N boolean Whether to run garbage collection at appropriate points. Default is 0b (false) Example usage: .loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]", + "title": "dataloader.q" + }, + { + "location": "/utilities/#subscriptionsq", + "text": "The subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions). .sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant: .sub.getsubscriptionhandles[`tickerplant;`;()!()] .sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants: .sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] The subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants: .sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] See .api.p\u201c.sub.*\u201d for more details.", + "title": "subscriptions.q" + }, + { + "location": "/utilities/#pubsubq", + "text": "pubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.", + "title": "pubsub.q" + }, + { + "location": "/utilities/#tplogutilsq", + "text": "tplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.", + "title": "tplogutils.q" + }, + { + "location": "/utilities/#monitoringchecksq", + "text": "monitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure: table sizes are increasing during live capture the HDB data saves down correctly the allocated memory of a process does not increase past a certain\n size the size of the symbol list in memory doesn\u2019t grow to big the process does not have too much on its pending subscriber queue These checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.", + "title": "monitoringchecks.q" + }, + { + "location": "/utilities/#heartbeatq", + "text": "heartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.", + "title": "heartbeat.q" + }, + { + "location": "/utilities/#dbwriteutilsq", + "text": "This contains a set of utility functions for writing data to historic\ndatabases.", + "title": "dbwriteutils.q" + }, + { + "location": "/utilities/#sorting-and-attributes", + "text": "The sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration). aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1 As an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true): aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0 To invoke the sort utilities, supply a list of (tablename; partitions)\ne.g. q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table A different sort configuration file can be loaded with .sort.getsortcsv[`:file]", + "title": "Sorting and Attributes" + }, + { + "location": "/utilities/#garbage-collection", + "text": "The garbage collection utility prints some debug information before and\nafter the garbage collection. q).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB", + "title": "Garbage Collection" + }, + { + "location": "/utilities/#table-manipulation", + "text": "The table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.", + "title": "Table Manipulation" + }, + { + "location": "/utilities/#helpq", + "text": "The standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[ code.kx ]. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions", + "title": "help.q" + }, + { + "location": "/utilities/#htmlq", + "text": "An HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the .html namespace.", + "title": "html.q" + }, + { + "location": "/utilities/#additional-utilities", + "text": "There are some additional user contributed utility scripts available on\ncode.kx which are good candidates for inclusion. These could either be\ndropped into the common code directory, or if not globally applicable\nthen in the code directory for either the process type or name. The full\nset of user contributed code is documented here .", + "title": "Additional Utilities" + }, + { + "location": "/utilities/#full-api", + "text": "The full public api can be found by running q).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n.. Combined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions. Namespace Description .proc Process API .lg Standard out/error logging API .err Error throwing API .usage Usage logging API .access Permissions API .clients Client tracking API .servers Server tracking API .async Async communication API .timer Timer API .cache Caching API .tz Timezone conversions API .checks Monitoring API .cmp Compression API .ps Publish and Subscribe API .hb Heartbeating API .loader Data Loader API .sort Data sorting and attribute setting API .sub Subscription API .gc Garbage Collection API .tplog Tickerplant Log Replay API .api API management API", + "title": "Full API" + }, + { + "location": "/utilities/#modified-uq", + "text": "Starting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.", + "title": "Modified u.q" + }, + { + "location": "/handlers/", + "text": "Message Handlers\n\n\nThere is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to\n\ncode.kx\n.\n\n\nEvery external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file.\n\n\n\n\n\n\n\n\nScript\n\n\nNS\n\n\nDiag\n\n\nFunction\n\n\nModifies\n\n\n\n\n\n\n\n\n\n\nlogusage.q\n\n\n.usage\n\n\nY\n\n\nLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates\n\n\npw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer\n\n\n\n\n\n\ncontrolaccess.q\n\n\n.access\n\n\nN\n\n\nRestrict access for set of users/user groups to a list of functions, and from a defined set of servers\n\n\npw, pg, ps, ws, ph, pp, pi\n\n\n\n\n\n\ntrackclients.q\n\n\n.clients\n\n\nY\n\n\nTrack client process details including then number of requests and cumulative data size returned\n\n\npo, pg, ps, ws, pc\n\n\n\n\n\n\ntrackservers.q\n\n\n.servers\n\n\nY\n\n\nDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.\n\n\npc, timer\n\n\n\n\n\n\nzpsignore.q\n\n\n.zpsignore\n\n\nN\n\n\nOverride async message handler based on certain message patterns\n\n\nps\n\n\n\n\n\n\nwriteaccess.q\n\n\n.readonly\n\n\nN\n\n\nRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.\n\n\npg, ps, ws, ph, pp\n\n\n\n\n\n\n\n\nEach customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files.\n\n\n/- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)\n\n\n\n\n\nlogusage.q\n\n\nlogusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx.\n\n\nIn its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because:\n\n\n\n\n\n\nlogging to memory enables easy interrogation of client interaction;\n\n\n\n\n\n\nlogging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail;\n\n\n\n\n\n\nlogging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution;\n\n\n\n\n\n\nlogging after a query captures the time taken, result set size and\n resulting state;\n\n\n\n\n\n\nlogging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems.\n\n\n\n\n\n\nThe following fields are logged in .usage.usage:\n\n\n\n\n\n\n\n\nField\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\ntime\n\n\nTime the row was added to the table\n\n\n\n\n\n\nid\n\n\nID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication\n\n\n\n\n\n\ntimer\n\n\nExecution time. Null for rows with status=b (before)\n\n\n\n\n\n\nzcmd\n\n\n.z handler the query arrived through\n\n\n\n\n\n\nstatus\n\n\nQuery status. One of b, c or e (before, complete, error)\n\n\n\n\n\n\na\n\n\nAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname\n\n\n\n\n\n\nu\n\n\nUsername of sender\n\n\n\n\n\n\nw\n\n\nHandle of sender\n\n\n\n\n\n\ncmd\n\n\nCommand sent\n\n\n\n\n\n\nmem\n\n\nMemory statistics\n\n\n\n\n\n\nsz\n\n\nSize of result. Null for rows with status of b or e\n\n\n\n\n\n\nerror\n\n\nError message\n\n\n\n\n\n\n\n\n\n\ncontrolaccess.q\n\n\ncontrolaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects:\n\n\n\n\n\n\nthe host/ip address of the servers which are allowed to access the\n process;\n\n\n\n\n\n\ndefinition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do;\n\n\n\n\n\n\nthe group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions;\n\n\n\n\n\n\nthe maximum size of the result set returned to a client.\n\n\n\n\n\n\nThe access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions.\n\n\n\n\n\n\n\n\nFile\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n*_hosts.csv\n\n\nContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed\n\n\n\n\n\n\n*_users.csv\n\n\nContains individual users and the user groups they are are a member of\n\n\n\n\n\n\n*_functions.csv\n\n\nContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users\n\n\n\n\n\n\n\n\nThe permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv.\n\n\nWhen a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.\n\n\n\n\ntrackclients.q\n\n\ntrackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service.\n\n\nWhenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.\n\n\n\n\ntrackservers.q\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.\n\n\n\n\nzpsignore.q\n\n\nzpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.\n\n\n\n\nwriteaccess.q\n\n\nwriteaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.\n\n\npermissions.q\n\n\npermissions.q is used to control client access to a server process. It\nallows:\n\n\n\n\n\n\nAccess control via username/password access, either in combination\n with the -u/U process flags or in place of them.\n\n\n\n\n\n\nDefinition of user groups, which control variable access.\n\n\n\n\n\n\nDefinition of user roles, which allow control over function\n execution.\n\n\n\n\n\n\nDeeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses.\n\n\n\n\n\n\nAccess restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions.\n\n\nPermissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself.\n\n\nThe access schema consists of 7 control tables:\n\n\n\n\n\n\n\n\nName\n\n\nDescriptions\n\n\n\n\n\n\n\n\n\n\nUser\n\n\nUsername, locality, encryption type and password hash\n\n\n\n\n\n\nUsergroup\n\n\nUser and their group.\n\n\n\n\n\n\nUserrole\n\n\nUser and role.\n\n\n\n\n\n\nFunctiongroup\n\n\nFunctions and their group\n\n\n\n\n\n\nFunction\n\n\nFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.\n\n\n\n\n\n\nAccess\n\n\nVariable names, the groups which can access them, and the read or write access level.\n\n\n\n\n\n\nVirtualtable\n\n\nVirtual table name, main table name, and the where clause it enforces on access to that table.\n\n\n\n\n\n\n\n\nIn addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself.\n\n\nA user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g.\n\n\n\n\n\n\n\n\nTable\n\n\nGroup\n\n\nLevel\n\n\n\n\n\n\n\n\n\n\nquote\n\n\nheadtrader\n\n\nwrite\n\n\n\n\n\n\ntrade\n\n\njuniortrader\n\n\nread\n\n\n\n\n\n\n\n\nHere, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow.\n\n\nThe permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments.\n\n\nFunction access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar:\n\n\n\n\n\n\n\n\nFunction\n\n\nRole\n\n\nParam. Check\n\n\n\n\n\n\n\n\n\n\ntimedata\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\ntimedata\n\n\nnormal user\n\n\n{x[`bkttype] in `hh}\n\n\n\n\n\n\nselect\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\n\n\nThe parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check.\n\n\nFurther restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g.\n\n\n\n\n\n\n\n\nVirtual Table\n\n\nTable\n\n\nWhere Clause\n\n\n\n\n\n\n\n\n\n\ntrade_lse\n\n\ntrade\n\n\n,(in;`src;\u201cL\u201d)\n\n\n\n\n\n\nquote_new\n\n\nquote\n\n\n,(\n;`time;(-;`.z.p;01:00))\n\n\n\n\n\n\n\n\nWhen a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable.\n\n\nIf the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role.\n\n\nThe permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions.\n\n\nAdding to the groups and roles is handled by the functions:\n\n\nadduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"]\n\n\n\nwhich are further explained in the script API.\n\n\nPermission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.\n\n\nUsage Example\n\n\nTo connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so:\n\n\n.pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist(\n;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]\n\n\n\nThis provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth.\n\n\nAdam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it.\n\n\nAdditionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined:\n\n\n.pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp]\n\n\n\nAnd then grant that role access to the .u.upd function:\n\n\n.pm.grantfunction[`.u.upd;`tp;{1b}]\n\n\n\nAlthough the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.\n\n\nGateway Example\n\n\nThe gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified.\n\n\nWithin the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]\n\n\n\nSince .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]\n\n\n\n\n\nDiagnostic Reporting\n\n\nThe message handler modifications provide a wealth of diagnostic\ninformation including:\n\n\n\n\n\n\nthe timings and memory usage for every query run on a process;\n\n\n\n\n\n\nfailed queries;\n\n\n\n\n\n\nclients trying to do things they are not permissioned for;\n\n\n\n\n\n\nthe clients which are querying often and/or regularly extracting\n large datasets;\n\n\n\n\n\n\nthe number of clients currently connected;\n\n\n\n\n\n\ntimer calls and how long they take.\n\n\n\n\n\n\nAlthough not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", + "title": "Handlers" + }, + { + "location": "/handlers/#message-handlers", + "text": "There is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to code.kx . Every external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file. Script NS Diag Function Modifies logusage.q .usage Y Log all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates pw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer controlaccess.q .access N Restrict access for set of users/user groups to a list of functions, and from a defined set of servers pw, pg, ps, ws, ph, pp, pi trackclients.q .clients Y Track client process details including then number of requests and cumulative data size returned po, pg, ps, ws, pc trackservers.q .servers Y Discover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service. pc, timer zpsignore.q .zpsignore N Override async message handler based on certain message patterns ps writeaccess.q .readonly N Restrict client write access to prevent any modification to data in place. Also disables all HTTP access. pg, ps, ws, ph, pp Each customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files. /- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)", + "title": "Message Handlers" + }, + { + "location": "/handlers/#logusageq", + "text": "logusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx. In its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because: logging to memory enables easy interrogation of client interaction; logging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail; logging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution; logging after a query captures the time taken, result set size and\n resulting state; logging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems. The following fields are logged in .usage.usage: Field Description time Time the row was added to the table id ID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication timer Execution time. Null for rows with status=b (before) zcmd .z handler the query arrived through status Query status. One of b, c or e (before, complete, error) a Address of sender. .dotz.ipa can be used to convert from the integer format to a hostname u Username of sender w Handle of sender cmd Command sent mem Memory statistics sz Size of result. Null for rows with status of b or e error Error message", + "title": "logusage.q" + }, + { + "location": "/handlers/#controlaccessq", + "text": "controlaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects: the host/ip address of the servers which are allowed to access the\n process; definition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do; the group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions; the maximum size of the result set returned to a client. The access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions. File Description *_hosts.csv Contains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed *_users.csv Contains individual users and the user groups they are are a member of *_functions.csv Contains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users The permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv. When a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.", + "title": "controlaccess.q" + }, + { + "location": "/handlers/#trackclientsq", + "text": "trackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service. Whenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.", + "title": "trackclients.q" + }, + { + "location": "/handlers/#trackserversq", + "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.", + "title": "trackservers.q" + }, + { + "location": "/handlers/#zpsignoreq", + "text": "zpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.", + "title": "zpsignore.q" + }, + { + "location": "/handlers/#writeaccessq", + "text": "writeaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.", + "title": "writeaccess.q" + }, + { + "location": "/handlers/#permissionsq", + "text": "permissions.q is used to control client access to a server process. It\nallows: Access control via username/password access, either in combination\n with the -u/U process flags or in place of them. Definition of user groups, which control variable access. Definition of user roles, which allow control over function\n execution. Deeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses. Access restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions. Permissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself. The access schema consists of 7 control tables: Name Descriptions User Username, locality, encryption type and password hash Usergroup User and their group. Userrole User and role. Functiongroup Functions and their group Function Function names, the roles which can access them, and a lambda checking the parameters those roles can use. Access Variable names, the groups which can access them, and the read or write access level. Virtualtable Virtual table name, main table name, and the where clause it enforces on access to that table. In addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself. A user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g. Table Group Level quote headtrader write trade juniortrader read Here, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow. The permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments. Function access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar: Function Role Param. Check timedata quant {1b} timedata normal user {x[`bkttype] in `hh} select quant {1b} The parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check. Further restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g. Virtual Table Table Where Clause trade_lse trade ,(in;`src;\u201cL\u201d) quote_new quote ,( ;`time;(-;`.z.p;01:00)) When a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable. If the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role. The permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions. Adding to the groups and roles is handled by the functions: adduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"] which are further explained in the script API. Permission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.", + "title": "permissions.q" + }, + { + "location": "/handlers/#usage-example", + "text": "To connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so: .pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist( ;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}] This provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth. Adam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it. Additionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined: .pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp] And then grant that role access to the .u.upd function: .pm.grantfunction[`.u.upd;`tp;{1b}] Although the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.", + "title": "Usage Example" + }, + { + "location": "/handlers/#gateway-example", + "text": "The gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified. Within the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use: .pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}] Since .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables: .pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]", + "title": "Gateway Example" + }, + { + "location": "/handlers/#diagnostic-reporting", + "text": "The message handler modifications provide a wealth of diagnostic\ninformation including: the timings and memory usage for every query run on a process; failed queries; clients trying to do things they are not permissioned for; the clients which are querying often and/or regularly extracting\n large datasets; the number of clients currently connected; timer calls and how long they take. Although not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", + "title": "Diagnostic Reporting" + }, + { + "location": "/conn/", + "text": "Connection Management\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk\n\n\n\nConnections\n\n\nProcesses locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available.\n\n\nThe main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.\n\n\nProcess Attributes\n\n\nEach process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include:\n\n\n\n\n\n\nrange of data contained in the process;\n\n\n\n\n\n\navailable tables;\n\n\n\n\n\n\ninstrument universe;\n\n\n\n\n\n\nphysical location;\n\n\n\n\n\n\nany other fields of relevance.\n\n\n\n\n\n\nConnection Passwords\n\n\nThe password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.\n\n\nRetrieving and Using Handles\n\n\nA function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters:\n\n\n\n\n\n\ntype-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname);\n\n\n\n\n\n\ntypes-or-names: the types or names to retrieve e.g. hdb;\n\n\n\n\n\n\nrequired-attributes: the dictionary of attributes to match on;\n\n\n\n\n\n\nopen-dead-connections: whether to re-open dead connections;\n\n\n\n\n\n\nonly-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter.\n\n\n\n\n\n\n.servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes).\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\n\n\n\n.servers.getservers will try to automatically re-open connections if\nrequired.\n\n\nq).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n\n\nThere are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters:\n\n\n\n\n\n\ntypes: the type to retrieve e.g. hdb;\n\n\n\n\n\n\nselection-algorithm: can be one of any, last or roundrobin.\n\n\n\n\n\n\nConnecting To Non-TorQ Processes\n\n\nConnections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required.\n\n\nNon-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b.\n\n\nExample of nontorqprocess.csv file:\n\n\nhost,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02\n\n\n\nManually Adding And Using Connections\n\n\nConnections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.\n\n\nIPC types\n\n\nIn version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE.\n\n\nIn the settings example below, everything that connects to the\ntickerplant will use unix domain sockets.\n\n\n\\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix\n\n\n\nAttempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns.\n\n\nAt the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", + "title": "Connection Management" + }, + { + "location": "/conn/#connection-management", + "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk", + "title": "Connection Management" + }, + { + "location": "/conn/#connections", + "text": "Processes locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available. The main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.", + "title": "Connections" + }, + { + "location": "/conn/#process-attributes", + "text": "Each process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include: range of data contained in the process; available tables; instrument universe; physical location; any other fields of relevance.", + "title": "Process Attributes" + }, + { + "location": "/conn/#connection-passwords", + "text": "The password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.", + "title": "Connection Passwords" + }, + { + "location": "/conn/#retrieving-and-using-handles", + "text": "A function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters: type-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname); types-or-names: the types or names to retrieve e.g. hdb; required-attributes: the dictionary of attributes to match on; open-dead-connections: whether to re-open dead connections; only-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter. .servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes). q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$())) .servers.getservers will try to automatically re-open connections if\nrequired. q).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!() There are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters: types: the type to retrieve e.g. hdb; selection-algorithm: can be one of any, last or roundrobin.", + "title": "Retrieving and Using Handles" + }, + { + "location": "/conn/#connecting-to-non-torq-processes", + "text": "Connections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required. Non-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b. Example of nontorqprocess.csv file: host,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02", + "title": "Connecting To Non-TorQ Processes" + }, + { + "location": "/conn/#manually-adding-and-using-connections", + "text": "Connections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.", + "title": "Manually Adding And Using Connections" + }, + { + "location": "/conn/#ipc-types", + "text": "In version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE. In the settings example below, everything that connects to the\ntickerplant will use unix domain sockets. \\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix Attempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns. At the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", + "title": "IPC types" + }, + { + "location": "/Processes/", + "text": "Processes\n\n\nA set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is:\n\n\naquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1\n\n\n\n\n\nDiscovery Service\n\n\nOverview\n\n\nProcesses use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections.\n\n\nThe discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery.\n\n\nTo run the discovery service, use a start line such as:\n\n\naquaq $ q torq.q -load code/processes/discovery.q -p 9995\n\n\n\nModify the configuration as required.\n\n\nOperation\n\n\n\n\n\n\nProcesses register with the discovery service.\n\n\n\n\n\n\n\n\nProcesses use the discovery service to locate other processes.\n\n\n\n\n\n\n\n\nWhen new services register, any processes which have registered an\n interest in that process type are notified.\n\n\n\n\n\n\n\n\nAvailable Processes\n\n\nThe list of available processes can be found in the .servers.SERVERS\ntable.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()\n\n\n\n\n\nGateway\n\n\nA synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.\n\n\n\n\nAsynchronous Behaviour\n\n\nAsynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens:\n\n\n\n\n\n\nthe query is placed in a queue;\n\n\n\n\n\n\nthe list of available servers is retrieved;\n\n\n\n\n\n\nthe queue is prioritised, so those queries with higher priority are\n serviced first;\n\n\n\n\n\n\nqueries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query;\n\n\n\n\n\n\nwhen all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client.\n\n\n\n\n\n\nThe two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc.\n\n\nAn asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.\n\n\nSynchronous Behaviour\n\n\nWhen using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.\n\n\nProcess Discovery\n\n\nThe gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.\n\n\nError Handling\n\n\nWhen synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when:\n\n\n\n\n\n\nthe client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately);\n\n\n\n\n\n\nthe query is timed out;\n\n\n\n\n\n\na back end server returns an error;\n\n\n\n\n\n\na back end server fails;\n\n\n\n\n\n\nthe join function fails.\n\n\n\n\n\n\nIf postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).\n\n\nClient Calls\n\n\nThere are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details.\n\n\n\n\n\n\n\n\nFunction\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.gw.syncexec[query; servertypes]\n\n\nExecute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.\n\n\n\n\n\n\n.gw.syncexecj[query; servertypes; joinfunction]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results.\n\n\n\n\n\n\n.gw.asyncexec[query; servertypes]\n\n\nExecute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.\n\n\n\n\n\n\n.gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.\n\n\n\n\n\n\n\n\nFor the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it.\n\n\nq).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk\n\n\n\nBoth the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB.\n\n\nq)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017\n\n\n\nRun the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line.\n\n\nq torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb\n\n\n\nStart a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds.\n\n\nq)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009\n\n\n\nIf a query is done for a server type which is not registered, an error\nis returned:\n\n\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other\n\n\n\nCustom join functions can be specified:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1\n\n\n\nCustom joins can fail with appropriate errors:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b\n\n\n\nAsynchronous queries must be sent in async and blocked:\n\n\nq)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\n\n\n\nWe can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time.\n\n\nq)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003\n\n\n\nAlternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function.\n\n\nq)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n\n\nAsynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required.\n\n\nq)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550\n\n\n\nNon kdb+ Clients\n\n\nAll the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the \nJava Grid\nViewer\n:\n\n\nimport java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n}\n\n\n\nSome of the unofficially supported APIs may only allow synchronous calls\nto be made.\n\n\n\n\nReal Time Database (RDB)\n\n\nThe Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include:\n\n\n\n\n\n\nTickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file;\n\n\n\n\n\n\nAutomatic re-connection and resubscription to tickerplant;\n\n\n\n\n\n\nList of tables to subscribe to supplied as configuration setting;\n\n\n\n\n\n\nMore pre-built flexibility in end-of-day;\n\n\n\n\n\n\nMore verbose end-of-day logging;\n\n\n\n\n\n\nReload multiple authenticated HDBs after end-of-day;\n\n\n\n\n\n\nEnd-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay\n\n\n\n\n\n\nSee the top of the file for more information.\n\n\n\n\nWrite Database (WDB)\n\n\nThe Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q:\n\n\n\n\n\n\nProvides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting;\n\n\n\n\n\n\nGreater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options;\n\n\n\n\n\n\nUse of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes;\n\n\n\n\n\n\nChecks whether to persist data to disk on a timer rather than on\n each tick;\n\n\n\n\n\n\nInforms other RDB, HDB and GW processes that end of day save and\n sort has completed;\n\n\n\n\n\n\nMore log information supplied.\n\n\n\n\n\n\nThe WDB process can broken down into two main functions:\n\n\n\n\n\n\nPeriodically saving data to disk and\n\n\n\n\n\n\nSorting data at end of day\n\n\n\n\n\n\nThe WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day).\n\n\nThe behaviour of the WDB process is controlled by the \n.wdb.mode\n\nparameter. This should be set to one of following three values:\n\n\n\n\n\n\nsaveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc.\n\n\n\n\n\n\nsave - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data\n\n\n\n\n\n\nsort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes\n\n\n\n\n\n\nWhen running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data.\n\n\nThe wdb process provides two methods for persisting data to disk and\nsorting at the end of the day.\n\n\n\n\n\n\ndefault - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to.\n\n\n\n\n\n\npartbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory.\n\n\nAt the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters.\n\n\n\n\n\n\nThe optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.\n\n\n\n\nTickerplant Log Replay\n\n\nThe Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for:\n\n\n\n\n\n\nhandling end of day save down failures;\n\n\n\n\n\n\nhandling large volumes of data (larger than can fit into RAM).\n\n\n\n\n\n\nThe process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can:\n\n\n\n\n\n\nreplay specific message ranges;\n\n\n\n\n\n\nreplay in manageable message chunks;\n\n\n\n\n\n\nrecover as many messages as possible from a log file rather than\n just stopping at the first bad message;\n\n\n\n\n\n\nignore specific tables;\n\n\n\n\n\n\nmodify the tables before or after they are saved;\n\n\n\n\n\n\napply sorting and parting after all the data is written out.\n\n\n\n\n\n\nThe process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be:\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1\n\n\n\nThe tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage.\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage\n\n\n\n\n\nHousekeeping\n\n\nThe housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process:\n\n\n\n\n\n\nAllows for removing and zipping of directory files;\n\n\n\n\n\n\nProvides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter;\n\n\n\n\n\n\nReads all tasks from a single CSV;\n\n\n\n\n\n\nRuns on a user defined timer;\n\n\n\n\n\n\nCan be run immediately from command line or within the process;\n\n\n\n\n\n\nCan be easily extended to include new user defined housekeeping\n tasks.\n\n\n\n\n\n\nThe process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings:\n\n\n\n\n\n\nFunction details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping);\n\n\n\n\n\n\nPath specifies the directory that the files are in;\n\n\n\n\n\n\nMatch provides the search string to the find function, files\n returned will have names that match this string;\n\n\n\n\n\n\nExclude provides a second string to the find function, and these\n files are excluded from the match list;\n\n\n\n\n\n\nAge is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days).\n\n\n\n\n\n\nAn example csv file would be:\n\n\nfunction,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3\n\n\n\nThe process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror.\n\n\nThe remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv.\n\n\nAs well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion.\n\n\nHousekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag:\n\n\nq torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage\n\n\n\n\n\nFile Alerter\n\n\nThe file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can:\n\n\n\n\n\n\nrun more than one function on the specified file.\n\n\n\n\n\n\noptionally move the file to a new directory after running the\n function.\n\n\n\n\n\n\nstore a table of files that have already been processed.\n\n\n\n\n\n\nrun the function only on new files or run it every time the file is\n modified.\n\n\n\n\n\n\nignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified.\n\n\n\n\n\n\nThe file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows.\n\n\ninputcsv\n - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv.\n\n\npolltime\n - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute.\n\n\nalreadyprocessed\n - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran.\n\n\nskipallonstart\n - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0.\n\n\nThe files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow.\n\n\npath\n - This is the path to the directory that will be scanned for\nthe file.\n\n\nmatch\n - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d.\n\n\nfunction\n - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non.\n\n\nnewonly\n - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified.\n\n\nmovetodirectory\n - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved.\n\n\nIt is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like:\n\n\npath,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\"\n\n\n\nThe file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files.\n\n\nAfter the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it.\n\n\nThe file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be:\n\n\ncopy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"}\n\n\n\nAlthough the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session.\n\n\nEach stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner.\n\n\nThe file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.\n\n\n\n\nReporter\n\n\nOverview\n\n\nThe reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers.\n\n\n\n\nFeatures:\n\n\n\n\n\n\nEasily create a report for information that you want;\n\n\n\n\n\n\nFully customizable scheduling such as start time, end time and days\n of the week;\n\n\n\n\n\n\nRun reports repeatedly with a custom period between them;\n\n\n\n\n\n\nAsynchronous querying with custom timeout intervals;\n\n\n\n\n\n\nInbuilt result handlers allow reports to be written to file or\n published;\n\n\n\n\n\n\nCustom result handlers can be defined;\n\n\n\n\n\n\nLogs each step of the report process;\n\n\n\n\n\n\nFully integrated with the TorQ gateway to allow reports to be run\n across backend processes.\n\n\n\n\n\n\nThe reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table.\n\n\nTo run the reporter process:\n\n\nq torq.q -load code/processes/reporter.q -p 20004\n\n\n\nOnce the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.\n\n\nReport Configuration\n\n\nBy default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema.\n\n\n\n\n\n\n\n\nColumn Header\n\n\nDescription and Example\n\n\n\n\n\n\n\n\n\n\nname\n\n\nReport name e.g. Usage\n\n\n\n\n\n\nquery\n\n\nQuery to be evaluated on that process. It can be a string query or function\n\n\n\n\n\n\nresulthandler\n\n\nResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d]\n\n\n\n\n\n\ngateway\n\n\nIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway\n\n\n\n\n\n\njoinfunction\n\n\nUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze\n\n\n\n\n\n\nproctype\n\n\nThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb\n\n\n\n\n\n\nprocname\n\n\nThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1\n\n\n\n\n\n\nstart\n\n\nTime on that day to start at e.g. 12:00\n\n\n\n\n\n\nend\n\n\nTime on that day that the report will stop at e.g. 23:00\n\n\n\n\n\n\nperiod\n\n\nThe period between each report query e.g. 00:00:10\n\n\n\n\n\n\ntimeoutinterval\n\n\nThe amount of time the reporter waits before timing out a report e.g. 00:00:30\n\n\n\n\n\n\ndaysofweek\n\n\nNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday\n\n\n\n\n\n\n\n\nWhen running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load.\n\n\nListing [code:csvschema] shows an example of the schema needed in the\ninput csv file.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6\n\n\n\nResult Handlers\n\n\nThere are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query).\n\n\nwritetofiletype\n - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be \nusage_rdb_2014_01_02_15_00_12.txt\n e.g.\n\n\nwritetofiletype[\"./output/\";\"usage\";\"csv\"]\n\n\n\nsplaytable\n - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g.\n\n\nsplaytable[\"./output/\";\"usage\"]\n\n\n\nemailalert\n - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions.\n\n\nemailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")]\n\n\n\nemailreport\n - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed.\n\n\nemailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"]\n\n\n\npublishresult\n - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.\n\n\nReport Process Tracking\n\n\nEach step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. \n\n\n\n\n\n\n\n\nStage symbol\n\n\nExplanation\n\n\n\n\n\n\n\n\n\n\nR\n\n\nThe query is currently running\n\n\n\n\n\n\nE\n\n\nAn error has occurred during the query\n\n\n\n\n\n\nC\n\n\nThe query has been completed with no errors\n\n\n\n\n\n\nT\n\n\nThe query has exceeded the timeout interval\n\n\n\n\n\n\nS\n\n\nSystem message e.g. \u201cReporter Process Initialised\u201d\n\n\n\n\n\n\n\n\ntime | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"\n\n\n\nSubscribing for Results\n\n\nTo publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol.\n\n\n/- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)\n\n\n\nExample reports\n\n\nThe following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the \n.Q.w[]\n information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6\n\n\n\n\n\nMonitor\n\n\nThe Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived.\n\n\nRun it with:\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001\n\n\n\nIt is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded.\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap\n\n\n\nThe current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg\n\n\nq)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"\n\n\n\nHTML5 front end\n\n\nA HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include:\n\n\n\n\n\n\nHeartbeat table with processes that have warnings highlighted in\n orange and errors in red\n\n\n\n\n\n\nLog message table displaying the last 30 errors\n\n\n\n\n\n\nLog message error chart that is by default displayed in 5 minute\n bins\n\n\n\n\n\n\nChart\u2019s bin value can be changed on the fly\n\n\n\n\n\n\nResponsive design so works on all main devices i.e. phones, tablets\n and desktop\n\n\n\n\n\n\nIt is accessible by going to the url \nhttp://HOST:PORT/.non?monitorui\n\n\n\n\nCompression\n\n\nThe compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify\n\n\n\n\n\n\nthe compression configuration file to use\n\n\n\n\n\n\nthe database directory to compress\n\n\n\n\n\n\nthe maximum age of data to attempt to compress\n\n\n\n\n\n\nwhether the process should exit upon completion\n\n\n\n\n\n\nThe process is run like other TorQ processes:\n\n\nq torq.q -load code/processes/compression.q -p 20005\n\n\n\nModify the settings file or override variables from the command line as\nappropriate.\n\n\n\n\nKill\n\n\nThe kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way.\n\n\nIf run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable.\n\n\nq torq.q -load code/processes/kill.q -p 20000\n\n\n\n.servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable):\n\n\nq torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant\n\n\n\nThe kill process can also be used to kill only specific named processes\nwithin the process types:\n\n\nq torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2\n\n\n\n\n\nChained Tickerplant\n\n\nIn tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis.\n\n\nThe chained tickerplant can:\n\n\n\n\n\n\nsubscribe to specific tables and syms\n\n\n\n\n\n\nbatch publish at an interval or publish tick by tick\n\n\n\n\n\n\ncreate a tickerplant log that its real time subscribers can replay\n\n\n\n\n\n\nreplay the source tickerplant log\n\n\n\n\n\n\nTo launch the chained tickerplant\n\n\nq torq.q -load code/processes/chainedtp.q -p 12009\n\n\n\nChained tickerplant settings are found in \nconfig/settings/chainedtp.q\n\nand are under the \n.ctp\n namespace.\n\n\n\n\n\n\n\n\nSetting\n\n\nExplanation\n\n\nDefault\n\n\n\n\n\n\n\n\n\n\ntickerplantname\n\n\nlist of tickerplant names to try and make a connection to\n\n\n`tickerplant1\n\n\n\n\n\n\npubinterval\n\n\npublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick\n\n\n0D00:00:00\n\n\n\n\n\n\ntpconnsleep\n\n\nnumber of seconds between attempts to connect to the source tickerplant\n\n\n10\n\n\n\n\n\n\ncreatelogfile\n\n\ncreate a log file\n\n\n0b\n\n\n\n\n\n\nlogdir\n\n\ndirectory containing chained tickerplant logs\n\n\n`:hdb\n\n\n\n\n\n\nsubscribeto\n\n\nsubscribe to these tables only (null for all)\n\n\n`\n\n\n\n\n\n\nsubscribesyms\n\n\nsubscribe to these syms only (null for all)\n\n\n`\n\n\n\n\n\n\nreplay\n\n\nreplay the tickerplant log file\n\n\n0b\n\n\n\n\n\n\nschema\n\n\nretrieve schema from tickerplant\n\n\n1b\n\n\n\n\n\n\nclearlogonsubscription\n\n\nclear log on subscription, only called if createlogfile is also enabled\n\n\n0b\n\n\n\n\n\n\n\n\n\n\nIntegration with kdb+tick\n\n\nAquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", + "title": "Processes" + }, + { + "location": "/Processes/#processes", + "text": "A set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is: aquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1", + "title": "Processes" + }, + { + "location": "/Processes/#discovery-service", + "text": "", + "title": "Discovery Service" + }, + { + "location": "/Processes/#overview", + "text": "Processes use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections. The discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery. To run the discovery service, use a start line such as: aquaq $ q torq.q -load code/processes/discovery.q -p 9995 Modify the configuration as required.", + "title": "Overview" + }, + { + "location": "/Processes/#operation", + "text": "Processes register with the discovery service. Processes use the discovery service to locate other processes. When new services register, any processes which have registered an\n interest in that process type are notified.", + "title": "Operation" + }, + { + "location": "/Processes/#available-processes", + "text": "The list of available processes can be found in the .servers.SERVERS\ntable. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()", + "title": "Available Processes" + }, + { + "location": "/Processes/#gateway", + "text": "A synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.", + "title": "Gateway" + }, + { + "location": "/Processes/#asynchronous-behaviour", + "text": "Asynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens: the query is placed in a queue; the list of available servers is retrieved; the queue is prioritised, so those queries with higher priority are\n serviced first; queries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query; when all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client. The two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc. An asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.", + "title": "Asynchronous Behaviour" + }, + { + "location": "/Processes/#synchronous-behaviour", + "text": "When using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.", + "title": "Synchronous Behaviour" + }, + { + "location": "/Processes/#process-discovery", + "text": "The gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.", + "title": "Process Discovery" + }, + { + "location": "/Processes/#error-handling", + "text": "When synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when: the client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately); the query is timed out; a back end server returns an error; a back end server fails; the join function fails. If postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).", + "title": "Error Handling" + }, + { + "location": "/Processes/#client-calls", + "text": "There are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details. Function Description .gw.syncexec[query; servertypes] Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed. .gw.syncexecj[query; servertypes; joinfunction] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. .gw.asyncexec[query; servertypes] Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results. .gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded. For the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it. q).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk Both the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB. q)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017 Run the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line. q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb Start a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds. q)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009 If a query is done for a server type which is not registered, an error\nis returned: q)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other Custom join functions can be specified: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1 Custom joins can fail with appropriate errors: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b Asynchronous queries must be sent in async and blocked: q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq) We can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time. q)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003 Alternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function. q)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016 Asynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required. q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550", + "title": "Client Calls" + }, + { + "location": "/Processes/#non-kdb-clients", + "text": "All the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the Java Grid\nViewer : import java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n} Some of the unofficially supported APIs may only allow synchronous calls\nto be made.", + "title": "Non kdb+ Clients" + }, + { + "location": "/Processes/#real-time-database-rdb", + "text": "The Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include: Tickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file; Automatic re-connection and resubscription to tickerplant; List of tables to subscribe to supplied as configuration setting; More pre-built flexibility in end-of-day; More verbose end-of-day logging; Reload multiple authenticated HDBs after end-of-day; End-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay See the top of the file for more information.", + "title": "Real Time Database (RDB)" + }, + { + "location": "/Processes/#write-database-wdb", + "text": "The Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q: Provides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting; Greater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options; Use of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes; Checks whether to persist data to disk on a timer rather than on\n each tick; Informs other RDB, HDB and GW processes that end of day save and\n sort has completed; More log information supplied. The WDB process can broken down into two main functions: Periodically saving data to disk and Sorting data at end of day The WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day). The behaviour of the WDB process is controlled by the .wdb.mode \nparameter. This should be set to one of following three values: saveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc. save - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data sort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes When running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data. The wdb process provides two methods for persisting data to disk and\nsorting at the end of the day. default - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to. partbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory. At the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters. The optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.", + "title": "Write Database (WDB)" + }, + { + "location": "/Processes/#tickerplant-log-replay", + "text": "The Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for: handling end of day save down failures; handling large volumes of data (larger than can fit into RAM). The process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can: replay specific message ranges; replay in manageable message chunks; recover as many messages as possible from a log file rather than\n just stopping at the first bad message; ignore specific tables; modify the tables before or after they are saved; apply sorting and parting after all the data is written out. The process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be: q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1 The tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage. q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage", + "title": "Tickerplant Log Replay" + }, + { + "location": "/Processes/#housekeeping", + "text": "The housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process: Allows for removing and zipping of directory files; Provides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter; Reads all tasks from a single CSV; Runs on a user defined timer; Can be run immediately from command line or within the process; Can be easily extended to include new user defined housekeeping\n tasks. The process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings: Function details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping); Path specifies the directory that the files are in; Match provides the search string to the find function, files\n returned will have names that match this string; Exclude provides a second string to the find function, and these\n files are excluded from the match list; Age is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days). An example csv file would be: function,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3 The process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror. The remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv. As well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion. Housekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag: q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage", + "title": "Housekeeping" + }, + { + "location": "/Processes/#file-alerter", + "text": "The file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can: run more than one function on the specified file. optionally move the file to a new directory after running the\n function. store a table of files that have already been processed. run the function only on new files or run it every time the file is\n modified. ignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified. The file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows. inputcsv - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv. polltime - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute. alreadyprocessed - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran. skipallonstart - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0. The files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow. path - This is the path to the directory that will be scanned for\nthe file. match - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d. function - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non. newonly - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified. movetodirectory - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved. It is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like: path,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\" The file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files. After the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it. The file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be: copy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"} Although the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session. Each stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner. The file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.", + "title": "File Alerter" + }, + { + "location": "/Processes/#reporter", + "text": "", + "title": "Reporter" + }, + { + "location": "/Processes/#overview_1", + "text": "The reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers. Features: Easily create a report for information that you want; Fully customizable scheduling such as start time, end time and days\n of the week; Run reports repeatedly with a custom period between them; Asynchronous querying with custom timeout intervals; Inbuilt result handlers allow reports to be written to file or\n published; Custom result handlers can be defined; Logs each step of the report process; Fully integrated with the TorQ gateway to allow reports to be run\n across backend processes. The reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table. To run the reporter process: q torq.q -load code/processes/reporter.q -p 20004 Once the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.", + "title": "Overview" + }, + { + "location": "/Processes/#report-configuration", + "text": "By default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema. Column Header Description and Example name Report name e.g. Usage query Query to be evaluated on that process. It can be a string query or function resulthandler Result handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d] gateway If non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway joinfunction Used to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze proctype The type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb procname The name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1 start Time on that day to start at e.g. 12:00 end Time on that day that the report will stop at e.g. 23:00 period The period between each report query e.g. 00:00:10 timeoutinterval The amount of time the reporter waits before timing out a report e.g. 00:00:30 daysofweek Numeric value required for the day of the week. Where 0 is Saturday and 2 is Monday When running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load. Listing [code:csvschema] shows an example of the schema needed in the\ninput csv file. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6", + "title": "Report Configuration" + }, + { + "location": "/Processes/#result-handlers", + "text": "There are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query). writetofiletype - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be usage_rdb_2014_01_02_15_00_12.txt e.g. writetofiletype[\"./output/\";\"usage\";\"csv\"] splaytable - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g. splaytable[\"./output/\";\"usage\"] emailalert - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions. emailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")] emailreport - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed. emailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"] publishresult - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.", + "title": "Result Handlers" + }, + { + "location": "/Processes/#report-process-tracking", + "text": "Each step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. Stage symbol Explanation R The query is currently running E An error has occurred during the query C The query has been completed with no errors T The query has exceeded the timeout interval S System message e.g. \u201cReporter Process Initialised\u201d time | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"", + "title": "Report Process Tracking" + }, + { + "location": "/Processes/#subscribing-for-results", + "text": "To publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol. /- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)", + "title": "Subscribing for Results" + }, + { + "location": "/Processes/#example-reports", + "text": "The following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the .Q.w[] information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6", + "title": "Example reports" + }, + { + "location": "/Processes/#monitor", + "text": "The Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived. Run it with: aquaq $ q torq.q -load code/processes/monitor.q -p 20001 It is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded. aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap The current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg q)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"", + "title": "Monitor" + }, + { + "location": "/Processes/#html5-front-end", + "text": "A HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include: Heartbeat table with processes that have warnings highlighted in\n orange and errors in red Log message table displaying the last 30 errors Log message error chart that is by default displayed in 5 minute\n bins Chart\u2019s bin value can be changed on the fly Responsive design so works on all main devices i.e. phones, tablets\n and desktop It is accessible by going to the url http://HOST:PORT/.non?monitorui", + "title": "HTML5 front end" + }, + { + "location": "/Processes/#compression", + "text": "The compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify the compression configuration file to use the database directory to compress the maximum age of data to attempt to compress whether the process should exit upon completion The process is run like other TorQ processes: q torq.q -load code/processes/compression.q -p 20005 Modify the settings file or override variables from the command line as\nappropriate.", + "title": "Compression" + }, + { + "location": "/Processes/#kill", + "text": "The kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way. If run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable. q torq.q -load code/processes/kill.q -p 20000 .servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable): q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant The kill process can also be used to kill only specific named processes\nwithin the process types: q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2", + "title": "Kill" + }, + { + "location": "/Processes/#chained-tickerplant", + "text": "In tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis. The chained tickerplant can: subscribe to specific tables and syms batch publish at an interval or publish tick by tick create a tickerplant log that its real time subscribers can replay replay the source tickerplant log To launch the chained tickerplant q torq.q -load code/processes/chainedtp.q -p 12009 Chained tickerplant settings are found in config/settings/chainedtp.q \nand are under the .ctp namespace. Setting Explanation Default tickerplantname list of tickerplant names to try and make a connection to `tickerplant1 pubinterval publish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick 0D00:00:00 tpconnsleep number of seconds between attempts to connect to the source tickerplant 10 createlogfile create a log file 0b logdir directory containing chained tickerplant logs `:hdb subscribeto subscribe to these tables only (null for all) ` subscribesyms subscribe to these syms only (null for all) ` replay replay the tickerplant log file 0b schema retrieve schema from tickerplant 1b clearlogonsubscription clear log on subscription, only called if createlogfile is also enabled 0b", + "title": "Chained Tickerplant" + }, + { + "location": "/Processes/#integration-with-kdbtick", + "text": "AquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", + "title": "Integration with kdb+tick" + }, + { + "location": "/visualisation/", + "text": "Visualisation\n\n\nkdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.\n\n\n\n\nkdb+ Utilities\n\n\nThe server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes:\n\n\n\n\n\n\njson.k provides two way conversion between kdb+ data structures and\n JSON;\n\n\n\n\n\n\nu.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript;\n\n\n\n\n\n\nfunctions for reformatting temporal types to be JSON compliant;\n\n\n\n\n\n\npage serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.\n\n\n\n\n\n\n\n\nJavaScript Utilities\n\n\nThe JavaScript utilities are contained in kdbconnect.js. The library\nallows you to:\n\n\n\n\n\n\ncreate a connection to the kdb+ process;\n\n\n\n\n\n\ndisplay the socket status;\n\n\n\n\n\n\nsending queries;\n\n\n\n\n\n\nbinding results returned from kdb+ to updates in the webpage.\n\n\n\n\n\n\n\n\nOutline\n\n\nAll communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form:\n\n\n`name`data!(\"dataID\";dataObject)\n\n\n\nAll the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap.\n\n\nq)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nWe have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like:\n\n\n`name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))\n\n\n\nThis can be packed with .html.updformat:\n\n\nq).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nTo utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using\n\n\n.html.wssub[`tablename]\n\n\n\nPublications from the kdb+ side are done with\n\n\n.html.pub[`tablename;tabledata]\n\n\n\nOn the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data.\n\n\n/* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nSimilarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different:\n\n\nKDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nTo display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status.\n\n\n// Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected.\n\n\n\nErrors can be displayed by binding the event called \u201cerror\u201d.\n\n\nKDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});\n\n\n\n\n\nExample\n\n\nA basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.\n\n\n\n\nFurther Work\n\n\nFurther work planned includes:\n\n\n\n\n\n\nallow subscriptions on a key basis- currently all subscribers\n receive all updates;\n\n\n\n\n\n\nadd JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table;\n\n\n\n\n\n\nallow multiple websocket connections to be maintained at the same\n time.", + "title": "Visualisation" + }, + { + "location": "/visualisation/#visualisation", + "text": "kdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.", + "title": "Visualisation" + }, + { + "location": "/visualisation/#kdb-utilities", + "text": "The server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes: json.k provides two way conversion between kdb+ data structures and\n JSON; u.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript; functions for reformatting temporal types to be JSON compliant; page serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.", + "title": "kdb+ Utilities" + }, + { + "location": "/visualisation/#javascript-utilities", + "text": "The JavaScript utilities are contained in kdbconnect.js. The library\nallows you to: create a connection to the kdb+ process; display the socket status; sending queries; binding results returned from kdb+ to updates in the webpage.", + "title": "JavaScript Utilities" + }, + { + "location": "/visualisation/#outline", + "text": "All communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form: `name`data!(\"dataID\";dataObject) All the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap. q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a We have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like: `name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14))) This can be packed with .html.updformat: q).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a To utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using .html.wssub[`tablename] Publications from the kdb+ side are done with .html.pub[`tablename;tabledata] On the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data. /* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); Similarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different: KDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); To display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status. // Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected. Errors can be displayed by binding the event called \u201cerror\u201d. KDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});", + "title": "Outline" + }, + { + "location": "/visualisation/#example", + "text": "A basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.", + "title": "Example" + }, + { + "location": "/visualisation/#further-work", + "text": "Further work planned includes: allow subscriptions on a key basis- currently all subscribers\n receive all updates; add JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table; allow multiple websocket connections to be maintained at the same\n time.", + "title": "Further Work" + } + ] +} \ No newline at end of file diff --git a/site/sitemap.xml b/site/sitemap.xml new file mode 100644 index 000000000..54a6f780c --- /dev/null +++ b/site/sitemap.xml @@ -0,0 +1,68 @@ + + + + + + / + 2017-01-13 + daily + + + + + + /Overview/ + 2017-01-13 + daily + + + + + + /gettingstarted/ + 2017-01-13 + daily + + + + + + /utilities/ + 2017-01-13 + daily + + + + + + /handlers/ + 2017-01-13 + daily + + + + + + /conn/ + 2017-01-13 + daily + + + + + + /Processes/ + 2017-01-13 + daily + + + + + + /visualisation/ + 2017-01-13 + daily + + + + \ No newline at end of file diff --git a/site/utilities/index.html b/site/utilities/index.html new file mode 100644 index 000000000..5777f060e --- /dev/null +++ b/site/utilities/index.html @@ -0,0 +1,1455 @@ + + + + + + + + + + + + Utilities - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

+

Utilities

+

We have provided several utility scripts, which either implement +developer aids or standard operations which are useful across processes.

+

+

api.q

+

This provides a mechanism for documenting and publishing +function/variable/table or view definitions within the kdb+ process. It +provides a search facility both by name and definition (in the case of +functions). There is also a function for returning the approximate +memory usage of each variable in the process in descending order.

+

Definitions are added using the .api.add function. A variable can be +marked as public or private, and given a description, parameter list and +return type. The search functions will return all the values found which +match the pattern irrespective of them having a pre-defined definition.

+

Whether a value is public or private is defined in the definitions +table. If not found then by default all values are private, except those +which live in the .q or top level namespace.

+

.api.f is used to find a function, variable, table or view based on a +case-insensitive pattern search. If a symbol parameter is supplied, a +wildcard search of *[suppliedvalue]* is done. If a string is +supplied, the value is used as is, meaning other non-wildcard regex +pattern matching can be done.

+

+    q).api.f`max                                                                                                                                                                                                                    
+    name                | vartype   namespace public descrip             ..
+    --------------------| -----------------------------------------------..
+    maxs                | function  .q        1      ""                  ..
+    mmax                | function  .q        1      ""                  ..
+    .clients.MAXIDLE    | variable  .clients  0      ""                  ..
+    .access.MAXSIZE     | variable  .access   0      ""                  ..
+    .cache.maxsize      | variable  .cache    1      "The maximum size in..
+    .cache.maxindividual| variable  .cache    1      "The maximum size in..
+    max                 | primitive           1      ""                  ..
+    q).api.f"max*"                                                                                                                                                                                                                  
+    name| vartype   namespace public descrip params return
+    ----| ------------------------------------------------
+    maxs| function  .q        1      ""      ""     ""    
+    max | primitive           1      ""      ""     ""    
+
+
+ +

.api.p is the same as .api.f, but only returns public functions. .api.u +is as .api.p, but only includes user defined values i.e. it excludes q +primitives and values found in the .q, .Q, .h and .o namespaces. +.api.find is a more general version of .api.f which can be used to do +case sensitive searches.

+

.api.s is used to search function definitions for specific values.

+
q).api.s"*max*"                                                                                                                                                                                                                 
+function            definition                                       ..
+---------------------------------------------------------------------..
+.Q.w                "k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\"..
+.clients.cleanup    "{if[count w0:exec w from`.clients.clients where ..
+.access.validsize   "{[x;y;z] $[superuser .z.u;x;MAXSIZE>s:-22!x;x;'\..
+.servers.getservers "{[nameortype;lookups;req;autoopen;onlyone]\n r:$..
+.cache.add          "{[function;id;status]\n \n res:value function;\n..
+
+

.api.m is used to return the approximate memory usage of variables and +views in the process, retrieved using -22!. Views will be re-evaluated +if required. Use .api.mem[0b] if you do not want to evaluate and +return views.

+
q).api.m[]                                                                                                                                                                                                                      
+variable          size    sizeMB
+--------------------------------
+.tz.t             1587359 2     
+.help.TXT         15409   0     
+.api.detail       10678   0     
+.proc.usage       3610    0     
+.proc.configusage 1029    0     
+..
+
+

.api.whereami[lambda] can be used to retrieve the name of a function +given its definition. This can be useful in debugging.

+
q)g:{x+y}                                                                                                                                                                                                                                                                     
+q)f:{20 + g[x;10]}                                                                                                                                                                                                                                                            
+q)f[10]                                                                                                                                                                                                                                                                       
+40
+q)f[`a]                                                                                                                                                                                                                                                                       
+{x+y}
+`type
++
+`a
+10
+q)).api.whereami[.z.s]                                                                                                                                                                                                                                                        
+`..g
+
+

+

timer.q

+

kdb+ provides a single timer function, .z.ts which is triggered with the +frequency specified by -t. We have provided an extension to allow +multiple functions to be added to the timer and fired when required. The +basic concept is that timer functions are registered in a table, with +.z.ts periodically checking the table and running whichever functions +are required. This is not a suitable mechanism where very high frequency +timers are required (e.g. sub 500ms).

+

There are two ways a function can be added to a timer- either as a +repeating timer, or to fire at a specific time. When a repeating timer +is specified, there are three options as to how the timer can be +rescheduled. Assuming that a timer function with period P is scheduled +to fire at time T0, actually fires at time T1 and finishes at time T2, +then

+
    +
  • +

    mode 0 will reschedule for T0+P;

    +
  • +
  • +

    mode 1 will reschedule for T1+P;

    +
  • +
  • +

    mode 2 will reschedule for T2+P.

    +
  • +
+

Both mode 0 and mode 1 have the potential for causing the timer to back +up if the finish time T2 is after the next schedule time. See +.api.p“.timer.*”for more details.

+

+

async.q

+

kdb+ processes can communicate with each using either synchronous or +asynchronous calls. Synchronous calls expect a response and so the +server must process the request when it is received to generate the +result and return it to the waiting client. Asynchronous calls do not +expect a response so allow for greater flexibility. The effect of +synchronous calls can be replicated with asynchronous calls in one of +two ways (further details in section gateway):

+
    +
  • +

    deferred synchronous: the client sends an async request, then blocks + on the handle waiting for the result. This allows the server more + flexibility as to how and when the query is processed;

    +
  • +
  • +

    asynchronous postback: the client sends an async request which is + wrapped in a function to be posted back to the client when the + result is ready. This allows the server flexibility as to how and + when the query is processed, and allows the client to continue + processing while the server is generating the result.

    +
  • +
+

The code for both of these can get a little tricky, largely due to the +amount of error trapping required. We have provided two functions to +allow these methods to be used more easily. .async.deferred takes a list +of handles and a query, and will return a two item list of +(success;results).

+
q).async.deferred[3 5;({system"sleep 1";system"p"};())]                                                                                                                                                                                     
+1    1   
+9995 9996
+q).async.deferred[3 5;({x+y};1;2)]                                                                                                                                                                                                          
+1 1
+3 3
+q).async.deferred[3 5;({x+y};1;`a)]                                                                                                                                                                                                         
+0                         0                        
+"error: server fail:type" "error: server fail:type"
+q).async.deferred[3 5 87;({system"sleep 1";system"p"};())]                                                                                                                                                                                  
+1     1     0                                       
+9995i 9996i "error: comm fail: failed to send query"
+
+

.async.postback takes a list of handles, a query, and the name or lambda +of the postback function to return the result to. It will immediately +return a success vector, and the results will be posted back to the +client when ready.

+
q).async.postback[3 5;({system"sleep 1";system"p"};());`showresult]                                                                                                                                                                         
+11b
+q)                                                                                                                                                                                                                                          
+q)9995i
+9996i
+
+q).async.postback[3 5;({x+y};1;2);`showresult]                                                                                                                                                                                              
+11b
+q)3
+3
+
+q).async.postback[3 5;({x+y};1;`a);`showresult]                                                                                                                                                                                             
+11b
+q)"error: server fail:type"
+"error: server fail:type"
+
+q).async.postback[3 5;({x+y};1;`a);showresult]                                                                                                                                                                                              
+11b
+q)"error: server fail:type"
+"error: server fail:type"
+
+q).async.postback[3 5 87;({x+y};1;2);showresult]                                                                                                                                                                                            
+110b
+q)3
+3
+
+

For more details, see .api.p“.async.*”.

+

+

cache.q

+

cache.q provides a mechanism for storing function results in a cache and +returning them from the cache if they are available and non stale. This +can greatly boost performance for frequently run queries.

+

The result set cache resides in memory and as such takes up space. It is +up to the programmer to determine which functions are suitable for +caching. Likely candidates are those where some or all of the following +conditions hold:

+
    +
  • +

    the function is run multiple times with the same parameters (perhaps + different clients all want the same result set);

    +
  • +
  • +

    the result set changes infrequently or the clients can accept + slightly out-of-date values;

    +
  • +
  • +

    the result set is not too large and/or is relatively expensive to + produce. For example, it does not make sense to cache raw data + extracts.

    +
  • +
+

The cache has a maximum size and a minimum size for any individual +result set, both of which are defined in the configuration file. Size +checks are done with -22! which will give an approximation (but +underestimate) of the result set size. In the worst case the estimate +could be half the size of the actual size.

+

If a new result set is to be cached, the size is checked. Assuming it +does not exceed the maximum individual size then it is placed in the +cache. If the new cache size would exceed the maximum allowed space, +other result sets are evicted from the cache. The current eviction +policy is to remove the least recently accessed result sets until the +required space is freed. The cache performance is tracked in a table. +Cache adds, hits, fails, reruns and evictions are monitored.

+

The main function to use the cache is .cache.execute[function; +staletime]. If the function has been executed within the last +staletime, then the result is returned from the cache. Otherwise the +function is executed and placed in the cache.

+

The function is run and the result placed in the cache:

+
q)\t r:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                     
+2023
+q)r                                                                                                                                                                                                                             
+3
+
+

The second time round, the result set is returned immediately from the +cache as we are within the staletime value:

+
q)\t r1:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                    
+0
+q)r1                                                                                                                                                                                                                            
+3
+
+

If the time since the last execution is greater than the required stale +time, the function is re-run, the cached result is updated, and the +result returned:

+
q)\t r2:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:00]                                                                                                                                                                    
+2008
+q)r2                                                                                                                                                                                                                            
+3
+
+

The cache performance is tracked:

+
q).cache.getperf[]                                                                                                                                                                                                              
+time                          id status function                  
+------------------------------------------------------------------
+2013.11.06D12:41:53.103508000 2  add    {system"sleep 2"; x+y} 1 2
+2013.11.06D12:42:01.647731000 2  hit    {system"sleep 2"; x+y} 1 2
+2013.11.06D12:42:53.930404000 2  rerun  {system"sleep 2"; x+y} 1 2
+
+

See .api.p.cache.*for more details.

+

+

email.q

+

A library file is provided to allow TorQ processes to send emails using +an SMTP server. This is a wrapper around the standard libcurl library. +The library file is currently available for Windows (32 bit), Linux (32 +and 64 bit) and OSX (32 and 64 bit). The associated q script contains +two main methods for creating a connection and sending emails. The email +library requires a modification to the path to find the required libs - +see the top of email.q for details.

+

The main connection method .email.connect takes a single dictionary +parameter and returns 0i for success and -1i for failure.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterReqTypeDescription
urlYsymbolURL of mail server e.g. smtp://mail.example.com
userYsymbolUsername of user to login as
passwordYsymbolPassword for user
usesslNbooleanConnect using SSL/TLS, defaults to false
fromNsymbolEmail from field, defaults to torq@aquaq.co.uk
debugNintegerDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1
+

An example is:

+
q).email.connect[`url`user`password`from`usessl`debug!(`$"smtp://mail.example.com:80";`$"torquser@aquaq.co.uk";`hello;`$"torquser@aquaq.co.uk";0b;1i)]
+02 Jan 2015 11:45:19   emailConnect: url is set to smtp://mail.example.com:80
+02 Jan 2015 11:45:19   emailConnect: user is set to torquser@aquaq.co.uk
+02 Jan 2015 11:45:19   emailConnect: password is set
+02 Jan 2015 11:45:19   emailConnect: from is set torquser@aquaq.co.uk
+02 Jan 2015 11:45:19   emailConnect: trying to connect
+02 Jan 2015 11:45:19   emailConnect: connected, socket is 5
+0i
+
+

The email sending function .email.send takes a single dictionary +parameter containing the details of the email to send. A connection must +be established before an email can be sent. The send function returns an +integer of the email length on success, or -1 on failure.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterReqTypeDescription
toYsymbol (list)addresses to send to
subjectYchar listemail subject
bodyYlist of char listsemail body
ccNsymbol (list)cc list
bodyTypeNsymboltype of email body. Can be `text or `html. Default is `text
debugNintegerDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1
+

An example is:

+
q).email.send[`to`subject`body`debug!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq");1i)]
+02 Jan 2015 12:39:29   sending email with subject: test email
+02 Jan 2015 12:39:29   email size in bytes is 16682
+02 Jan 2015 12:39:30   emailSend: email sent
+16682i
+
+

Note that if emails are sent infrequently the library must re-establish +the connection to the mail server (this will be done automatically after +the initial connection). In some circumstances it may be better to batch +emails together to send, or to offload email sending to separate +processes as communication with the SMTP server can take a little time.

+

Two further functions are available, .email.connectdefault and +.email.senddefault. These are as above but will use the default +configuration defined within the configuration files as the relevant +parameters passed to the methods. In addition, .email.senddefault will +automatically establish a connection.

+
q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq"))]
+2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email
+2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful
+2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent
+16673i
+q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq"))]
+2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
+2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
+16675i
+q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq");`"$/home/ashortt/example.txt")]
+2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
+2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
+47338i
+
+

.email.test will attempt to establish a connection to the default +configured email server and send a test email to the specified address. +debug should be set to 2i (verbose) to extract the full information.

+
q).email.debug:2i
+q).email.test `$"test@aquaq.co.uk"
+...
+
+

Additionally functions are available within the email library. See +.api.p.email.*for more details.

+

Emails with SSL certificates from Windows

+

If you wish to send emails via an account which requires authentication +from Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps +as usessl must be true and Windows does not usually find the correct +certificate. The steps are:

+
    +
  • +

    download + this + and save it to your PC

    +
  • +
  • +

    set

    +
      CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt
    +
    +
  • +
+

More information is available +here +and here

+

+

timezone.q

+

A slightly customised version of the timezone conversion functionality +from code.kx. It loads a table of timezone information from +$KDBCONFIG. See .api.p.tz.*for more details.

+

+

compress.q

+

compress.q applies compression to any kdb+ database, handles all +partition types including date, month, year, int, and can deal with top +level splayed tables. It will also decompress files as required. Once +the compression/decompression is complete, summary statistics are +returned, with detailed statistics for each compressed or decompressed +file held in a table.

+

The utility is driven by the configuration specified within a csv file. +Default parameters can be given, and these can be used to compress all +files within the database. However, the compress.q utility also provides +the flexibility to compress different tables with different compression +parameters, and different columns within tables using different +parameters. A function is provided which will return a table showing +each file in the database to be compressed, and how, before the +compression is performed.

+

Compression is performed using the -19! operator, which takes 3 +parameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2 +- gzip), the compression blocksize as a power of 2 (between 12 and 19), + and the level of compression to apply (from 0 - 9, applicable only for + gzip). (For further information on -19! and the parameters used, see + code.kx.com.)

+

The compressionconfig.csv file should have the following format:

+
table,minage,column,calgo,cblocksize,clevel
+default,20,default,2,17,6
+trades,20,default,1,17,0
+quotes,20,asize,2,17,7
+quotes,20,bsize,2,17,7
+
+

This file can be placed in the config folder, or a path to the file +given at run time.

+

The compression utility compresses all tables and columns present in the +HDB but not specified in the driver file according the default +parameters. In effect, to compress an entire HDB using the same +compression parameters, a single row with name default would suffice. To +specify that a particular table should be compressed in a certain +different manner, it should be listed in the table. If default is given +as the column for this table, then all of the columns of that table will +be compressed accordingly. To specify the compression parameters for +particular columns, these should be listed individually. For example, +the file above will compress trades tables 20 days old or more with an +algorithm of 1, and a blocksize of 17. The asize and bsize columns of +any quotes tables older than 20 days old will be compressed using +algorithm 2, blocksize 17 and level 7. All other files present will be +compressed according to the default, using an algorithm 2, blocksize 17 +and compression level 6. To leave files uncompressed, you must specify +them explicitly in the table with a calgo of 0. If the file is already +compressed, note that an algorithm of 0 will decompress the file.

+

This utility should be used with caution. Before running the compression +it is recommended to run the function .cmp.showcomp, which takes three +parameters - the path to the database, the path to the csv file, and the +maximum age of the files to be compressed:

+
.cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
+        /- for using the csv file in the config folder
+.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
+        /- to specify a file
+
+

This function produces a table of the files to be compressed, the +parameters with which they will be compressed, and the current size of +the file. Note that the current size column is calculated using hcount; +on a file which is already compressed this returns the uncompressed +length, i.e. this cannot be used as a signal as to whether the file is +compressed already.

+
fullpath                        column table  partition  age calgo cblocksize clevel compressage currentsize
+-------------------------------------------------------------------------------------
+:/home/hdb/2013.11.05/depth/asize1 asize1 depth  2013.11.05 146 0     17         8      1           787960
+:/home/hdb/2013.11.05/depth/asize2 asize2 depth  2013.11.05 146 0     17         8      1           787960
+:/home/hdb/2013.11.05/depth/asize3 asize3 depth  2013.11.05 146 0     17         8      1           787960
+:/home/hdb/2013.11.05/depth/ask1   ask1   depth  2013.11.05 146 0     17         8      1           1575904
+....
+
+

To then run the compression function, use .cmp.compressmaxage with the +same parameters as .cmp.showcomp (hdb path, csv path, maximum age of +files):

+
.cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
+        /- for using the csv file in the config folder
+.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
+        /- to specify a file
+
+

To run compression on all files in the database disregarding the maximum +age of the files (i.e. from minage as specified in the configuration +file to infinitely old), then use:

+
.cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv]   
+        /- for using the csv file in the config folder
+.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile]    
+        /- to specify a file
+
+

Logs are produced for each file which is compressed or decompressed. +Once the utility is complete, the statistics of the compression are also +logged. This includes the memory savings in MB from compression, the +additional memory usage in MB for decompression, the total compression +ratio, and the total decompression ratio:

+
|comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.
+|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .
+|comp1|INF|compression|Check .cmp.statstab for info on each file.
+
+

A table with the compressed and decompressed length for each individual +file, in descending order of compression ratio, is also produced. This +can be found in .cmp.statstab:

+
file                    algo compressedLength uncompressedLength compressionratio
+-----------------------------------------------------------------------------------
+:/hdb/2014.03.05/depth/asize1 2    89057            772600             8.675343
+:/hdb/2014.01.06/depth/asize1 2    114930           995532             8.662073
+:/hdb/2014.03.05/depth/bsize1 2    89210            772600             8.660464
+:/hdb/2014.03.12/depth/bsize1 2    84416            730928             8.658643
+:/hdb/2014.01.06/depth/bsize1 2    115067           995532             8.651759
+.....
+
+

A note for windows users - windows supports compression only with a +compression blocksize of 16 or more.

+

+

dataloader.q

+

This script contains some utility functions to assist in loading data +from delimited files (e.g. comma separated, tab delimited). It is a more +generic version of the data loader example on +code.kx. +The supplied functions allow data to be read in configurable size chunks +and written out to the database. When all the data is written, the +on-disk data is re-sorted and the attributes are applied. The main +function is .loader.loadalldata which takes two parameters- a dictionary +of loading parameters and a directory containing the files to read. The +dictionary should/can have the following fields:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterReqTypeDescription
headersYsymbol listNames of the header columns in the file
typesYchar listData types to read from the file
separatorYchar[list]Delimiting character. Enlist it if first line of file is header data
tablenameYsymbolName of table to write data to
dbdirYsymbolDirectory to write data to
partitiontypeNsymbolPartitioning to use. Must be one of
`date`month`year`int. Default is `date
partitioncolNsymbolColumn to use to extract partition information.Default is `time
dataprocessfuncNfunctionDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}
chunksizeNintData size in bytes to read in one chunk. Default is 100 MB
compressionNint listCompression parameters to use e.g. 17 2 6. Default is empty list for no compression
gcNbooleanWhether to run garbage collection at appropriate points. Default is 0b (false)
+

Example usage:

+
.loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;"SP  FI";",";`trade;`:hdb); `:TDC/toload]
+.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;"SP  FI";enlist",";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]
+
+

+

subscriptions.q

+

The subscription utilities allow multiple subscriptions to different +data sources to be managed and maintained. Automatic resubscriptions in +the event of failure are possible, along as specifying whether the +process will get the schema and replay the log file from the remote +source (e.g. in the case of tickerplant subscriptions).

+

.sub.getsubscriptionhandles is used to get a table of processes to +subscribe to. The following can be used to return a table of all +connected processes of type tickerplant:

+
.sub.getsubscriptionhandles[`tickerplant;`;()!()]
+
+

.sub.subscribe is used to subscribe to a process for the supplied list +of tables and instruments. For example, to subscribe to instruments A, B +and C for the quote table from all tickerplants:

+
.sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
+
+

The subscription method uses backtick for “all” (which is the same as +kdb+tick). To subscribe to all tables, all instruments, from all +tickerplants:

+
.sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
+
+

See .api.p“.sub.*” for more details.

+

+

pubsub.q

+

pubsub.q is essentially a placeholder script to allow publish and +subscribe functionality to be implemented. Licenced kdb+tick users can +use the publish and subscribe functionality implemented in u.[k|q]. If +u.[k|q] is placed in the common code directory and loaded before +pubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt) +then publish and subscribe will be implemented. You can also build out +this file to add your own publish and subscribe routines as required.

+

+

tplogutils.q

+

tplogutils.q contains functions for recovering tickerplant log files. +Under certain circumstances the tickerplant log file can become corrupt +by having an invalid sequence of bytes written to it. A log file can be +recovered using a simple recovery method. However, this will only +recover messages up to the first invalid message. The recovery functions +defined in tplogutils.q allow all valid messages to be recovered from +the tickerplant log file.

+

+

monitoringchecks.q

+

monitoringchecks.q implements a set of standard, basic monitoring +checks. They include checks to ensure:

+
    +
  • +

    table sizes are increasing during live capture

    +
  • +
  • +

    the HDB data saves down correctly

    +
  • +
  • +

    the allocated memory of a process does not increase past a certain + size

    +
  • +
  • +

    the size of the symbol list in memory doesn’t grow to big

    +
  • +
  • +

    the process does not have too much on its pending subscriber queue

    +
  • +
+

These checks are intended to be run by the reporter process on a +schedule, and any alerts emailed to an appropriate recipient list.

+

+

heartbeat.q

+

heartbeat.q implements heartbeating, and relies on both timer.q and +pubsub.q. A table called heartbeat will be published periodically, +allowing downstream processes to detect the availability of upstream +components. The heartbeat table contains a heartbeat time and counter. +The heartbeat script contains functions to handle and process heartbeats +and manage upstream process failures. See .api.p.hb.*for details.

+

+

dbwriteutils.q

+

This contains a set of utility functions for writing data to historic +databases.

+

Sorting and Attributes

+

The sort utilities allow the sort order and attributes of tables to be +globally defined. This helps to manage the code base when the data can +potentially be written from multiple locations (e.g. written from the +RDB, loaded from flat file, replayed from the tickerplant log). The +configuration is defined in a csv which defaults to $KDBCONFG/sort.csv. +The default setup is that every table is sorted by sym and time, with a +p attribute on sym (this is the standard kdb+ tick configuration).

+
aquaq$ tail config/sort.csv 
+tabname,att,column,sort
+default,p,sym,1
+default,,time,1
+
+

As an example, assume we have an optiontrade table which we want to be +different from the standard set up. We would like the table to be sorted +by optionticker and then time, with a p attribute on optionticker. We +also have a column called underlyingticker which we can put an attribute +on as it is derived from optionticker (so there is an element of +de-normalisation present in the table). We also have an exchange field +which we would like to put a g attribute on. All other tables we want to +be sorted and parted in the standard way. The configuration file would +look like this (sort order is derived from the order within the file +combined with the sort flag being set to true):

+
aquaq$ tail config/sort.csv                
+tabname,att,column,sort
+default,p,sym,1
+default,,time,1
+optiontrade,p,optionticker,1
+optiontrade,,exchtime,1
+optiontrade,p,underlyingticker,0
+optiontrade,g,exchange,0
+
+

To invoke the sort utilities, supply a list of (tablename; partitions) +e.g.

+
q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)
+2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table
+2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters
+2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time
+2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/
+2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time
+2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/
+2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table
+
+

A different sort configuration file can be loaded with

+
.sort.getsortcsv[`:file]
+
+

Garbage Collection

+

The garbage collection utility prints some debug information before and +after the garbage collection.

+
q).gc.run[]                                                                                                                                                      
+2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
+2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
+
+

Table Manipulation

+

The table manipulation utilities allow table manipulation routines to be +defined in a single place. This is useful when data can be written from +mutliple different processes e.g. RDB, WDB, or tickerplant log replay. +Instead of having to create a separate definition of customised +manipulation in each process, it can be done in a single location and +invokved in each process.

+

+

help.q

+

The standard help.q from code.kx provides help utilities in the console. +This should be kept up to date with +[code.kx].

+
q)help`                                                                                                                                                                                                                         
+adverb    | adverbs/operators
+attributes| data attributes
+cmdline   | command line parameters
+data      | data types
+define    | assign, define, control and debug
+dotz      | .z locale contents
+errors    | error messages
+save      | save/load tables
+syscmd    | system commands
+temporal  | temporal - date & time casts
+verbs     | verbs/functions
+
+

+

html.q

+

An HTML utility has been added to accompany the HTML5 front end for the +Monitoring process. It includes functions to format dates, tables to csv +to configure the HTML file to work on the correct process. It is +accessible from the .html namespace.

+

+

Additional Utilities

+

There are some additional user contributed utility scripts available on +code.kx which are good candidates for inclusion. These could either be +dropped into the common code directory, or if not globally applicable +then in the code directory for either the process type or name. The full +set of user contributed code is documented +here.

+

+

Full API

+

The full public api can be found by running

+
q).api.u`                                                                                                                                                                                                                       
+name             | vartype  namespace public descrip                 ..
+-----------------| --------------------------------------------------..
+.proc.createlog  | function .proc     1      "Create the standard out..
+.proc.rolllogauto| function .proc     1      "Roll the standard out/e..
+.proc.loadf      | function .proc     1      "Load the specified file..
+.proc.loaddir    | function .proc     1      "Load all the .q and .k ..
+.lg.o            | function .lg       1      "Log to standard out"   ..
+..
+
+

Combined with the commented configuration file, this should give a good +overview of the functionality available. A description of the individual +namespaces is below- run .api.u namespace*to list the functions.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamespaceDescription
.procProcess API
.lgStandard out/error logging API
.errError throwing API
.usageUsage logging API
.accessPermissions API
.clientsClient tracking API
.serversServer tracking API
.asyncAsync communication API
.timerTimer API
.cacheCaching API
.tzTimezone conversions API
.checksMonitoring API
.cmpCompression API
.psPublish and Subscribe API
.hbHeartbeating API
.loaderData Loader API
.sortData sorting and attribute setting API
.subSubscription API
.gcGarbage Collection API
.tplogTickerplant Log Replay API
.apiAPI management API
+

+

Modified u.q

+

Starting in kdb+ v3.4, the new broadcast feature has some performance +benefits. It works by serialising a message once before sending it +asynchronously to a list of subscribers whereas the previous method +would serialise it separately for each subscriber. To take advantage of +this, we’ve modified u.q. This can be turned off by setting .u.broadcast +to false. It is enabled by default, but will only override default +publishing if the kdb+ version being used is 3.4 or after.

+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/site/visualisation/index.html b/site/visualisation/index.html new file mode 100644 index 000000000..2fee61114 --- /dev/null +++ b/site/visualisation/index.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + Visualisation - TorQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ +
+
+ + +
+
+ +

Visualisation

+

kdb+ supports websockets and so HTML5 GUIs can be built. We have +incorporated a set of server side and client side utilities to ease HTML +GUI development.

+

+

kdb+ Utilities

+

The server side utilities are contained in html.q. These utilise some +community code, specifically json.k and a modified version of u.q, both +from Kx Systems. The supplied functionality includes:

+
    +
  • +

    json.k provides two way conversion between kdb+ data structures and + JSON;

    +
  • +
  • +

    u.q is the standard pub/sub functionality provided with kdb+tick, + and a modified version is incorporated to publish data structures + which can be easily interpreted in JavaScript;

    +
  • +
  • +

    functions for reformatting temporal types to be JSON compliant;

    +
  • +
  • +

    page serving to utilise the inbuilt kdb+ webserver to serve custom + web pages. An example would be instead of having to serve a page + with a hardcoded websocket connection host and port, the kdb+ + process can serve a page connecting back to itself no matter which + host or port it is running on.

    +
  • +
+

+

JavaScript Utilities

+

The JavaScript utilities are contained in kdbconnect.js. The library +allows you to:

+
    +
  • +

    create a connection to the kdb+ process;

    +
  • +
  • +

    display the socket status;

    +
  • +
  • +

    sending queries;

    +
  • +
  • +

    binding results returned from kdb+ to updates in the webpage.

    +
  • +
+

+

Outline

+

All communication between websockets and kdb+ is asynchronous. The +approach we have adopted is to ensure that all data sent to the web +browser is encoded as a JSON object containing a tag to enable the web +page to decipher what the data relates to. The format we have chosen is +for kdb+ to send dictionaries of the form:

+
`name`data!("dataID";dataObject)
+
+

All the packing can be done by .html.dataformat. Please note that the +temporal types are converted to longs which can easily be converted to +JavaScript Date types. This formatting can be modified in the formating +dictionary .html.typemap.

+
q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)
+q).html.dataformat["start";(enlist `tradegraph)!enlist a]
+name| "start"
+data| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a)
+q)first (.html.dataformat["start";(enlist `tradegraph)!enlist a])[`data;`tradegraph]                                                                                     
+minute   | 32400000
+time     | 32400000
+date     | 1396828800000
+month    | 1396310400000
+timestamp| "2014-04-07T13:23:01Z"
+timespan | 48181023
+datetime | "2014-04-07T13:23:01Z"
+float    | 20f
+sym      | `a
+
+

We have also extended this structure to allow web pages to receive data +in a way similar to the standard kdb+tick pub/sub format. In this case, +the data object looks like:

+
`name`data!("upd";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))
+
+

This can be packed with .html.updformat:

+
q).html.updformat["upd";`tablename`tabledata!(`trade;a)]                                                                                                                 
+name| "upd"
+data| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a))
+q)first(.html.updformat["upd";`tablename`tabledata!(`trade;a)])[`data;`tabledata]                                                                                        
+minute   | 32400000
+time     | 32400000
+date     | 1396828800000
+month    | 1396310400000
+timestamp| "2014-04-07T13:23:01Z"
+timespan | 48181023
+datetime | "2014-04-07T13:23:01Z"
+float    | 20f
+sym      | `a
+
+

To utilise the pub/sub functionality, the web page must connect to the +kdb+ process and subscribe for updates. Subscriptions are done using

+
.html.wssub[`tablename]
+
+

Publications from the kdb+ side are done with

+
.html.pub[`tablename;tabledata]
+
+

On the JavaScript side the incoming messages (data events) must be bound +to page updates. For example, there might be an initialisation event +called “start” which allows the web page to retrieve all the initial +data from the process. The code below redraws the areas of the page with +the received data.

+
/* Bind data - Data type "start" will execute the callback function */
+KDBCONNECT.bind("data","start",function(data){
+  // Check that data is not empty
+  if(data.hbtable.length !== 0)
+   // Write HTML table to div element with id heartbeat-table
+   { $("#heartbeat-table").html(MONITOR.jsonTable(data.hbtable));}
+  if(data.lmtable.length !== 0)
+   // Write HTML table to div element with id logmsg-table
+   { $("#logmsg-table").html(MONITOR.jsonTable(data.lmtable));}  
+  if(data.lmchart.length !== 0)
+   // Log message error chart
+   { MONITOR.barChart(data.lmchart,"logmsg-chart","Error Count","myTab"); }
+  });
+
+

Similarly the upd messages must be bound to page updates. In this case, +the structure is slightly different:

+
KDBCONNECT.bind("data","upd",function(data){
+  if(data.tabledata.length===0) return;
+  if(data.tablename === "heartbeat")
+    { $("#heartbeat-table").html(MONITOR.jsonTable(data.tabledata));}
+  if(data.tablename === "logmsg")
+    { $("#logmsg-table").html(MONITOR.jsonTable(data.tabledata));}
+  if(data.tablename === "lmchart")
+    { MONITOR.barChart(data.tabledata,"logmsg-chart","Error Count","myTab"); }
+ });
+
+

To display the WebSocket connection status the event “ws_event” must be +bound and it will output one of these default messages: “Connecting...”, +“Connected” and “Disconnected” depending on the connection state of the +WebSocket. Alternatively the value of the readyState attribute will +determine the WebSocket status.

+
// Select html element using jQuery
+var $statusMsg = $("#status-msg");  
+KDBCONNECT.bind("ws_event",function(data){
+  // Data is the default message string
+  $statusMsg.html(data);
+});
+KDBCONNECT.core.websocket.readyState // Returns 1 if connected.
+
+

Errors can be displayed by binding the event called “error”.

+
KDBCONNECT.bind("error",function(data){
+  $statusMsg.html("Error - " + data);
+});
+
+

+

Example

+

A basic example is provided with the Monitor process. To get this to +work, u.q from kdb+tick should be placed in the code/common directory to +allow all processes to publish updates. It should be noted that this is +not intended as a production monitoring visualisation screen, moreso a +demonstration of functionality. See section monitorgui for more +details.

+

+

Further Work

+

Further work planned includes:

+
    +
  • +

    allow subscriptions on a key basis- currently all subscribers + receive all updates;

    +
  • +
  • +

    add JavaScript controls to allow in-place updates based on key + pairs, and scrolling window updates e.g. add N new rows to + top/bottom of the specified table;

    +
  • +
  • +

    allow multiple websocket connections to be maintained at the same + time.

    +
  • +
+ + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file From 997ec70e63f0461399dc785d3202bb35d059121a Mon Sep 17 00:00:00 2001 From: Conal Logan Date: Fri, 13 Jan 2017 08:48:01 +0000 Subject: [PATCH 5/9] Intermediary chamge --- docs/index.md | 8 +++----- mkdocs.yml | 4 ++-- site/Overview/index.html | 2 +- site/Processes/index.html | 2 +- site/conn/index.html | 2 +- site/gettingstarted/index.html | 2 +- site/handlers/index.html | 2 +- site/index.html | 9 ++++----- site/mkdocs/search_index.json | 2 +- site/utilities/index.html | 2 +- site/visualisation/index.html | 2 +- 11 files changed, 17 insertions(+), 20 deletions(-) diff --git a/docs/index.md b/docs/index.md index b61ce2594..21f9d5d70 100755 --- a/docs/index.md +++ b/docs/index.md @@ -1,14 +1,12 @@ -
+
+ +
The TorQ framework created by [AquaQ Analytics](http://www.aquaq.co.uk) forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from [code.kx.com](http://code.kx.com) (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems. The easiest way to get a production capture started is to download and install one of the [Starter Packs](https://github.com/AquaQAnalytics/TorQ-Finance-Starter-Pack). We also have a [Google Group for questions/discussions](https://groups.google.com/forum/#!forum/kdbtorq). -
- -
- For recent updates to TorQ please check out our [blog](http://www.aquaq.co.uk/blog/). For email support contact diff --git a/mkdocs.yml b/mkdocs.yml index 3c6bae50d..3b426c19a 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,8 +17,8 @@ repo_url: 'https://github.com/AquaQAnalytics/TorQ' extra: logo: 'graphics/TorQ-logo.png' palette: - primary: 'teal' - accent: 'indigo' + primary: 'green-700' + accent: 'indigo-900' author: github: 'AquaQAnalytics' twitter: 'AquaQAnalytics' diff --git a/site/Overview/index.html b/site/Overview/index.html index 7ad743c64..d4caa955a 100644 --- a/site/Overview/index.html +++ b/site/Overview/index.html @@ -68,7 +68,7 @@ - + diff --git a/site/Processes/index.html b/site/Processes/index.html index 152fa1eef..78557eed7 100644 --- a/site/Processes/index.html +++ b/site/Processes/index.html @@ -68,7 +68,7 @@ - + diff --git a/site/conn/index.html b/site/conn/index.html index 8ec65eaa3..0cbc4e8e0 100644 --- a/site/conn/index.html +++ b/site/conn/index.html @@ -68,7 +68,7 @@ - + diff --git a/site/gettingstarted/index.html b/site/gettingstarted/index.html index 8eb912b7b..305ba9dff 100644 --- a/site/gettingstarted/index.html +++ b/site/gettingstarted/index.html @@ -68,7 +68,7 @@ - + diff --git a/site/handlers/index.html b/site/handlers/index.html index d6bacbe8f..41135e299 100644 --- a/site/handlers/index.html +++ b/site/handlers/index.html @@ -68,7 +68,7 @@ - + diff --git a/site/index.html b/site/index.html index cc1516186..f853d227c 100644 --- a/site/index.html +++ b/site/index.html @@ -68,7 +68,7 @@ - + @@ -284,13 +284,12 @@

TorQ

-

-

The TorQ framework created by AquaQ Analytics forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from code.kx.com (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.

-

The easiest way to get a production capture started is to download and install one of the Starter Packs. We also have a Google Group for questions/discussions.

-
+
+

The TorQ framework created by AquaQ Analytics forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from code.kx.com (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.

+

The easiest way to get a production capture started is to download and install one of the Starter Packs. We also have a Google Group for questions/discussions.

For recent updates to TorQ please check out our blog.

For email support contact support@aquaq.co.uk

- - + + -

Overview

+
+
+ + edit + + + +

Overview

What is kdb+?

kdb+ is the market leading timeseries database from Kx Systems. kdb+ @@ -748,113 +826,93 @@

Operating System and kdb+ Version

License

This code is released under the MIT license.

- - -
+
+ + + + + - - - -
-
-
-
-
+ + +
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/site/Processes/index.html b/site/Processes/index.html index 9ea32b9e4..06e29c207 100644 --- a/site/Processes/index.html +++ b/site/Processes/index.html @@ -1,366 +1,764 @@ + - - - - - + - - + + - Processes - TorQ + + - - - - - - - + + Processes - TorQ + - - - - + - + + + + + + + + + + + - - - - - - - - - -
-
-
- - - -
- +
+ +
+
+
+ + +
+
+
+
+
- -
  • - - @AquaQAnalytics on GitHub - -
  • - +
    +
    +
    + +
    -
    -
    +
  • + + Overview + + +
  • + +
  • + + Operation + + +
  • + +
  • + + Available Processes + + +
  • + + + + + + +
  • + + Gateway + + + + +
  • + +
  • + + Real Time Database (RDB) + + +
  • + +
  • + + Write Database (WDB) + + +
  • + +
  • + + Tickerplant Log Replay + + +
  • + +
  • + + Housekeeping + + +
  • + +
  • + + File Alerter + + +
  • + +
  • + + Reporter + + + + +
  • + +
  • + + Monitor + + + + +
  • + +
  • + + Compression + + +
  • + +
  • + + Kill + + +
  • + +
  • + + Chained Tickerplant + + +
  • + + + -
    -
    -
    +
    +
    +
    + -

    +
    +
    + + edit + + + +

    Processes

    A set of processes is included. These processes build upon AquaQ TorQ, providing specific functionality. All the process scripts are contained @@ -1667,113 +2065,93 @@

    Integration with kdb+tick

    AquaQ TorQ can be fully integrated with kdb+tick. For further details, use one of the AquaQ TorQ Starter packs to set up a production kdb+ data capture system.

    - - -
    +
    +
    + + + + - - - -
    -
    -
    -
    -
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/site/assets/images/icons/bitbucket-670608a71a.svg b/site/assets/images/icons/bitbucket-670608a71a.svg new file mode 100644 index 000000000..7d95cb22d --- /dev/null +++ b/site/assets/images/icons/bitbucket-670608a71a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/assets/images/icons/github-1da075986e.svg b/site/assets/images/icons/github-1da075986e.svg new file mode 100644 index 000000000..3cacb2e0f --- /dev/null +++ b/site/assets/images/icons/github-1da075986e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/assets/images/icons/gitlab-5ad3f9f9e5.svg b/site/assets/images/icons/gitlab-5ad3f9f9e5.svg new file mode 100644 index 000000000..b036a9b52 --- /dev/null +++ b/site/assets/images/icons/gitlab-5ad3f9f9e5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/assets/javascripts/application-16f434a21a.js b/site/assets/javascripts/application-16f434a21a.js new file mode 100644 index 000000000..057cdeebe --- /dev/null +++ b/site/assets/javascripts/application-16f434a21a.js @@ -0,0 +1,58 @@ +var Application=function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){n(1),n(65),n(66),t.exports=n(67)},function(t,e,n){"use strict";n(2),n(22),n(48),n(52),t.exports=n(21).Promise},function(t,e,n){"use strict";var r=n(3),o={};o[n(5)("toStringTag")]="z",o+""!="[object z]"&&n(9)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(t,e,n){"use strict";var r=n(4),o=n(5)("toStringTag"),i="Arguments"==r(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),o))?n:i?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e){"use strict";var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){"use strict";var r=n(6)("wks"),o=n(8),i=n(7).Symbol,s="function"==typeof i,a=t.exports=function(t){return r[t]||(r[t]=s&&i[t]||(s?i:o)("Symbol."+t))};a.store=r},function(t,e,n){"use strict";var r=n(7),o="__core-js_shared__",i=r[o]||(r[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){"use strict";var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){"use strict";var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e,n){"use strict";var r=n(7),o=n(10),i=n(20),s=n(8)("src"),a="toString",u=Function[a],c=(""+u).split(a);n(21).inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,a){var u="function"==typeof n;u&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(u&&(i(n,s)||o(n,s,t[e]?""+t[e]:c.join(String(e)))),t===r?t[e]=n:a?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,a,function(){return"function"==typeof this&&this[s]||u.call(this)})},function(t,e,n){"use strict";var r=n(11),o=n(19);t.exports=n(15)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){"use strict";var r=n(12),o=n(14),i=n(18),s=Object.defineProperty;e.f=n(15)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var r=n(13);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};t.exports=function(t){return"object"===("undefined"==typeof t?"undefined":n(t))?null!==t:"function"==typeof t}},function(t,e,n){"use strict";t.exports=!n(15)&&!n(16)(function(){return 7!=Object.defineProperty(n(17)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){"use strict";t.exports=!n(16)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){"use strict";t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){"use strict";var r=n(13),o=n(7).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,e,n){"use strict";var r=n(13);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e){"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){"use strict";var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){"use strict";var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(t,e,n){"use strict";var r=n(23)(!0);n(26)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){"use strict";var r=n(24),o=n(25);t.exports=function(t){return function(e,n){var i,s,a=String(o(e)),u=r(n),c=a.length;return u<0||u>=c?t?"":void 0:(i=a.charCodeAt(u),i<55296||i>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):i:t?a.slice(u,u+2):(i-55296<<10)+(s-56320)+65536)}}},function(t,e){"use strict";var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){"use strict";t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(27),o=n(28),i=n(9),s=n(10),a=n(20),u=n(31),c=n(32),l=n(45),f=n(46),d=n(5)("iterator"),h=!([].keys&&"next"in[].keys()),p="@@iterator",v="keys",y="values",m=function(){return this};t.exports=function(t,e,n,g,b,w,_){c(n,e,g);var S,x,E,k=function(t){if(!h&&t in P)return P[t];switch(t){case v:return function(){return new n(this,t)};case y:return function(){return new n(this,t)}}return function(){return new n(this,t)}},T=e+" Iterator",O=b==y,C=!1,P=t.prototype,A=P[d]||P[p]||b&&P[b],M=A||k(b),j=b?O?k("entries"):M:void 0,L="Array"==e?P.entries||A:A;if(L&&(E=f(L.call(new t)),E!==Object.prototype&&(l(E,T,!0),r||a(E,d)||s(E,d,m))),O&&A&&A.name!==y&&(C=!0,M=function(){return A.call(this)}),r&&!_||!h&&!C&&P[d]||s(P,d,M),u[e]=M,u[T]=m,b)if(S={values:O?M:k(y),keys:w?M:k(v),entries:j},_)for(x in S)x in P||i(P,x,S[x]);else o(o.P+o.F*(h||C),e,S);return S}},function(t,e){"use strict";t.exports=!1},function(t,e,n){"use strict";var r=n(7),o=n(21),i=n(10),s=n(9),a=n(29),u="prototype",c=function t(e,n,c){var l,f,d,h,p=e&t.F,v=e&t.G,y=e&t.S,m=e&t.P,g=e&t.B,b=v?r:y?r[n]||(r[n]={}):(r[n]||{})[u],w=v?o:o[n]||(o[n]={}),_=w[u]||(w[u]={});v&&(c=n);for(l in c)f=!p&&b&&void 0!==b[l],d=(f?b:c)[l],h=g&&f?a(d,r):m&&"function"==typeof d?a(Function.call,d):d,b&&s(b,l,d,e&t.U),w[l]!=d&&i(w,l,h),m&&_[l]!=d&&(_[l]=d)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,e,n){"use strict";var r=n(30);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e){"use strict";t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e){"use strict";t.exports={}},function(t,e,n){"use strict";var r=n(33),o=n(19),i=n(45),s={};n(10)(s,n(5)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:o(1,n)}),i(t,e+" Iterator")}},function(t,e,n){"use strict";var r=n(12),o=n(34),i=n(43),s=n(42)("IE_PROTO"),a=function(){},u="prototype",c=function(){var t,e=n(17)("iframe"),r=i.length,o="<",s=">";for(e.style.display="none",n(44).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(o+"script"+s+"document.F=Object"+o+"/script"+s),t.close(),c=t.F;r--;)delete c[u][i[r]];return c()};t.exports=Object.create||function(t,e){var n;return null!==t?(a[u]=r(t),n=new a,a[u]=null,n[s]=t):n=c(),void 0===e?n:o(n,e)}},function(t,e,n){"use strict";var r=n(11),o=n(12),i=n(35);t.exports=n(15)?Object.defineProperties:function(t,e){o(t);for(var n,s=i(e),a=s.length,u=0;a>u;)r.f(t,n=s[u++],e[n]);return t}},function(t,e,n){"use strict";var r=n(36),o=n(43);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e,n){"use strict";var r=n(20),o=n(37),i=n(39)(!1),s=n(42)("IE_PROTO");t.exports=function(t,e){var n,a=o(t),u=0,c=[];for(n in a)n!=s&&r(a,n)&&c.push(n);for(;e.length>u;)r(a,n=e[u++])&&(~i(c,n)||c.push(n));return c}},function(t,e,n){"use strict";var r=n(38),o=n(25);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(4);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e,n){"use strict";var r=n(37),o=n(40),i=n(41);t.exports=function(t){return function(e,n,s){var a,u=r(e),c=o(u.length),l=i(s,c);if(t&&n!=n){for(;c>l;)if(a=u[l++],a!=a)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){"use strict";var r=n(24),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){"use strict";var r=n(24),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},function(t,e,n){"use strict";var r=n(6)("keys"),o=n(8);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e){"use strict";t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){"use strict";t.exports=n(7).document&&document.documentElement},function(t,e,n){"use strict";var r=n(11).f,o=n(20),i=n(5)("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e,n){"use strict";var r=n(20),o=n(47),i=n(42)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){"use strict";var r=n(25);t.exports=function(t){return Object(r(t))}},function(t,e,n){"use strict";for(var r=n(49),o=n(9),i=n(7),s=n(10),a=n(31),u=n(5),c=u("iterator"),l=u("toStringTag"),f=a.Array,d=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],h=0;h<5;h++){var p,v=d[h],y=i[v],m=y&&y.prototype;if(m){m[c]||s(m,c,f),m[l]||s(m,l,v),a[v]=f;for(p in r)m[p]||o(m,p,r[p],!0)}}},function(t,e,n){"use strict";var r=n(50),o=n(51),i=n(31),s=n(37);t.exports=n(26)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):"keys"==e?o(0,n):"values"==e?o(0,t[n]):o(0,[n,t[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(t,e,n){"use strict";var r=n(5)("unscopables"),o=Array.prototype;void 0==o[r]&&n(10)(o,r,{}),t.exports=function(t){o[r][t]=!0}},function(t,e){"use strict";t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){"use strict";var r,o,i,s=n(27),a=n(7),u=n(29),c=n(3),l=n(28),f=n(13),d=n(30),h=n(53),p=n(54),v=n(58),y=n(59).set,m=n(61)(),g="Promise",b=a.TypeError,w=a.process,_=a[g],w=a.process,S="process"==c(w),x=function(){},E=!!function(){try{var t=_.resolve(1),e=(t.constructor={})[n(5)("species")]=function(t){t(x,x)};return(S||"function"==typeof PromiseRejectionEvent)&&t.then(x)instanceof e}catch(t){}}(),k=function(t,e){return t===e||t===_&&e===i},T=function(t){var e;return!(!f(t)||"function"!=typeof(e=t.then))&&e},O=function(t){return k(_,t)?new C(t):new o(t)},C=o=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw b("Bad Promise constructor");e=t,n=r}),this.resolve=d(e),this.reject=d(n)},P=function(t){try{t()}catch(t){return{error:t}}},A=function(t,e){if(!t._n){t._n=!0;var n=t._c;m(function(){for(var r=t._v,o=1==t._s,i=0,s=function(e){var n,i,s=o?e.ok:e.fail,a=e.resolve,u=e.reject,c=e.domain;try{s?(o||(2==t._h&&L(t),t._h=1),s===!0?n=r:(c&&c.enter(),n=s(r),c&&c.exit()),n===e.promise?u(b("Promise-chain cycle")):(i=T(n))?i.call(n,a,u):a(n)):u(r)}catch(t){u(t)}};n.length>i;)s(n[i++]);t._c=[],t._n=!1,e&&!t._h&&M(t)})}},M=function(t){y.call(a,function(){var e,n,r,o=t._v;if(j(t)&&(e=P(function(){S?w.emit("unhandledRejection",o,t):(n=a.onunhandledrejection)?n({promise:t,reason:o}):(r=a.console)&&r.error&&r.error("Unhandled promise rejection",o)}),t._h=S||j(t)?2:1),t._a=void 0,e)throw e.error})},j=function t(e){if(1==e._h)return!1;for(var n,r=e._a||e._c,o=0;r.length>o;)if(n=r[o++],n.fail||!t(n.promise))return!1;return!0},L=function(t){y.call(a,function(){var e;S?w.emit("rejectionHandled",t):(e=a.onrejectionhandled)&&e({promise:t,reason:t._v})})},F=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),A(e,!0))},N=function t(e){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===e)throw b("Promise can't be resolved itself");(n=T(e))?m(function(){var o={_w:r,_d:!1};try{n.call(e,u(t,o,1),u(F,o,1))}catch(t){F.call(o,t)}}):(r._v=e,r._s=1,A(r,!1))}catch(t){F.call({_w:r,_d:!1},t)}}};E||(_=function(t){h(this,_,g,"_h"),d(t),r.call(this);try{t(u(N,this,1),u(F,this,1))}catch(t){F.call(this,t)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(62)(_.prototype,{then:function(t,e){var n=O(v(this,_));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=S?w.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&A(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),C=function(){var t=new r;this.promise=t,this.resolve=u(N,t,1),this.reject=u(F,t,1)}),l(l.G+l.W+l.F*!E,{Promise:_}),n(45)(_,g),n(63)(g),i=n(21)[g],l(l.S+l.F*!E,g,{reject:function(t){var e=O(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(s||!E),g,{resolve:function(t){if(t instanceof _&&k(t.constructor,this))return t;var e=O(this),n=e.resolve;return n(t),e.promise}}),l(l.S+l.F*!(E&&n(64)(function(t){_.all(t).catch(x)})),g,{all:function(t){var e=this,n=O(e),r=n.resolve,o=n.reject,i=P(function(){var n=[],i=0,s=1;p(t,!1,function(t){var a=i++,u=!1;n.push(void 0),s++,e.resolve(t).then(function(t){u||(u=!0,n[a]=t,--s||r(n))},o)}),--s||r(n)});return i&&o(i.error),n.promise},race:function(t){var e=this,n=O(e),r=n.reject,o=P(function(){p(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},function(t,e){"use strict";t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},function(t,e,n){"use strict";var r=n(29),o=n(55),i=n(56),s=n(12),a=n(40),u=n(57),c={},l={},f=t.exports=function(t,e,n,f,d){var h,p,v,y,m=d?function(){return t}:u(t),g=r(n,f,e?2:1),b=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(i(m)){for(h=a(t.length);h>b;b++)if(y=e?g(s(p=t[b])[0],p[1]):g(t[b]),y===c||y===l)return y}else for(v=m.call(t);!(p=v.next()).done;)if(y=o(v,g,p.value,e),y===c||y===l)return y};f.BREAK=c,f.RETURN=l},function(t,e,n){"use strict";var r=n(12);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){var i=t.return;throw void 0!==i&&r(i.call(t)),e}}},function(t,e,n){"use strict";var r=n(31),o=n(5)("iterator"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},function(t,e,n){"use strict";var r=n(3),o=n(5)("iterator"),i=n(31);t.exports=n(21).getIteratorMethod=function(t){if(void 0!=t)return t[o]||t["@@iterator"]||i[r(t)]}},function(t,e,n){"use strict";var r=n(12),o=n(30),i=n(5)("species");t.exports=function(t,e){var n,s=r(t).constructor;return void 0===s||void 0==(n=r(s)[i])?e:o(n)}},function(t,e,n){"use strict";var r,o,i,s=n(29),a=n(60),u=n(44),c=n(17),l=n(7),f=l.process,d=l.setImmediate,h=l.clearImmediate,p=l.MessageChannel,v=0,y={},m="onreadystatechange",g=function(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},b=function(t){g.call(t.data)};d&&h||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return y[++v]=function(){a("function"==typeof t?t:Function(t),e)},r(v),v},h=function(t){delete y[t]},"process"==n(4)(f)?r=function(t){f.nextTick(s(g,t,1))}:p?(o=new p,i=o.port2,o.port1.onmessage=b,r=s(i.postMessage,i,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(t){l.postMessage(t+"","*")},l.addEventListener("message",b,!1)):r=m in c("script")?function(t){u.appendChild(c("script"))[m]=function(){u.removeChild(this),g.call(t)}}:function(t){setTimeout(s(g,t,1),0)}),t.exports={set:d,clear:h}},function(t,e){"use strict";t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){"use strict";var r=n(7),o=n(59).set,i=r.MutationObserver||r.WebKitMutationObserver,s=r.process,a=r.Promise,u="process"==n(4)(s);t.exports=function(){var t,e,n,c=function(){var r,o;for(u&&(r=s.domain)&&r.exit();t;){o=t.fn,t=t.next;try{o()}catch(r){throw t?n():e=void 0,r}}e=void 0,r&&r.enter()};if(u)n=function(){s.nextTick(c)};else if(i){var l=!0,f=document.createTextNode("");new i(c).observe(f,{characterData:!0}),n=function(){f.data=l=!l}}else if(a&&a.resolve){var d=a.resolve();n=function(){d.then(c)}}else n=function(){o.call(r,c)};return function(r){var o={fn:r,next:void 0};e&&(e.next=o),t||(t=o,n()),e=o}}},function(t,e,n){"use strict";var r=n(9);t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},function(t,e,n){"use strict";var r=n(7),o=n(11),i=n(15),s=n(5)("species");t.exports=function(t){var e=r[t];i&&e&&!e[s]&&o.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e,n){"use strict";var r=n(5)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i=[7],s=i[r]();s.next=function(){return{done:n=!0}},i[r]=function(){return s},t(i)}catch(t){}return n}},function(t,e){"use strict";try{var n=new window.CustomEvent("test");if(n.preventDefault(),n.defaultPrevented!==!0)throw new Error("Could not prevent default")}catch(t){var r=function(t,e){var n,r;return e=e||{bubbles:!1,cancelable:!1,detail:void 0},n=document.createEvent("CustomEvent"),n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(t){this.defaultPrevented=!0}},n};r.prototype=window.Event.prototype,window.CustomEvent=r}},function(t,e){"use strict";!function(t){function e(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function n(t){return"string"!=typeof t&&(t=String(t)),t}function r(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return m.iterable&&(e[Symbol.iterator]=function(){return e}),e}function o(t){this.map={},t instanceof o?t.forEach(function(t,e){this.append(e,t)},this):t&&Object.getOwnPropertyNames(t).forEach(function(e){this.append(e,t[e])},this)}function i(t){return t.bodyUsed?Promise.reject(new TypeError("Already read")):void(t.bodyUsed=!0)}function s(t){return new Promise(function(e,n){t.onload=function(){e(t.result)},t.onerror=function(){n(t.error)}})}function a(t){var e=new FileReader,n=s(e);return e.readAsArrayBuffer(t),n}function u(t){var e=new FileReader,n=s(e);return e.readAsText(t),n}function c(t){for(var e=new Uint8Array(t),n=new Array(e.length),r=0;r-1?e:t}function h(t,e){e=e||{};var n=e.body;if("string"==typeof t)this.url=t;else{if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new o(t.headers)),this.method=t.method,this.mode=t.mode,n||null==t._bodyInit||(n=t._bodyInit,t.bodyUsed=!0)}if(this.credentials=e.credentials||this.credentials||"omit",!e.headers&&this.headers||(this.headers=new o(e.headers)),this.method=d(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function p(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var n=t.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(o))}}),e}function v(t){var e=new o;return t.split("\r\n").forEach(function(t){var n=t.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();e.append(r,o)}}),e}function y(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new o(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var m={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(m.arrayBuffer)var g=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],b=function(t){return t&&DataView.prototype.isPrototypeOf(t)},w=ArrayBuffer.isView||function(t){return t&&g.indexOf(Object.prototype.toString.call(t))>-1};o.prototype.append=function(t,r){t=e(t),r=n(r);var o=this.map[t];this.map[t]=o?o+","+r:r},o.prototype.delete=function(t){delete this.map[e(t)]},o.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},o.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},o.prototype.set=function(t,r){this.map[e(t)]=n(r)},o.prototype.forEach=function(t,e){for(var n in this.map)this.map.hasOwnProperty(n)&&t.call(e,this.map[n],n,this)},o.prototype.keys=function(){var t=[];return this.forEach(function(e,n){t.push(n)}),r(t)},o.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},o.prototype.entries=function(){var t=[];return this.forEach(function(e,n){t.push([n,e])}),r(t)},m.iterable&&(o.prototype[Symbol.iterator]=o.prototype.entries);var _=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];h.prototype.clone=function(){return new h(this,{body:this._bodyInit})},f.call(h.prototype),f.call(y.prototype),y.prototype.clone=function(){return new y(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},y.error=function(){var t=new y(null,{status:0,statusText:""});return t.type="error",t};var S=[301,302,303,307,308];y.redirect=function(t,e){if(S.indexOf(e)===-1)throw new RangeError("Invalid status code");return new y(null,{status:e,headers:{location:t}})},t.Headers=o,t.Request=h,t.Response=y,t.fetch=function(t,e){return new Promise(function(n,r){var o=new h(t,e),i=new XMLHttpRequest;i.onload=function(){var t={status:i.status,statusText:i.statusText,headers:v(i.getAllResponseHeaders()||"")};t.url="responseURL"in i?i.responseURL:t.headers.get("X-Request-URL");var e="response"in i?i.response:i.responseText;n(new y(e,t))},i.onerror=function(){r(new TypeError("Network request failed"))},i.ontimeout=function(){r(new TypeError("Network request failed"))},i.open(o.method,o.url,!0),"include"===o.credentials&&(i.withCredentials=!0),"responseType"in i&&m.blob&&(i.responseType="blob"),o.headers.forEach(function(t,e){i.setRequestHeader(e,t)}),i.send("undefined"==typeof o._bodyInit?null:o._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:void 0)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0,a=navigator.userAgent.indexOf("Android")>0&&!s,u=/iP(ad|hone|od)/.test(navigator.userAgent)&&!s,c=u&&/OS 4_\d(_\d)?/.test(navigator.userAgent),l=u&&/OS [6-7]_\d/.test(navigator.userAgent),f=navigator.userAgent.indexOf("BB10")>0;i.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(u&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},i.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!a;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},i.prototype.sendClick=function(t,e){var n,r;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),r=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},i.prototype.determineEventType=function(t){return a&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},i.prototype.focus=function(t){var e;u&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},i.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},i.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},i.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],u){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!c){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n},i.prototype.onTouchMove=function(t){return!this.trackingClick||((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0)},i.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},i.prototype.onTouchEnd=function(t){var e,n,r,o,i,s=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,l&&(i=t.changedTouches[0],s=document.elementFromPoint(i.pageX-window.pageXOffset,i.pageY-window.pageYOffset)||s,s.fastClickScrollParent=this.targetElement.fastClickScrollParent),r=s.tagName.toLowerCase(),"label"===r){if(e=this.findControl(s)){if(this.focus(s),a)return!1;s=e}}else if(this.needsFocus(s))return t.timeStamp-n>100||u&&window.top!==window&&"input"===r?(this.targetElement=null,!1):(this.focus(s),this.sendClick(s,t),u&&"select"===r||(this.targetElement=null,t.preventDefault()),!1);return!(!u||c||(o=s.fastClickScrollParent,!o||o.fastClickLastScrollTop===o.scrollTop))||(this.needsClick(s)||(t.preventDefault(),this.sendClick(s,t)),!1)},i.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},i.prototype.onMouse=function(t){return!this.targetElement||(!!t.forwardedTouchEvent||(!t.cancelable||(!(!this.needsClick(this.targetElement)||this.cancelNextClick)||(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1))))},i.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail||(e=this.onMouse(t),e||(this.targetElement=null),e)},i.prototype.destroy=function(){var t=this.layer;a&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},i.notNeeded=function(t){var e,n,r,o;if("undefined"==typeof window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!a)return!0;if(e=document.querySelector("meta[name=viewport]")){if(e.content.indexOf("user-scalable=no")!==-1)return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(f&&(r=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),r[1]>=10&&r[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(e.content.indexOf("user-scalable=no")!==-1)return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction||(o=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],!!(o>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(e.content.indexOf("user-scalable=no")!==-1||document.documentElement.scrollWidth<=window.outerWidth)))||("none"===t.style.touchAction||"manipulation"===t.style.touchAction))},i.attach=function(t,e){return new i(t,e)},"object"===o(n(69))&&n(69)?(r=function(){return i}.call(e,n,e,t),!(void 0!==r&&(t.exports=r))):"undefined"!=typeof t&&t.exports?(t.exports=i.attach,t.exports.FastClick=i):window.FastClick=i}()},function(t,e){(function(e){t.exports=e}).call(e,{})},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(71),i=r(o),s=n(74),a=r(s),u=n(78),c=r(u),l=n(83),f=r(l),d=n(86),h=r(d);e.default={Event:i.default,Nav:a.default,Search:c.default,Sidebar:f.default,Source:h.default},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(72),i=r(o),s=n(73),a=r(s);e.default={Listener:i.default,MatchMedia:a.default},t.exports=e.default},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n0&&(this.els_[e-1].dataset.mdState="blur"),this.index_=e;else for(var n=this.index_;n>=0;n--){if(!(this.anchors_[n].offsetTop-80>t)){this.index_=n;break}n>0&&(this.els_[n-1].dataset.mdState="")}this.offset_=t}}},{key:"reset",value:function(){Array.prototype.forEach.call(this.els_,function(t){t.dataset.mdState=""}),this.index_=0,this.offset_=window.pageYOffset}}]),t}();e.default=o,t.exports=e.default},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;nn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}}return a(t,[{key:"update",value:function(t){var e=this;if("focus"!==t.type||this.index_){if("keyup"===t.type){for(;this.list_.firstChild;)this.list_.removeChild(this.list_.firstChild);var n=this.index_.search(t.target.value);n.forEach(function(t){var n=e.data_[t.ref],o=n.location.split("#"),i=s(o,1),a=i[0];a=a.replace(/^(\/?\.{2})+/g,""),e.list_.appendChild(r.createElement("li",{class:"md-search-result__item"},r.createElement("a",{href:n.location,title:n.title,class:"md-search-result__link","data-md-rel":a===document.location.pathname?"anchor":""},r.createElement("article",{class:"md-search-result__article"},r.createElement("h1",{class:"md-search-result__title"},n.title),r.createElement("p",{class:"md-search-result__teaser"},e.truncate_(n.text,140))))))});var o=this.list_.querySelectorAll("[data-md-rel=anchor]");Array.prototype.forEach.call(o,function(t){t.addEventListener("click",function(e){var n=document.querySelector("[data-md-toggle=search]");n.checked&&(n.checked=!1,n.dispatchEvent(new CustomEvent("change"))),e.preventDefault(),setTimeout(function(){document.location.href=t.href},100)})}),this.meta_.textContent=n.length+" search result"+(1!==n.length?"s":"")}}else!function(){var t=function(t){e.index_=(0,c.default)(function(){this.field("title",{boost:10}),this.field("text"),this.ref("location")}),e.data_=t.reduce(function(t,n){return e.index_.add(n),t[n.location]=n,t},{})};setTimeout(function(){return"function"==typeof e.data_?e.data_().then(t):t(e.data_)},250)}()}}]),t}();e.default=l,t.exports=e.default}).call(e,n(81))},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={createElement:function(t,e){var n=document.createElement(t);e&&Array.prototype.forEach.call(Object.keys(e),function(t){n.setAttribute(t,e[t])});for(var r=function t(e){Array.prototype.forEach.call(e,function(e){"string"==typeof e||"number"==typeof e?n.textContent+=e:Array.isArray(e)?t(e):n.appendChild(e)})},o=arguments.length,i=Array(o>2?o-2:0),s=2;sn.idx?n=n.next:(r+=e.val*n.val,e=e.next,n=n.next);return r},i.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},/*! + * lunr.SortedSet + * Copyright (C) 2016 Oliver Nightingale + */ +i.SortedSet=function(){this.length=0,this.elements=[]},i.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},i.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(i===t)return o;it&&(n=o),r=n-e,o=e+Math.floor(r/2),i=this.elements[o]}return i===t?o:-1},i.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,r=n-e,o=e+Math.floor(r/2),i=this.elements[o];r>1;)it&&(n=o),r=n-e,o=e+Math.floor(r/2),i=this.elements[o];return i>t?o:io-1||r>s-1)break;a[n]!==u[r]?a[n]u[r]&&r++:(e.add(a[n]),n++,r++)}return e},i.SortedSet.prototype.clone=function(){var t=new i.SortedSet;return t.elements=this.toArray(),t.length=t.elements.length,t},i.SortedSet.prototype.union=function(t){var e,n,r;this.length>=t.length?(e=this,n=t):(e=t,n=this),r=e.clone();for(var o=0,i=n.toArray();o0&&(r=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=r},i.Index.prototype.search=function(t){var e=this.pipeline.run(this.tokenizerFn(t)),n=new i.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=e.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];e.forEach(function(t,e,s){var a=1/s.length*this._fields.length*o,u=this,c=this.tokenStore.expand(t).reduce(function(e,r){var o=u.corpusTokens.indexOf(r),s=u.idf(r),c=1,l=new i.SortedSet;if(r!==t){var f=Math.max(3,r.length-t.length);c=1/Math.log(f)}o>-1&&n.insert(o,a*s*c);for(var d=u.tokenStore.get(r),h=Object.keys(d),p=h.length,v=0;v=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")}},{key:"reset",value:function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0}}]),t}();e.default=o,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(87),i=r(o),s=n(91),a=r(s);e.default={Adapter:i.default,Repository:a.default},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(88),i=r(o);e.default={GitHub:i.default},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n1e4?(t/1e3).toFixed(0)+"k":t>1e3?(t/1e3).toFixed(1)+"k":t}},{key:"hash_",value:function(t){var e=0;if(0===t.length)return e;for(var n=0,r=t.length;n1){if(i=t({path:"/"},r.defaults,i),"number"==typeof i.expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*i.expires),i.expires=a}try{s=JSON.stringify(o),/^[\{\[]/.test(s)&&(o=s)}catch(t){}return o=n.write?n.write(o,e):encodeURIComponent(String(o)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)),e=e.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),e=e.replace(/[\(\)]/g,escape),document.cookie=[e,"=",o,i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}e||(s={});for(var u=document.cookie?document.cookie.split("; "):[],c=/(%[0-9A-Z]{2})+/g,l=0;l=9,r=t<533&&e.match(/android/gi);return n||r||s}();E?_.addTest("fontface",!1):z('@font-face {font-family:"font";src:url("https://")}',function(e,n){var s=t.getElementById("smodernizr"),r=s.sheet||s.styleSheet,o=r?r.cssRules&&r.cssRules[0]?r.cssRules[0].cssText:r.cssText||"":"",i=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);_.addTest("fontface",i)});var j="Moz O ms Webkit",k=x._config.usePrefixes?j.split(" "):[];x._cssomPrefixes=k;var N={elem:a("modernizr")};_._q.push(function(){delete N.elem});var A={style:N.elem.style};_._q.unshift(function(){delete A.style});var R=x._config.usePrefixes?j.toLowerCase().split(" "):[];x._domPrefixes=R,x.testAllProps=v,x.testAllProps=y;var q="CSS"in e&&"supports"in e.CSS,L="supportsCSS"in e;_.addTest("supports",q||L),_.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=_._config.usePrefixes;if(e&&(!t||"webkitPerspective"in b.style)){var n,s="#modernizr{width:0;height:0}";_.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",z(s+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),r(),o(S),delete x.addTest,delete x.addAsyncTest;for(var O=0;O<_._q.length;O++)_._q[O]();e.Modernizr=_}(window,document); \ No newline at end of file diff --git a/site/assets/stylesheets/application-02ce7adcc2.palette.css b/site/assets/stylesheets/application-02ce7adcc2.palette.css new file mode 100644 index 000000000..2195a9f4a --- /dev/null +++ b/site/assets/stylesheets/application-02ce7adcc2.palette.css @@ -0,0 +1 @@ +button[data-md-color-accent],button[data-md-color-primary]{width:13rem;margin-bottom:.4rem;padding:2.4rem .8rem .4rem;-webkit-transition:background-color .25s,opacity .25s;transition:background-color .25s,opacity .25s;border-radius:.2rem;color:#fff;font-size:1.28rem;text-align:left;cursor:pointer}button[data-md-color-accent]:hover,button[data-md-color-primary]:hover{opacity:.75}button[data-md-color-primary=red]{background-color:#ef5350}[data-md-color-primary=red] .md-typeset a{color:#ef5350}[data-md-color-primary=red] .md-header{background-color:#ef5350}[data-md-color-primary=red] .md-nav__link--active,[data-md-color-primary=red] .md-nav__link:active{color:#ef5350}button[data-md-color-primary=pink]{background-color:#e91e63}[data-md-color-primary=pink] .md-typeset a{color:#e91e63}[data-md-color-primary=pink] .md-header{background-color:#e91e63}[data-md-color-primary=pink] .md-nav__link--active,[data-md-color-primary=pink] .md-nav__link:active{color:#e91e63}button[data-md-color-primary=purple]{background-color:#ab47bc}[data-md-color-primary=purple] .md-typeset a{color:#ab47bc}[data-md-color-primary=purple] .md-header{background-color:#ab47bc}[data-md-color-primary=purple] .md-nav__link--active,[data-md-color-primary=purple] .md-nav__link:active{color:#ab47bc}button[data-md-color-primary=deep-purple]{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-typeset a{color:#7e57c2}[data-md-color-primary=deep-purple] .md-header{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-nav__link--active,[data-md-color-primary=deep-purple] .md-nav__link:active{color:#7e57c2}button[data-md-color-primary=indigo]{background-color:#3f51b5}[data-md-color-primary=indigo] .md-typeset a{color:#3f51b5}[data-md-color-primary=indigo] .md-header{background-color:#3f51b5}[data-md-color-primary=indigo] .md-nav__link--active,[data-md-color-primary=indigo] .md-nav__link:active{color:#3f51b5}button[data-md-color-primary=blue]{background-color:#2196f3}[data-md-color-primary=blue] .md-typeset a{color:#2196f3}[data-md-color-primary=blue] .md-header{background-color:#2196f3}[data-md-color-primary=blue] .md-nav__link--active,[data-md-color-primary=blue] .md-nav__link:active{color:#2196f3}button[data-md-color-primary=light-blue]{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-typeset a{color:#03a9f4}[data-md-color-primary=light-blue] .md-header{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-nav__link--active,[data-md-color-primary=light-blue] .md-nav__link:active{color:#03a9f4}button[data-md-color-primary=cyan]{background-color:#00bcd4}[data-md-color-primary=cyan] .md-typeset a{color:#00bcd4}[data-md-color-primary=cyan] .md-header{background-color:#00bcd4}[data-md-color-primary=cyan] .md-nav__link--active,[data-md-color-primary=cyan] .md-nav__link:active{color:#00bcd4}button[data-md-color-primary=teal]{background-color:#009688}[data-md-color-primary=teal] .md-typeset a{color:#009688}[data-md-color-primary=teal] .md-header{background-color:#009688}[data-md-color-primary=teal] .md-nav__link--active,[data-md-color-primary=teal] .md-nav__link:active{color:#009688}button[data-md-color-primary=green]{background-color:#4caf50}[data-md-color-primary=green] .md-typeset a{color:#4caf50}[data-md-color-primary=green] .md-header{background-color:#4caf50}[data-md-color-primary=green] .md-nav__link--active,[data-md-color-primary=green] .md-nav__link:active{color:#4caf50}button[data-md-color-primary=light-green]{background-color:#7cb342}[data-md-color-primary=light-green] .md-typeset a{color:#7cb342}[data-md-color-primary=light-green] .md-header{background-color:#7cb342}[data-md-color-primary=light-green] .md-nav__link--active,[data-md-color-primary=light-green] .md-nav__link:active{color:#7cb342}button[data-md-color-primary=lime]{background-color:#c0ca33}[data-md-color-primary=lime] .md-typeset a{color:#c0ca33}[data-md-color-primary=lime] .md-header{background-color:#c0ca33}[data-md-color-primary=lime] .md-nav__link--active,[data-md-color-primary=lime] .md-nav__link:active{color:#c0ca33}button[data-md-color-primary=yellow]{background-color:#f9a825}[data-md-color-primary=yellow] .md-typeset a{color:#f9a825}[data-md-color-primary=yellow] .md-header{background-color:#f9a825}[data-md-color-primary=yellow] .md-nav__link--active,[data-md-color-primary=yellow] .md-nav__link:active{color:#f9a825}button[data-md-color-primary=amber]{background-color:#ffb300}[data-md-color-primary=amber] .md-typeset a{color:#ffb300}[data-md-color-primary=amber] .md-header{background-color:#ffb300}[data-md-color-primary=amber] .md-nav__link--active,[data-md-color-primary=amber] .md-nav__link:active{color:#ffb300}button[data-md-color-primary=orange]{background-color:#fb8c00}[data-md-color-primary=orange] .md-typeset a{color:#fb8c00}[data-md-color-primary=orange] .md-header{background-color:#fb8c00}[data-md-color-primary=orange] .md-nav__link--active,[data-md-color-primary=orange] .md-nav__link:active{color:#fb8c00}button[data-md-color-primary=deep-orange]{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-typeset a{color:#ff7043}[data-md-color-primary=deep-orange] .md-header{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-nav__link--active,[data-md-color-primary=deep-orange] .md-nav__link:active{color:#ff7043}button[data-md-color-primary=brown]{background-color:#795548}[data-md-color-primary=brown] .md-typeset a{color:#795548}[data-md-color-primary=brown] .md-header{background-color:#795548}[data-md-color-primary=brown] .md-nav__link--active,[data-md-color-primary=brown] .md-nav__link:active{color:#795548}button[data-md-color-primary=grey]{background-color:#757575}[data-md-color-primary=grey] .md-typeset a{color:#757575}[data-md-color-primary=grey] .md-header{background-color:#757575}[data-md-color-primary=grey] .md-nav__link--active,[data-md-color-primary=grey] .md-nav__link:active{color:#757575}button[data-md-color-primary=blue-grey]{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-typeset a{color:#546e7a}[data-md-color-primary=blue-grey] .md-header{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-nav__link--active,[data-md-color-primary=blue-grey] .md-nav__link:active{color:#546e7a}button[data-md-color-accent=red]{background-color:#ff1744}[data-md-color-accent=red] .md-typeset a:active,[data-md-color-accent=red] .md-typeset a:hover{color:#ff1744}[data-md-color-accent=red] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=red] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-nav__link:hover,[data-md-color-accent=red] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=red] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=red] .md-typeset [id] .headerlink:focus,[data-md-color-accent=red] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=red] .md-typeset [id]:target .headerlink{color:#ff1744}[data-md-color-accent=red] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-search-result__link:hover{background-color:rgba(255,23,68,.1)}[data-md-color-accent=red] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}button[data-md-color-accent=pink]{background-color:#f50057}[data-md-color-accent=pink] .md-typeset a:active,[data-md-color-accent=pink] .md-typeset a:hover{color:#f50057}[data-md-color-accent=pink] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=pink] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-nav__link:hover,[data-md-color-accent=pink] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=pink] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=pink] .md-typeset [id] .headerlink:focus,[data-md-color-accent=pink] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=pink] .md-typeset [id]:target .headerlink{color:#f50057}[data-md-color-accent=pink] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-search-result__link:hover{background-color:rgba(245,0,87,.1)}[data-md-color-accent=pink] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}button[data-md-color-accent=purple]{background-color:#e040fb}[data-md-color-accent=purple] .md-typeset a:active,[data-md-color-accent=purple] .md-typeset a:hover{color:#e040fb}[data-md-color-accent=purple] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=purple] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-nav__link:hover,[data-md-color-accent=purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=purple] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=purple] .md-typeset [id]:target .headerlink{color:#e040fb}[data-md-color-accent=purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-search-result__link:hover{background-color:rgba(224,64,251,.1)}[data-md-color-accent=purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}button[data-md-color-accent=deep-purple]{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset a:active,[data-md-color-accent=deep-purple] .md-typeset a:hover{color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-purple] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-nav__link:hover,[data-md-color-accent=deep-purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-purple] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=deep-purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-purple] .md-typeset [id]:target .headerlink{color:#7c4dff}[data-md-color-accent=deep-purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-search-result__link:hover{background-color:rgba(124,77,255,.1)}[data-md-color-accent=deep-purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}button[data-md-color-accent=indigo]{background-color:#536dfe}[data-md-color-accent=indigo] .md-typeset a:active,[data-md-color-accent=indigo] .md-typeset a:hover{color:#536dfe}[data-md-color-accent=indigo] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=indigo] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-nav__link:hover,[data-md-color-accent=indigo] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=indigo] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=indigo] .md-typeset [id] .headerlink:focus,[data-md-color-accent=indigo] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=indigo] .md-typeset [id]:target .headerlink{color:#536dfe}[data-md-color-accent=indigo] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-search-result__link:hover{background-color:rgba(83,109,254,.1)}[data-md-color-accent=indigo] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}button[data-md-color-accent=blue]{background-color:#448aff}[data-md-color-accent=blue] .md-typeset a:active,[data-md-color-accent=blue] .md-typeset a:hover{color:#448aff}[data-md-color-accent=blue] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=blue] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-nav__link:hover,[data-md-color-accent=blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=blue] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=blue] .md-typeset [id]:target .headerlink{color:#448aff}[data-md-color-accent=blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-search-result__link:hover{background-color:rgba(68,138,255,.1)}[data-md-color-accent=blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}button[data-md-color-accent=light-blue]{background-color:#0091ea}[data-md-color-accent=light-blue] .md-typeset a:active,[data-md-color-accent=light-blue] .md-typeset a:hover{color:#0091ea}[data-md-color-accent=light-blue] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-blue] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-nav__link:hover,[data-md-color-accent=light-blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-blue] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=light-blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-blue] .md-typeset [id]:target .headerlink{color:#0091ea}[data-md-color-accent=light-blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-search-result__link:hover{background-color:rgba(0,145,234,.1)}[data-md-color-accent=light-blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}button[data-md-color-accent=cyan]{background-color:#00b8d4}[data-md-color-accent=cyan] .md-typeset a:active,[data-md-color-accent=cyan] .md-typeset a:hover{color:#00b8d4}[data-md-color-accent=cyan] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=cyan] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-nav__link:hover,[data-md-color-accent=cyan] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=cyan] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=cyan] .md-typeset [id] .headerlink:focus,[data-md-color-accent=cyan] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=cyan] .md-typeset [id]:target .headerlink{color:#00b8d4}[data-md-color-accent=cyan] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-search-result__link:hover{background-color:rgba(0,184,212,.1)}[data-md-color-accent=cyan] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}button[data-md-color-accent=teal]{background-color:#00bfa5}[data-md-color-accent=teal] .md-typeset a:active,[data-md-color-accent=teal] .md-typeset a:hover{color:#00bfa5}[data-md-color-accent=teal] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=teal] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-nav__link:hover,[data-md-color-accent=teal] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=teal] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=teal] .md-typeset [id] .headerlink:focus,[data-md-color-accent=teal] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=teal] .md-typeset [id]:target .headerlink{color:#00bfa5}[data-md-color-accent=teal] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-search-result__link:hover{background-color:rgba(0,191,165,.1)}[data-md-color-accent=teal] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}button[data-md-color-accent=green]{background-color:#00c853}[data-md-color-accent=green] .md-typeset a:active,[data-md-color-accent=green] .md-typeset a:hover{color:#00c853}[data-md-color-accent=green] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=green] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-nav__link:hover,[data-md-color-accent=green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=green] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=green] .md-typeset [id]:target .headerlink{color:#00c853}[data-md-color-accent=green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-search-result__link:hover{background-color:rgba(0,200,83,.1)}[data-md-color-accent=green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}button[data-md-color-accent=light-green]{background-color:#64dd17}[data-md-color-accent=light-green] .md-typeset a:active,[data-md-color-accent=light-green] .md-typeset a:hover{color:#64dd17}[data-md-color-accent=light-green] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-green] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-nav__link:hover,[data-md-color-accent=light-green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-green] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=light-green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-green] .md-typeset [id]:target .headerlink{color:#64dd17}[data-md-color-accent=light-green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-search-result__link:hover{background-color:rgba(100,221,23,.1)}[data-md-color-accent=light-green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}button[data-md-color-accent=lime]{background-color:#aeea00}[data-md-color-accent=lime] .md-typeset a:active,[data-md-color-accent=lime] .md-typeset a:hover{color:#aeea00}[data-md-color-accent=lime] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=lime] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-nav__link:hover,[data-md-color-accent=lime] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=lime] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=lime] .md-typeset [id] .headerlink:focus,[data-md-color-accent=lime] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=lime] .md-typeset [id]:target .headerlink{color:#aeea00}[data-md-color-accent=lime] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-search-result__link:hover{background-color:rgba(174,234,0,.1)}[data-md-color-accent=lime] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}button[data-md-color-accent=yellow]{background-color:#ffd600}[data-md-color-accent=yellow] .md-typeset a:active,[data-md-color-accent=yellow] .md-typeset a:hover{color:#ffd600}[data-md-color-accent=yellow] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=yellow] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-nav__link:hover,[data-md-color-accent=yellow] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=yellow] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=yellow] .md-typeset [id] .headerlink:focus,[data-md-color-accent=yellow] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=yellow] .md-typeset [id]:target .headerlink{color:#ffd600}[data-md-color-accent=yellow] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-search-result__link:hover{background-color:rgba(255,214,0,.1)}[data-md-color-accent=yellow] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}button[data-md-color-accent=amber]{background-color:#ffab00}[data-md-color-accent=amber] .md-typeset a:active,[data-md-color-accent=amber] .md-typeset a:hover{color:#ffab00}[data-md-color-accent=amber] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=amber] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-nav__link:hover,[data-md-color-accent=amber] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=amber] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=amber] .md-typeset [id] .headerlink:focus,[data-md-color-accent=amber] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=amber] .md-typeset [id]:target .headerlink{color:#ffab00}[data-md-color-accent=amber] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-search-result__link:hover{background-color:rgba(255,171,0,.1)}[data-md-color-accent=amber] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}button[data-md-color-accent=orange]{background-color:#ff9100}[data-md-color-accent=orange] .md-typeset a:active,[data-md-color-accent=orange] .md-typeset a:hover{color:#ff9100}[data-md-color-accent=orange] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=orange] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-nav__link:hover,[data-md-color-accent=orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=orange] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=orange] .md-typeset [id]:target .headerlink{color:#ff9100}[data-md-color-accent=orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-search-result__link:hover{background-color:rgba(255,145,0,.1)}[data-md-color-accent=orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}button[data-md-color-accent=deep-orange]{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset a:active,[data-md-color-accent=deep-orange] .md-typeset a:hover{color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset .codehilite::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-orange] .md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-nav__link:hover,[data-md-color-accent=deep-orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-orange] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=deep-orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-orange] .md-typeset [id]:target .headerlink{color:#ff6e40}[data-md-color-accent=deep-orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-search-result__link:hover{background-color:rgba(255,110,64,.1)}[data-md-color-accent=deep-orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}@media only screen and (max-width:59.9375em){[data-md-color-primary=red] .md-nav__source{background-color:rgba(190,66,64,.9675)}[data-md-color-primary=pink] .md-nav__source{background-color:rgba(185,24,79,.9675)}[data-md-color-primary=purple] .md-nav__source{background-color:rgba(136,57,150,.9675)}[data-md-color-primary=deep-purple] .md-nav__source{background-color:rgba(100,69,154,.9675)}[data-md-color-primary=indigo] .md-nav__source{background-color:rgba(50,64,144,.9675)}[data-md-color-primary=blue] .md-nav__source{background-color:rgba(26,119,193,.9675)}[data-md-color-primary=light-blue] .md-nav__source{background-color:rgba(2,134,194,.9675)}[data-md-color-primary=cyan] .md-nav__source{background-color:rgba(0,150,169,.9675)}[data-md-color-primary=teal] .md-nav__source{background-color:rgba(0,119,108,.9675)}[data-md-color-primary=green] .md-nav__source{background-color:rgba(60,139,64,.9675)}[data-md-color-primary=light-green] .md-nav__source{background-color:rgba(99,142,53,.9675)}[data-md-color-primary=lime] .md-nav__source{background-color:rgba(153,161,41,.9675)}[data-md-color-primary=yellow] .md-nav__source{background-color:rgba(198,134,29,.9675)}[data-md-color-primary=amber] .md-nav__source{background-color:rgba(203,142,0,.9675)}[data-md-color-primary=orange] .md-nav__source{background-color:rgba(200,111,0,.9675)}[data-md-color-primary=deep-orange] .md-nav__source{background-color:rgba(203,89,53,.9675)}[data-md-color-primary=brown] .md-nav__source{background-color:rgba(96,68,57,.9675)}[data-md-color-primary=grey] .md-nav__source{background-color:rgba(93,93,93,.9675)}[data-md-color-primary=blue-grey] .md-nav__source{background-color:rgba(67,88,97,.9675)}}@media only screen and (max-width:76.1875em){html [data-md-color-primary=red] .md-nav--primary .md-nav__title--site{background-color:#ef5350}html [data-md-color-primary=pink] .md-nav--primary .md-nav__title--site{background-color:#e91e63}html [data-md-color-primary=purple] .md-nav--primary .md-nav__title--site{background-color:#ab47bc}html [data-md-color-primary=deep-purple] .md-nav--primary .md-nav__title--site{background-color:#7e57c2}html [data-md-color-primary=indigo] .md-nav--primary .md-nav__title--site{background-color:#3f51b5}html [data-md-color-primary=blue] .md-nav--primary .md-nav__title--site{background-color:#2196f3}html [data-md-color-primary=light-blue] .md-nav--primary .md-nav__title--site{background-color:#03a9f4}html [data-md-color-primary=cyan] .md-nav--primary .md-nav__title--site{background-color:#00bcd4}html [data-md-color-primary=teal] .md-nav--primary .md-nav__title--site{background-color:#009688}html [data-md-color-primary=green] .md-nav--primary .md-nav__title--site{background-color:#4caf50}html [data-md-color-primary=light-green] .md-nav--primary .md-nav__title--site{background-color:#7cb342}html [data-md-color-primary=lime] .md-nav--primary .md-nav__title--site{background-color:#c0ca33}html [data-md-color-primary=yellow] .md-nav--primary .md-nav__title--site{background-color:#f9a825}html [data-md-color-primary=amber] .md-nav--primary .md-nav__title--site{background-color:#ffb300}html [data-md-color-primary=orange] .md-nav--primary .md-nav__title--site{background-color:#fb8c00}html [data-md-color-primary=deep-orange] .md-nav--primary .md-nav__title--site{background-color:#ff7043}html [data-md-color-primary=brown] .md-nav--primary .md-nav__title--site{background-color:#795548}html [data-md-color-primary=grey] .md-nav--primary .md-nav__title--site{background-color:#757575}html [data-md-color-primary=blue-grey] .md-nav--primary .md-nav__title--site{background-color:#546e7a}}@media only screen and (min-width:60em){[data-md-color-primary=red] .md-nav--secondary{border-left:.4rem solid #ef5350}[data-md-color-primary=pink] .md-nav--secondary{border-left:.4rem solid #e91e63}[data-md-color-primary=purple] .md-nav--secondary{border-left:.4rem solid #ab47bc}[data-md-color-primary=deep-purple] .md-nav--secondary{border-left:.4rem solid #7e57c2}[data-md-color-primary=indigo] .md-nav--secondary{border-left:.4rem solid #3f51b5}[data-md-color-primary=blue] .md-nav--secondary{border-left:.4rem solid #2196f3}[data-md-color-primary=light-blue] .md-nav--secondary{border-left:.4rem solid #03a9f4}[data-md-color-primary=cyan] .md-nav--secondary{border-left:.4rem solid #00bcd4}[data-md-color-primary=teal] .md-nav--secondary{border-left:.4rem solid #009688}[data-md-color-primary=green] .md-nav--secondary{border-left:.4rem solid #4caf50}[data-md-color-primary=light-green] .md-nav--secondary{border-left:.4rem solid #7cb342}[data-md-color-primary=lime] .md-nav--secondary{border-left:.4rem solid #c0ca33}[data-md-color-primary=yellow] .md-nav--secondary{border-left:.4rem solid #f9a825}[data-md-color-primary=amber] .md-nav--secondary{border-left:.4rem solid #ffb300}[data-md-color-primary=orange] .md-nav--secondary{border-left:.4rem solid #fb8c00}[data-md-color-primary=deep-orange] .md-nav--secondary{border-left:.4rem solid #ff7043}[data-md-color-primary=brown] .md-nav--secondary{border-left:.4rem solid #795548}[data-md-color-primary=grey] .md-nav--secondary{border-left:.4rem solid #757575}[data-md-color-primary=blue-grey] .md-nav--secondary{border-left:.4rem solid #546e7a}} \ No newline at end of file diff --git a/site/assets/stylesheets/application-1b8b9fdf68.css b/site/assets/stylesheets/application-1b8b9fdf68.css new file mode 100644 index 000000000..719c7e3cb --- /dev/null +++ b/site/assets/stylesheets/application-1b8b9fdf68.css @@ -0,0 +1 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}a:active,a:hover{outline-width:0}small,sub,sup{font-size:80%}sub,sup{position:relative;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}table{border-collapse:collapse;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{padding:0;background:transparent;font-size:inherit}button,input{border:0;outline:0}.admonition:before,.md-icon,.md-nav__button,.md-nav__link:after,.md-nav__title:before,.md-typeset .critic.comment:before,.md-typeset .footnote-backref,.md-typeset .task-list-control .task-list-indicator:before{font-family:Material Icons;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-content__edit,.md-footer-nav__button,.md-header-nav__button,.md-nav__button,.md-nav__title:before{display:inline-block;margin:.4rem;padding:.8rem;font-size:2.4rem;cursor:pointer}.md-icon--arrow-back:before{content:"arrow_back"}.md-icon--arrow-forward:before{content:"arrow_forward"}.md-icon--menu:before{content:"menu"}.md-icon--search:before{content:"search"}.md-icon--home:before{content:"school"}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern","onum","liga";font-feature-settings:"kern","onum","liga";font-weight:400}.no-fontface body,.no-fontface input{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}code,kbd,pre{color:rgba(0,0,0,.87);-webkit-font-feature-settings:"kern","onum","liga";font-feature-settings:"kern","onum","liga";font-weight:400}.no-fontface code,.no-fontface kbd,.no-fontface pre{font-family:Courier New,Courier,monospace}.md-typeset{font-size:1.6rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset blockquote,.md-typeset ol,.md-typeset p,.md-typeset ul{margin:1em 0}.md-typeset h1{margin:0 0 4rem;color:rgba(0,0,0,.54);font-size:3.125rem;line-height:1.3}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{margin:4rem 0 1.6rem;font-size:2.5rem;line-height:1.4}.md-typeset h3{margin:3.2rem 0 1.6rem;font-size:2rem;font-weight:400;letter-spacing:-.01em;line-height:1.5}.md-typeset h2+h3{margin-top:1.6rem}.md-typeset h4{font-size:1.6rem}.md-typeset h4,.md-typeset h5,.md-typeset h6{margin:1.6rem 0;font-weight:700;letter-spacing:-.01em}.md-typeset h5,.md-typeset h6{color:rgba(0,0,0,.54);font-size:1.28rem}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.1rem dotted rgba(0,0,0,.26)}.md-typeset a{color:#3f51b5;word-break:break-word}.md-typeset a,.md-typeset a:before{-webkit-transition:color .125s;transition:color .125s}.md-typeset a:active,.md-typeset a:hover{color:#536dfe}.md-typeset code,.md-typeset pre{background-color:hsla(0,0%,93%,.5);color:#37474f;font-size:85%}.md-typeset code{margin:0 .29412em;padding:.07353em 0;border-radius:.2rem;box-shadow:.29412em 0 0 hsla(0,0%,93%,.5),-.29412em 0 0 hsla(0,0%,93%,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:none;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{margin:1em 0;padding:1rem 1.2rem;border-radius:.2rem;line-height:1.4;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset pre::-webkit-scrollbar{width:.4rem;height:.4rem}.md-typeset pre::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset pre>code{margin:0;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:none;box-decoration-break:none}.md-typeset kbd{padding:0 .29412em;border:.1rem solid #c9c9c9;border-radius:.2rem;border-bottom-color:#bcbcbc;background-color:#fcfcfc;color:#555;font-size:85%;box-shadow:0 .1rem 0 #b0b0b0;word-break:break-word}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.2rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.1rem dotted rgba(0,0,0,.54);cursor:help}.md-typeset small{opacity:.75}.md-typeset sub,.md-typeset sup{margin-left:.07812em}.md-typeset blockquote{padding-left:1.2rem;border-left:.4rem solid rgba(0,0,0,.26);color:rgba(0,0,0,.54)}.md-typeset ul{list-style-type:disc}.md-typeset ol,.md-typeset ul{margin-left:.625em;padding:0}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em;margin-left:1.25em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin:.5em 0 .5em .625em}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);margin:2em 0;border-radius:.2rem;font-size:1.28rem;overflow:hidden}.no-js .md-typeset table:not([class]){display:inline-block;max-width:100%;margin:.8em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}.md-typeset table:not([class]) th{min-width:10rem;padding:1.2rem 1.6rem;background-color:rgba(0,0,0,.54);color:#fff;vertical-align:top}.md-typeset table:not([class]) td{padding:1.2rem 1.6rem;border-top:.1rem solid rgba(0,0,0,.07);vertical-align:top}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset .md-typeset__table{margin:1.6em -1.6rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table table{display:inline-block;margin:0 1.6rem}html{font-size:62.5%}body,html{height:100%}body{position:relative}hr{display:block;height:.1rem;padding:0;border:0}.md-svg{display:none}.md-grid{max-width:122rem;margin-right:auto;margin-left:auto}.md-container,.md-main{overflow:auto}.md-container{display:table;width:100%;height:100%;table-layout:fixed}.md-main{display:table-row;height:100%}.md-main__inner{margin-top:5.6rem;padding-top:3rem;overflow:auto}.csscalc .md-main__inner{min-height:calc(100% - 2.6rem)}@-moz-document url-prefix(){.csscalc .md-main__inner{min-height:calc(100% - 5.6rem)}}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;-webkit-transition:width 0s .25s,height 0s .25s,opacity .25s;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);opacity:0;z-index:2}.md-flex{display:table}.md-flex__cell{display:table-cell;position:relative;vertical-align:top}.md-flex__cell--shrink{width:0}.md-flex__cell--stretch{display:table;width:100%;table-layout:fixed}.md-flex__ellipsis{display:table-cell;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@page{margin:25mm}.md-content__inner{margin:2.4rem 1.6rem}.md-content__edit{float:right}.md-header{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:fixed;top:0;right:0;left:0;height:5.6rem;-webkit-transition:background-color .25s;transition:background-color .25s;background-color:#3f51b5;color:#fff;z-index:1}.md-header-nav{padding:.4rem}.md-header-nav__button{position:relative;-webkit-transition:opacity .25s;transition:opacity .25s;z-index:1}.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo img{display:block}.no-js .md-header-nav__button.md-icon--search{display:none}.md-header-nav__title{padding:0 2rem;font-size:1.8rem;line-height:4.8rem}.md-header-nav__parent{color:hsla(0,0%,100%,.7)}.md-header-nav__parent:after{display:inline;color:hsla(0,0%,100%,.3);content:"/"}.md-header-nav__source{display:none}.md-footer-nav{background-color:rgba(0,0,0,.87);color:#fff}.md-footer-nav__inner{padding:.4rem;overflow:auto}.md-footer-nav__link{padding-top:2.8rem;padding-bottom:.8rem;-webkit-transition:opacity .25s;transition:opacity .25s}.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}.md-footer-nav__link--next{width:75%;float:right;text-align:right}.md-footer-nav__button{-webkit-transition:background .25s;transition:background .25s}.md-footer-nav__title{position:relative;padding:0 2rem;font-size:1.8rem;line-height:4.8rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-2rem;padding:0 2rem;color:hsla(0,0%,100%,.7);font-size:1.5rem}.md-footer-meta{background:rgba(0,0,0,.895)}.md-footer-meta__inner{padding:.4rem;overflow:auto}html .md-footer-meta.md-typeset a{color:hsla(0,0%,100%,.7)}.md-footer-copyright{margin:0 1.2rem;padding:.8rem 0;color:hsla(0,0%,100%,.3);font-size:1.28rem}.md-footer-copyright__highlight{color:hsla(0,0%,100%,.7)}.md-footer-social{margin:0 .8rem;padding:.4rem 0 1.2rem}.md-footer-social__link{display:inline-block;width:3.2rem;height:3.2rem;border:.1rem solid hsla(0,0%,100%,.12);border-radius:100%;color:hsla(0,0%,100%,.7);font-size:1.6rem;text-align:center}.md-footer-social__link:before{line-height:1.9}.md-nav{font-size:1.28rem;line-height:1.3}.md-nav--secondary{-webkit-transition:border-left .25s;transition:border-left .25s;border-left:.4rem solid #3f51b5}.md-nav__title{display:block;padding:1.2rem 1.2rem 0;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title:before{display:none;content:"arrow_back"}.md-nav__title .md-nav__button{display:none}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:.625em 1.2rem 0}.md-nav__item:last-child{padding-bottom:1.2rem}.md-nav__item .md-nav__item{padding-right:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__button img{width:100%;height:auto}.md-nav__link{display:block;-webkit-transition:color .125s;transition:color .125s;text-overflow:ellipsis;cursor:pointer;overflow:hidden}.md-nav__item--nested>.md-nav__link:after{content:"keyboard_arrow_down"}html .md-nav__link[for=toc],html .md-nav__link[for=toc]+.md-nav__link:after,html .md-nav__link[for=toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:rgba(0,0,0,.54)}.md-nav__link--active,.md-nav__link:active{color:#3f51b5}.md-nav__link:hover{color:#536dfe}.md-nav__source,.no-js .md-search{display:none}.md-search__overlay{display:none;pointer-events:none}.md-search__inner{width:100%}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 1.6rem 0 7.2rem;text-overflow:ellipsis;z-index:1}.md-search__input+.md-search__icon,.md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}.md-search__input+.md-search__icon,.md-search__input::-moz-placeholder{color:rgba(0,0,0,.54)}.md-search__input+.md-search__icon,.md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}.md-search__input+.md-search__icon,.md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;top:.8rem;left:1.2rem;-webkit-transition:color .25s;transition:color .25s;font-size:2.4rem;cursor:pointer;z-index:1}.md-search__icon:before{content:"search"}.md-search__output{position:absolute;width:100%;border-radius:0 0 .2rem .2rem;overflow:hidden}.md-search__scrollwrap{height:100%;background:-webkit-linear-gradient(top,#fff 10%,hsla(0,0%,100%,0)),-webkit-linear-gradient(top,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background:linear-gradient(180deg,#fff 10%,hsla(0,0%,100%,0)),linear-gradient(180deg,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background-attachment:local,scroll;background-color:#fff;background-repeat:no-repeat;background-size:100% 2rem,100% 1rem;box-shadow:inset 0 .1rem 0 rgba(0,0,0,.07);overflow-y:auto;-webkit-overflow-scrolling:touch}.md-search-result__meta{padding:0 1.6rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-size:1.28rem;line-height:4rem}.md-search-result__list{margin:0;padding:0;border-top:.1rem solid rgba(0,0,0,.07);list-style:none}.md-search-result__item{box-shadow:0 -.1rem 0 rgba(0,0,0,.07)}.md-search-result__link{display:block;padding:0 1.6rem;-webkit-transition:background .25s;transition:background .25s;overflow:auto}.md-search-result__link:hover{background-color:rgba(83,109,254,.1)}.md-search-result__article{margin:1em 0}.md-search-result__title{margin-top:.5em;margin-bottom:0;color:rgba(0,0,0,.87);font-size:1.6rem;font-weight:400;line-height:1.4}.md-search-result__teaser{margin:.5em 0;color:rgba(0,0,0,.54);font-size:1.28rem;line-height:1.4;word-break:break-word}.md-sidebar{position:relative;width:24.2rem;float:left;overflow:visible}.md-sidebar[data-md-state=lock]{position:fixed;top:5.6rem;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{margin:2.4rem .4rem;overflow-y:auto}.js .md-sidebar__scrollwrap{position:absolute;top:0;right:0;bottom:0;left:0}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.4rem;height:.4rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}@-webkit-keyframes a{0%{height:0}to{height:1.3rem}}@keyframes a{0%{height:0}to{height:1.3rem}}@-webkit-keyframes b{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes b{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.md-source{display:block;-webkit-transition:opacity .25s;transition:opacity .25s;font-size:1.3rem;line-height:1.2;white-space:nowrap}.md-source:hover{opacity:.7}.md-source:after,.md-source__icon{display:inline-block;height:4.8rem;content:"";vertical-align:middle}.md-source__icon{width:4.8rem}.md-source__icon svg{margin-top:1.2rem;margin-left:1.2rem}.md-source__icon+.md-source__repository{margin-left:-4.4rem;padding-left:4rem}.md-source__repository{display:inline-block;max-width:100%;margin-left:1.2rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:1.1rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:a .25s ease-in;animation:a .25s ease-in}.md-source__fact{float:left}[data-md-state=done] .md-source__fact{-webkit-animation:b .4s ease-out;animation:b .4s ease-out}.md-source__fact:before{margin:0 .2rem;content:"\00B7"}.md-source__fact:first-child:before{display:none}.admonition{position:relative;margin:1.5625em 0;padding:.8rem 1.2rem;border-left:3.2rem solid rgba(68,138,255,.4);border-radius:.2rem;background-color:rgba(68,138,255,.15);font-size:1.28rem}.admonition:before{position:absolute;left:-2.6rem;color:#fff;font-size:2rem;content:"edit";vertical-align:-.25em}.admonition :first-child{margin-top:0}.admonition :last-child{margin-bottom:0}.admonition.summary,.admonition.tldr{border-color:rgba(0,176,255,.4);background-color:rgba(0,176,255,.15)}.admonition.summary:before,.admonition.tldr:before{content:"subject"}.admonition.hint,.admonition.important,.admonition.tip{border-color:rgba(0,191,165,.4);background-color:rgba(0,191,165,.15)}.admonition.hint:before,.admonition.important:before,.admonition.tip:before{content:"whatshot"}.admonition.check,.admonition.done,.admonition.success{border-color:rgba(0,230,118,.4);background-color:rgba(0,230,118,.15)}.admonition.check:before,.admonition.done:before,.admonition.success:before{content:"done"}.admonition.attention,.admonition.caution,.admonition.warning{border-color:rgba(255,145,0,.4);background-color:rgba(255,145,0,.15)}.admonition.attention:before,.admonition.caution:before,.admonition.warning:before{content:"warning"}.admonition.fail,.admonition.failure,.admonition.missing{border-color:rgba(255,82,82,.4);background-color:rgba(255,82,82,.15)}.admonition.fail:before,.admonition.failure:before,.admonition.missing:before{content:"clear"}.admonition.danger,.admonition.error{border-color:rgba(255,23,68,.4);background-color:rgba(255,23,68,.15)}.admonition.danger:before,.admonition.error:before{content:"flash_on"}.admonition.bug{border-color:rgba(245,0,87,.4);background-color:rgba(245,0,87,.15)}.admonition.bug:before{content:"bug_report"}.admonition-title{font-weight:700}html .admonition-title{margin-bottom:0}html .admonition-title+*{margin-top:0}.codehilite .o,.codehilite .ow{color:inherit}.codehilite .ge{color:#000}.codehilite .gr{color:#a00}.codehilite .gh{color:#999}.codehilite .go{color:#888}.codehilite .gp{color:#555}.codehilite .gs{color:inherit}.codehilite .gu{color:#aaa}.codehilite .gt{color:#a00}.codehilite .gd{background-color:#fdd}.codehilite .gi{background-color:#dfd}.codehilite .k{color:#3b78e7}.codehilite .kc{color:#a71d5d}.codehilite .kd,.codehilite .kn{color:#3b78e7}.codehilite .kp{color:#a71d5d}.codehilite .kr,.codehilite .kt{color:#3e61a2}.codehilite .c,.codehilite .cm{color:#999}.codehilite .cp{color:#666}.codehilite .c1,.codehilite .ch,.codehilite .cs{color:#999}.codehilite .na,.codehilite .nb{color:#c2185b}.codehilite .bp{color:#3e61a2}.codehilite .nc{color:#c2185b}.codehilite .no{color:#3e61a2}.codehilite .nd,.codehilite .ni{color:#666}.codehilite .ne,.codehilite .nf{color:#c2185b}.codehilite .nl{color:#3b5179}.codehilite .nn{color:#ec407a}.codehilite .nt{color:#3b78e7}.codehilite .nv,.codehilite .vc,.codehilite .vg,.codehilite .vi{color:#3e61a2}.codehilite .nx{color:#ec407a}.codehilite .il,.codehilite .m,.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo{color:#e74c3c}.codehilite .s,.codehilite .sb,.codehilite .sc{color:#0d904f}.codehilite .sd{color:#999}.codehilite .s2{color:#0d904f}.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sx{color:#183691}.codehilite .sr{color:#009926}.codehilite .s1,.codehilite .ss{color:#0d904f}.codehilite .err{color:#a61717}.codehilite .w{color:transparent}.codehilite .hll{display:block;margin:0 -1.2rem;padding:0 1.2rem;background-color:rgba(255,235,59,.5)}.md-typeset .codehilite{margin:1em 0;padding:1rem 1.2rem .8rem;border-radius:.2rem;background-color:hsla(0,0%,93%,.5);color:#37474f;line-height:1.4;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .codehilite::-webkit-scrollbar{width:.4rem;height:.4rem}.md-typeset .codehilite::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset .codehilite::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset .codehilite pre{display:inline-block;min-width:100%;margin:0;padding:0;background-color:transparent;overflow:visible;vertical-align:top}.md-typeset .codehilitetable{display:block;margin:1em 0;border-radius:.2em;font-size:1.6rem;overflow:hidden}.md-typeset .codehilitetable tbody,.md-typeset .codehilitetable td{display:block;padding:0}.md-typeset .codehilitetable tr{display:-webkit-box;display:-ms-flexbox;display:flex}.md-typeset .codehilitetable .codehilite,.md-typeset .codehilitetable .linenodiv{margin:0;border-radius:0}.md-typeset .codehilitetable .linenodiv{padding:1rem 1.2rem .8rem}.md-typeset .codehilitetable .linenodiv,.md-typeset .codehilitetable .linenodiv>pre{height:100%}.md-typeset .codehilitetable .linenos{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.26);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset .codehilitetable .linenos pre{margin:0;padding:0;background-color:transparent;color:inherit;text-align:right}.md-typeset .codehilitetable .code{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.md-typeset>.codehilitetable{box-shadow:none}.md-typeset .footnote{color:rgba(0,0,0,.54);font-size:1.28rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{-webkit-transition:color .25s;transition:color .25s}.md-typeset .footnote li:before{display:block;height:0}.md-typeset .footnote li:target{color:rgba(0,0,0,.87)}.md-typeset .footnote li:target:before{margin-top:-9rem;padding-top:9rem;pointer-events:none}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:#536dfe}.md-typeset .footnote-backref{display:inline-block;-webkit-transform:translateX(.5rem);transform:translateX(.5rem);-webkit-transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s,-webkit-transform .25s .125s;color:rgba(0,0,0,.26);font-size:0;opacity:0;vertical-align:text-bottom}.md-typeset .footnote-backref:before{font-size:1.6rem;content:"keyboard_return"}.md-typeset .headerlink{display:inline-block;margin-left:1rem;-webkit-transform:translateY(.5rem);transform:translateY(.5rem);-webkit-transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s,-webkit-transform .25s .25s;opacity:0}html body .md-typeset .headerlink{color:rgba(0,0,0,.26)}.md-typeset [id]:before{display:inline-block;content:""}.md-typeset [id]:target:before{margin-top:-9.8rem;padding-top:9.8rem}.md-typeset [id] .headerlink:focus,.md-typeset [id]:hover .headerlink,.md-typeset [id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset [id] .headerlink:focus,.md-typeset [id]:hover .headerlink:hover,.md-typeset [id]:target .headerlink{color:#536dfe}.md-typeset h1[id] .headerlink{display:none}.md-typeset h2[id]:before{display:block;margin-top:-.2rem;padding-top:.2rem}.md-typeset h2[id]:target:before{margin-top:-8.2rem;padding-top:8.2rem}.md-typeset h3[id]:before{display:block;margin-top:-.4rem;padding-top:.4rem}.md-typeset h3[id]:target:before{margin-top:-8.4rem;padding-top:8.4rem}.md-typeset h4[id]:before{display:block;margin-top:-.6rem;padding-top:.6rem}.md-typeset h4[id]:target:before{margin-top:-8.6rem;padding-top:8.6rem}.md-typeset h5[id]:before{display:block;margin-top:-1rem;padding-top:1rem}.md-typeset h5[id]:target:before{margin-top:-9rem;padding-top:9rem}.md-typeset h6[id]:before{display:block;margin-top:-1rem;padding-top:1rem}.md-typeset h6[id]:target:before{margin-top:-9rem;padding-top:9rem}.md-typeset .MJXc-display{margin:.75em 0;padding:.25em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset .comment.critic,.md-typeset del.critic,.md-typeset ins.critic{margin:0 .25em;padding:.0625em 0;border-radius:.2rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-.25em 0 0 #dfd}.md-typeset .critic.comment{background-color:hsla(0,0%,93%,.5);color:#37474f;box-shadow:.25em 0 0 hsla(0,0%,93%,.5),-.25em 0 0 hsla(0,0%,93%,.5)}.md-typeset .critic.comment:before{padding-right:.125em;color:rgba(0,0,0,.26);content:"chat";vertical-align:-.125em}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:1.6rem;padding-left:1.6rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset .emojione{width:2rem;vertical-align:text-top}.md-typeset code.codehilite{margin:0 .29412em;padding:.07353em 0}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}.md-typeset .task-list-control .task-list-indicator:before{position:absolute;top:.05em;left:-1.25em;color:rgba(0,0,0,.26);font-size:1.5em;content:"check_box_outline_blank";vertical-align:-.25em}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator:before{content:"check_box"}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a:after{color:rgba(0,0,0,.54);content:" [" attr(href) "]"}.md-typeset code{box-shadow:none;-webkit-box-decoration-break:initial;box-decoration-break:slice}.md-content__edit,.md-footer,.md-header,.md-sidebar,.md-typeset .headerlink{display:none}}@media only screen and (max-width:44.9375em){.md-typeset pre{margin:1em -1.6rem;padding:1rem 1.6rem;border-radius:0}.codehilite .hll{margin:0 -1.6rem;padding:0 1.6rem}.md-typeset>.codehilite{padding:1rem 1.6rem .8rem}.md-typeset>.codehilite,.md-typeset>.codehilitetable{margin:1em -1.6rem;border-radius:0}.md-typeset>.codehilitetable .codehilite,.md-typeset>.codehilitetable .linenodiv{padding:1rem 1.6rem}.md-typeset>p>.MJXc-display{margin:.75em -1.6rem;padding:.25em 1.6rem}}@media only screen and (min-width:100em){html{font-size:68.75%}}@media only screen and (min-width:125em){html{font-size:75%}}@media only screen and (max-width:59.9375em){body[data-md-state=lock]{overflow:hidden}.ios body[data-md-state=lock] .md-container{display:none}.md-content__edit{margin-right:-.8rem}.md-nav--secondary{border-left:0}html .md-nav__link[for=toc]{display:block;padding-right:4.8rem}html .md-nav__link[for=toc]:after{color:inherit;content:"toc"}html .md-nav__link[for=toc]+.md-nav__link{display:none}html .md-nav__link[for=toc]~.md-nav{display:-webkit-box;display:-ms-flexbox;display:flex}.md-nav__source{display:block;padding:.4rem;background-color:rgba(50,64,144,.9675);color:#fff}.md-search__overlay{display:block;position:absolute;top:.4rem;left:.4rem;width:4rem;height:4rem;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:transform .3s .1s,opacity .2s .2s;transition:transform .3s .1s,opacity .2s .2s,-webkit-transform .3s .1s;border-radius:2rem;background-color:#fff;opacity:0;overflow:hidden;z-index:1}[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transition:opacity .1s,-webkit-transform .4s;transition:opacity .1s,-webkit-transform .4s;transition:transform .4s,opacity .1s;transition:transform .4s,opacity .1s,-webkit-transform .4s;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;height:100%;-webkit-transform:translateX(5%);transform:translateX(5%);-webkit-transition:left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;transition:left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;transition:left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;opacity:1}.md-search__input{width:100%;height:5.6rem;font-size:1.8rem}.md-search__icon{top:1.6rem;left:1.6rem}.md-search__icon:before{content:"arrow_back"}.md-search__output{top:5.6rem;bottom:0}}@media only screen and (max-width:76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;-webkit-transition:width 0s,height 0s,opacity .25s;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-header-nav__button.md-icon--home,.md-header-nav__button.md-logo{display:none}.md-nav--primary,.md-nav--primary .md-nav{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:0;right:0;left:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;z-index:1}.md-nav--primary{background-color:#fff}.md-nav--primary .md-nav__toggle~.md-nav{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.4);background-color:#fff}html .md-nav--primary .md-nav__title{position:relative;height:11.2rem;padding:6rem 1.6rem .4rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-weight:400;line-height:4.8rem;white-space:nowrap;cursor:pointer}html .md-nav--primary .md-nav__title:before{display:block;position:absolute;top:.4rem;left:.4rem;width:4rem;height:4rem;color:rgba(0,0,0,.54)}html .md-nav--primary .md-nav__title~.md-nav__list{background:-webkit-linear-gradient(top,#fff 10%,hsla(0,0%,100%,0)),-webkit-linear-gradient(top,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background:linear-gradient(180deg,#fff 10%,hsla(0,0%,100%,0)),linear-gradient(180deg,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background-attachment:local,scroll;background-color:#fff;background-repeat:no-repeat;background-size:100% 2rem,100% 1rem;box-shadow:inset 0 .1rem 0 rgba(0,0,0,.07)}html .md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}html .md-nav--primary .md-nav__title--site{position:relative;background-color:#3f51b5;color:#fff}html .md-nav--primary .md-nav__title--site .md-nav__button{display:block;position:absolute;top:.4rem;left:.4rem;width:6.4rem;height:6.4rem;font-size:4.8rem}html .md-nav--primary .md-nav__title--site:before{display:none}.md-nav--primary .md-nav__list{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.md-nav--primary .md-nav__item{padding:0;border-top:.1rem solid rgba(0,0,0,.07)}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:4.8rem}.md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"keyboard_arrow_right"}.md-nav--primary .md-nav__link{position:relative;padding:1.6rem}.md-nav--primary .md-nav__link:after{position:absolute;top:50%;right:1.2rem;margin-top:-1.2rem;color:rgba(0,0,0,.54);font-size:2.4rem}.md-nav--primary .md-nav__link:hover:after{color:inherit}.md-nav--primary .md-nav--secondary .md-nav{position:static}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:2.8rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:4rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:5.2rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:6.4rem}.md-nav__toggle~.md-nav{display:none}.csstransforms3d .md-nav__toggle~.md-nav{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s;transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);opacity:0}.csstransforms3d .md-nav__toggle~.md-nav,.md-nav__toggle:checked~.md-nav{display:-webkit-box;display:-ms-flexbox;display:flex}.csstransforms3d .md-nav__toggle:checked~.md-nav{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1}.md-nav .md-nav__item,.md-nav .md-nav__title{font-size:1.6rem;line-height:1.5}.md-sidebar--primary{position:fixed;top:0;left:-24.2rem;width:24.2rem;height:100%;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);background-color:#fff;z-index:2}.no-csstransforms3d .md-sidebar--primary{display:none}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);-webkit-transform:translateX(24.2rem);transform:translateX(24.2rem)}.no-csstransforms3d [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{display:block}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden;margin:0}}@media only screen and (min-width:60em){.md-content{margin-right:24.2rem}.md-header-nav__button.md-icon--search{display:none}.md-header-nav__source{display:block;width:23rem;max-width:23rem;padding-right:1.2rem}.md-search{margin-right:2.8rem;padding:.4rem}.md-search__inner{display:table;position:relative;clear:both}.md-search__form{width:23rem;float:right;-webkit-transition:width .25s cubic-bezier(.1,.7,.1,1);transition:width .25s cubic-bezier(.1,.7,.1,1);border-radius:.2rem}.md-search__input{width:100%;height:4rem;padding-left:4.8rem;-webkit-transition:background-color .25s,color .25s;transition:background-color .25s,color .25s;border-radius:.2rem;background-color:rgba(0,0,0,.26);color:#fff;font-size:1.6rem}.md-search__input+.md-search__icon,.md-search__input::-webkit-input-placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input+.md-search__icon,.md-search__input::-moz-placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input+.md-search__icon,.md-search__input:-ms-input-placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input+.md-search__icon,.md-search__input::placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input:hover{background-color:hsla(0,0%,100%,.12)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.2rem .2rem 0 0;background-color:#fff;color:rgba(0,0,0,.87);text-overflow:none}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);top:4rem;-webkit-transition:opacity .4s;transition:opacity .4s;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.4rem;height:.4rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-search-result__link,.md-search-result__meta{padding-left:4.8rem}.md-sidebar--secondary{display:block;float:right}.md-sidebar--secondary[data-md-state=lock]{margin-left:100%;-webkit-transform:translate(-100%);transform:translate(-100%)}}@media only screen and (min-width:76.25em){.md-content{margin-left:24.2rem;overflow:auto}.md-content__inner{margin:2.4rem}.md-content__inner :last-child{margin-bottom:0}.md-header-nav__button.md-icon--menu{display:none}.md-nav[data-md-state=animate]{-webkit-transition:max-height .25s cubic-bezier(.86,0,.07,1);transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav__toggle~.md-nav{max-height:0;overflow:hidden}.md-nav[data-md-state=expand],.md-nav__toggle:checked~.md-nav{max-height:100%}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--nested>.md-nav__link:after{display:inline-block;-webkit-transform-origin:.45em .45em;transform-origin:.45em .45em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;vertical-align:-.125em}.js .md-nav__item--nested>.md-nav__link:after{-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link:after{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__form{width:68.8rem}.md-sidebar__inner{border-right:.1rem solid rgba(0,0,0,.07)}}@media only screen and (max-width:29.9375em){.md-footer-nav__link--prev .md-footer-nav__title,.md-header-nav__parent{display:none}[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(45);transform:scale(45)}}@media only screen and (min-width:30em){.md-footer-nav__link{width:50%}}@media only screen and (min-width:45em){.md-footer-copyright{max-width:75%;float:left}.md-footer-social{padding:1.2rem 0;float:right}}@media only screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(60);transform:scale(60)}}@media only screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(75);transform:scale(75)}}@media only screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__form{width:46.8rem}}@media only screen and (min-width:60em) and (min-width:76.25em){.md-sidebar--secondary[data-md-state=lock]{margin-left:122rem}} \ No newline at end of file diff --git a/site/conn/index.html b/site/conn/index.html index bbb8480b9..d2e04263d 100644 --- a/site/conn/index.html +++ b/site/conn/index.html @@ -1,336 +1,422 @@ + - - - - - + - - + + - Connection Management - TorQ + + - - - - - - - + + Connection Management - TorQ + - - - - + - + + + + + + + + + + + - - - - - - - - - -
    -
    -
    - - - -
    - +
    + + + + -

    Connection Management

    +
    +
    + + edit + + + +

    Connection Management

    trackservers.q is used to register and maintain handles to external servers. It is a heavily modified version of trackservers.q from code.kx. All the options are described in the default config file. All @@ -532,113 +618,93 @@

    IPC types

    At the time of writing, using unix domain sockets syntax on windows will appear to work whilst it’s actually falling back to tcp in the background. This can be misleading so we disabled using them on windows.

    - - -
    +
    +
    + + + + - - - -
    -
    -
    -
    -
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/site/gettingstarted/index.html b/site/gettingstarted/index.html index 42a5750fd..4cb1d8337 100644 --- a/site/gettingstarted/index.html +++ b/site/gettingstarted/index.html @@ -1,336 +1,462 @@ + - - - - - + - - + + - Getting Started - TorQ + + - - - - - - - + + Getting Started - TorQ + - - - - + - + + + + + + + + + + + - - - - - - - - - -
    -
    -
    - - - -
    - +
    + +
    +
    +
    + + +
    + - -
  • - - @AquaQAnalytics on GitHub - -
  • - - +
    +
    +
    + +
    -
    -
    +
  • + + Default Configuration Loading + + +
  • + +
  • + + Application Configuration Loading + + +
  • + + + + + + +
  • + + Code Loading + + +
  • + +
  • + + Initialization Errors + + +
  • + + + -
    -
    -
    +
    +
    +
    + -

    Getting Started

    +
    +
    + + edit + + + +

    Getting Started

    kdb+ is very customisable. Customisations are contained in q scripts (.q files), which define functions and variables which modify the behaviour of a process. Every q process can load a single q script, or a directory @@ -677,113 +803,93 @@

    Initialization Errors

    loading a file of stored procedures which may not be invoked and can be reloaded later. With -stop the process will halt at the point of the error but will not exit. Both -stop and -trap are useful for debugging.

    - - -
    +
    +
    + + + + - - - -
    -
    -
    -
    -
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/site/handlers/index.html b/site/handlers/index.html index 95a99ac9e..c149fe53f 100644 --- a/site/handlers/index.html +++ b/site/handlers/index.html @@ -1,342 +1,476 @@ + - - - - - + - - + + - Handlers - TorQ + + + - - - - - - + + Handlers - TorQ + - + - - - - - + + + + + + + + + + - - - - - - - - - -
    -
    -
    - - - -
    - +
    + +
    +
    +
    + + +
    + - -
  • - - @AquaQAnalytics on GitHub - -
  • - +
    +
    +
    + +
    -
    -
    +
  • + + Usage Example + + +
  • + +
  • + + Gateway Example + + +
  • + + + + + + +
  • + + Diagnostic Reporting + + +
  • + + + -
    -
    -
    +
    +
    +
    + -

    Message Handlers

    +
    +
    + + edit + + + +

    Message Handlers

    There is a separate code directory containing message handler customizations. This is found at $KDBCODE/handlers. Much of the code is derived from Simon Garland’s contributions to @@ -919,113 +1053,93 @@

    Diagnostic Reporting

    and the overall health of the system. Similarly it would be straightforward to set up periodic publication to a central repository to have a single point for system diagnostic statistics.

    - - -
    -
    +
    +
    + - - - Previous - -
    - - -
    -
    -
    -
    -
    + + +
    + + +
    + + + + + + + + + \ No newline at end of file diff --git a/site/index.html b/site/index.html index 1e097f98c..e76d89974 100644 --- a/site/index.html +++ b/site/index.html @@ -1,290 +1,306 @@ + - - - - - + - - + + - TorQ + + - - - - - - - + + Home - TorQ + - - - - + - + + + + + + + + + + + - - - - - - - - - -
    -
    -
    - - - -
    - +
    + + +
    +
    +
    + + -
    -
    -
    - -

    TorQ

    +
    +
    +
    + -
    +
    +
    + + edit + + + +

    Home

    + +
    @@ -293,97 +309,79 @@

    TorQ

    For recent updates to TorQ please check out our blog.

    For email support contact support@aquaq.co.uk

    - - -
    -
    +
    +
    + -
    - - - - - -
    - -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - + + + + + + + + + \ No newline at end of file From a63f96bf07f9c53bee355119536155e31d632a57 Mon Sep 17 00:00:00 2001 From: Conal Logan Date: Tue, 17 Jan 2017 10:24:47 +0000 Subject: [PATCH 9/9] Removed site --- site/404.html | 330 --- site/Overview/index.html | 918 ------ site/Processes/index.html | 2157 -------------- site/assets/fonts/icon.eot | Bin 2224 -> 0 bytes site/assets/fonts/icon.svg | 22 - site/assets/fonts/icon.ttf | Bin 2072 -> 0 bytes site/assets/fonts/icon.woff | Bin 2148 -> 0 bytes site/assets/images/favicon-e565ddfa3b.ico | Bin 1150 -> 0 bytes site/assets/images/favicon.ico | Bin 1150 -> 0 bytes .../images/icons/bitbucket-670608a71a.svg | 1 - .../assets/images/icons/github-1da075986e.svg | 1 - .../assets/images/icons/gitlab-5ad3f9f9e5.svg | 1 - .../javascripts/application-16f434a21a.js | 58 - .../javascripts/application-997097ee0c.js | 1 - site/assets/javascripts/application.js | 1 - .../javascripts/modernizr-4ab42b99fd.js | 1 - .../javascripts/modernizr-facb31f4a3.js | 1 - site/assets/javascripts/modernizr.js | 1 - .../application-02ce7adcc2.palette.css | 1 - .../stylesheets/application-1b8b9fdf68.css | 1 - .../stylesheets/application-a422ff04cc.css | 1 - site/assets/stylesheets/application.css | 1 - .../stylesheets/palettes-05ab2406df.css | 1 - site/assets/stylesheets/palettes.css | 1 - site/conn/index.html | 710 ----- site/gettingstarted/index.html | 895 ------ site/graphics/AquaQ-TorQ-symbol.png | Bin 125149 -> 0 bytes site/graphics/TorQ-Structure.png | Bin 145640 -> 0 bytes site/graphics/TorQ-logo.png | Bin 108699 -> 0 bytes site/graphics/async.png | Bin 138698 -> 0 bytes site/graphics/discovery1.png | Bin 30996 -> 0 bytes site/graphics/discovery2.png | Bin 37928 -> 0 bytes site/graphics/discovery3.png | Bin 43736 -> 0 bytes site/graphics/favicon.ico | Bin 1150 -> 0 bytes site/graphics/fullarchitecture.gliffy | 1 - site/graphics/fullarchitecture.png | Bin 108103 -> 0 bytes site/graphics/fullarchitecture2.gliffy | 1 - site/graphics/fullarchitecture2.png | Bin 113571 -> 0 bytes site/graphics/html5frontend.jpg | Bin 157632 -> 0 bytes site/graphics/logo.pdf | Bin 212032 -> 0 bytes site/graphics/logo.png | Bin 14209 -> 0 bytes site/graphics/reporter.png | Bin 19542 -> 0 bytes site/graphics/simpletickdiagram.png | Bin 16225 -> 0 bytes site/graphics/torq-logo.png | Bin 18931 -> 0 bytes site/handlers/index.html | 1145 -------- site/index.html | 387 --- site/mkdocs/js/lunr.min.js | 7 - site/mkdocs/js/mustache.min.js | 1 - site/mkdocs/js/require.js | 36 - .../js/search-results-template.mustache | 4 - site/mkdocs/js/search.js | 88 - site/mkdocs/js/text.js | 390 --- site/mkdocs/search_index.json | 524 ---- site/sitemap.xml | 68 - site/utilities/index.html | 2535 ----------------- site/visualisation/index.html | 644 ----- 56 files changed, 10935 deletions(-) delete mode 100644 site/404.html delete mode 100644 site/Overview/index.html delete mode 100644 site/Processes/index.html delete mode 100755 site/assets/fonts/icon.eot delete mode 100755 site/assets/fonts/icon.svg delete mode 100755 site/assets/fonts/icon.ttf delete mode 100755 site/assets/fonts/icon.woff delete mode 100644 site/assets/images/favicon-e565ddfa3b.ico delete mode 100644 site/assets/images/favicon.ico delete mode 100644 site/assets/images/icons/bitbucket-670608a71a.svg delete mode 100644 site/assets/images/icons/github-1da075986e.svg delete mode 100644 site/assets/images/icons/gitlab-5ad3f9f9e5.svg delete mode 100644 site/assets/javascripts/application-16f434a21a.js delete mode 100644 site/assets/javascripts/application-997097ee0c.js delete mode 100644 site/assets/javascripts/application.js delete mode 100644 site/assets/javascripts/modernizr-4ab42b99fd.js delete mode 100644 site/assets/javascripts/modernizr-facb31f4a3.js delete mode 100644 site/assets/javascripts/modernizr.js delete mode 100644 site/assets/stylesheets/application-02ce7adcc2.palette.css delete mode 100644 site/assets/stylesheets/application-1b8b9fdf68.css delete mode 100644 site/assets/stylesheets/application-a422ff04cc.css delete mode 100644 site/assets/stylesheets/application.css delete mode 100644 site/assets/stylesheets/palettes-05ab2406df.css delete mode 100644 site/assets/stylesheets/palettes.css delete mode 100644 site/conn/index.html delete mode 100644 site/gettingstarted/index.html delete mode 100755 site/graphics/AquaQ-TorQ-symbol.png delete mode 100644 site/graphics/TorQ-Structure.png delete mode 100755 site/graphics/TorQ-logo.png delete mode 100755 site/graphics/async.png delete mode 100755 site/graphics/discovery1.png delete mode 100755 site/graphics/discovery2.png delete mode 100755 site/graphics/discovery3.png delete mode 100644 site/graphics/favicon.ico delete mode 100755 site/graphics/fullarchitecture.gliffy delete mode 100755 site/graphics/fullarchitecture.png delete mode 100755 site/graphics/fullarchitecture2.gliffy delete mode 100755 site/graphics/fullarchitecture2.png delete mode 100755 site/graphics/html5frontend.jpg delete mode 100755 site/graphics/logo.pdf delete mode 100755 site/graphics/logo.png delete mode 100755 site/graphics/reporter.png delete mode 100755 site/graphics/simpletickdiagram.png delete mode 100755 site/graphics/torq-logo.png delete mode 100644 site/handlers/index.html delete mode 100644 site/index.html delete mode 100644 site/mkdocs/js/lunr.min.js delete mode 100644 site/mkdocs/js/mustache.min.js delete mode 100644 site/mkdocs/js/require.js delete mode 100644 site/mkdocs/js/search-results-template.mustache delete mode 100644 site/mkdocs/js/search.js delete mode 100644 site/mkdocs/js/text.js delete mode 100644 site/mkdocs/search_index.json delete mode 100644 site/sitemap.xml delete mode 100644 site/utilities/index.html delete mode 100644 site/visualisation/index.html diff --git a/site/404.html b/site/404.html deleted file mode 100644 index 571c65bba..000000000 --- a/site/404.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - - - - - - - - - - - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - - -
    -
    - - edit - - -

    404 - Not found

    - -
    -
    -
    -
    - - -
    - - -
    - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/Overview/index.html b/site/Overview/index.html deleted file mode 100644 index 16eec46aa..000000000 --- a/site/Overview/index.html +++ /dev/null @@ -1,918 +0,0 @@ - - - - - - - - - - - - - - - - - - About - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - - - - -
    -
    - - edit - - - -

    Overview

    -

    -

    What is kdb+?

    -

    kdb+ is the market leading timeseries database from Kx Systems. kdb+ -is used predominently in the Financial Services sector to capture, -process and analyse billions of records on a daily basis, with Kx -counting almost all of the top tier investment banks as customers. kdb+ -incorporates a programming language, q, which is known for its -performance and expressive power. Given the unsurpassed data management -and analytical capabilities of kdb+, the applicability of kdb+ -technology extends beyond the financial domain into any sector where -rapid pre-built or adhoc analysis of large datasets is required. Other -sectors which have good use cases for kdb+ include utilities, -pharmaceuticals, telecoms, manufacturing, retail and any sector -utilising telemetry or sensor data.

    -

    -

    What is AquaQ TorQ?

    -

    AquaQ TorQ is a framework which forms the basis of a production kdb+ -system by implementing some core functionality and utilities on top of -kdb+, allowing developers to concentrate on the application business -logic. We have incorporated as many best practices as possible, with -particular focus on performance, process management, diagnostic -information, maintainability and extensibility. We have kept the code as -readable as possible using descriptive comments, error messages, -function names and variable names. Wherever possible, we have tried to -avoid re-inventing the wheel and instead have used contributed code from -code.kx.com (either directly or modified). All code sections taken from -code.kx.com are referenced in this document.

    -

    AquaQ TorQ can be extended or modified as required. We have chosen some -default behaviour, but it can all be overridden. The features of AquaQ -TorQ are:

    -
      -
    • -

      Process Management: Each process is given a type and name. By - default these are used to determine the code base it loads, the - configuration loaded, log file naming and how it reports itself to - discovery services. Whenever possible we have tried to ensure that - all default behaviour can be overridden at the process type level, - and further at the process name level.

      -
    • -
    • -

      Code Management: Processes can optionally load common or process - type/name specific code bases. All code loading is error trapped.

      -
    • -
    • -

      Configuration Management: Configuration scripts can be loaded as - standard and with specific process type/name configuration - overriding default values. Configuration scripts are loaded in a - specific order; default, then process type specific, then process - name specific. Values loaded last will override values loaded - previously.

      -
    • -
    • -

      Usage Logging: All process usage is logged to a single text log file - and periodically rolled. Logging includes opening/closing of - connections, synchronous and asynchronous queries and functions - executed on the timer. Logged values include the request, the - details of where it came from, the time it was received, the time it - took, memory usage before and after, the size of the result set, the - status and any error message.

      -
    • -
    • -

      Incoming and Outgoing Connection Management: Incoming (client) and - outgoing (server) connections are stored and their usage monitored - through query counts and total data size counts. Connections are - stored and retrieved and can be set to automatically be re-opened as - required. The password used for outgoing connections can be - overridden at default, process type and process name level.

      -
    • -
    • -

      Access Controls: Basic access controls are provided, and could be - extended. These apply restrictions on the IP addresses of remote - connections, the users who can access the process, and the functions - that each user can execute. A similar hierarchical approach is used - for access control management as for configuration management.

      -
    • -
    • -

      Timer Extensions: Mechanism to allow multiple functions to be added - to the timer either on a repeating or one-off basis. Multiple - re-scheduling algorithms supplied for repeating timers.

      -
    • -
    • -

      Standard Out/Error Logging: Functions to print formatted messages to - standard out and error. Hooks are provided to extend these as - required, e.g. publication to centralised logging database. Standard - out and error are redirected to appropriately named, timestamped and - aliased log files, which are periodically rolled.

      -
    • -
    • -

      Error Handling: Different failure options are supplied in case code - fails to load; either exit upon failure, stop at the point of - failure or trap and continue.

      -
    • -
    • -

      Visualisation: Utilities to ease GUI development using websockets - and HTML5.

      -
    • -
    • -

      Documentation and Development Tools: Functionality to document the - system is built into AquaQ TorQ, and can be accessed directly from - every q session. Developers can extend the documentation as they add - new functions. Functionality for searching for functions and - variables by name and definition is provided, and for ordering - variables by memory usage. The standard help.q from code.kx is also - included.

      -
    • -
    • -

      Utilities: We intend to build out and add utilities as we find them - to be suitably useful and generic. So far we have:

      -
        -
      1. -

        Caching: allows a result set cache to be declared and result - sets to be stored and retrieved from the cache. Suitable for - functions which may be run multiple times with the same - parameters, with the underlying data not changing in a short - time frame;

        -
      2. -
      3. -

        Timezone Handling: derived from code.kx, allows conversion - between timestamps in different timezones;

        -
      4. -
      5. -

        Email: an library to send emails;

        -
      6. -
      7. -

        Async Messaging: allows easy use of advanced async messaging - methods such as deferred synchronous communication and async - communication using postback functions;

        -
      8. -
      9. -

        Heartbeating: each process can be set to publish heartbeats, and - subscribe to and manage heartbeats from other processes in the - environment;

        -
      10. -
      11. -

        Data Loading: utility wrapper around .Q.fsn to read a data file - from disk, manipulate it and write it out in chunks;

        -
      12. -
      13. -

        Subscriptions: allow processes to dynamically detect and - subscribe to datasources;

        -
      14. -
      15. -

        Tickerplant Log File Recovery: recover as many messages as - possible from corrupt log files;

        -
      16. -
      17. -

        Database Writing: utility functions for writing to, sorting and - parting on disk databases;

        -
      18. -
      19. -

        Compression: allows compression of a database. This can be - performed using a set of parameters for the entire database, but - also gives the flexibilty of compressing user-specified tables - and/or columns of those tables with different parameters if - required, and also offers decompression.

        -
      20. -
      -
    • -
    -

    AquaQ TorQ will wrap easily around kdb+tick and therefore around any -tickerplant, RDB, HDB or real time processing application. We currently -have several customised processes of our own:

    -
      -
    • -

      Discovery Service: Every process has a type, name and set of - available attributes, which are used by other processes to connect - to it. The Discovery Service is a central point that can be used to - find other available processes. Client processes can subscribe to - updates from the discovery service as new processes become - available- the discovery service will notify its subscribers, which - can then use the supplied hook to implement required behavior e.g. - connect to the newly available process;

      -
    • -
    • -

      Gateway: A fully synchronous and asynchronous gateway is provided.

      -

      The gateway will connect to a defined list of process types (can be -homogenous or heterogeneous processes) and will route queries across -them according to the priority of received requests. The routing -algorithms can be easily modified e.g. give priority to user X, or -only route queries to processes which exist in the same data centre -or geographical region to avoid the WAN (this would entail using the -process attributes). The gateway can either return the result to the -client back down the same handle, or it can wrap it in a callback -function to be invoked on the client;

      -
    • -
    • -

      Real Time Database (RDB): A customized version of the kdb+tick RDB, - to allow dynamic tickerplant subscriptions, reloading of multiple - HDBs using authenticated connections, and customized end-of-day save - downs. The RDB, WDB and tickerplant log replay share a common code - base to ensure that a save-down modification to a table is applied - across each of these processes.

      -
    • -
    • -

      Write Database (WDB): The job of a WDB is to write data to disk - rather than to serve client queries. WDBs usually write data out - periodically throughout the day, and are useful when there is too - much data to fit into memory and/or the end of day save operation - needs to be speeded up. The concept is based on - w.q

      -
    • -
    • -

      Tickerplant Log Replay: A process for replaying tickerplant log - files to create on-disk data sets. Extended features are provided - for only replaying subsets of log files (by message number and/or - table name), replaying in chunks, invoking bespoke final behaviour - etc.;

      -
    • -
    • -

      Reporter: The Reporter Process runs defined reports (q queries or - parameterized functions) against specific database or gateways on a - schedule. The results are retrieved and processed. Processing can be - user defined, or can be a standard operation such as writing the - data to disk, or emailing the results to a list of recipients. This - can be useful for running system checks or generating management - reports.

      -
    • -
    • -

      Housekeeping: A process to undertake housekeeping tasks - periodically, such as compressing and removing files that are no - longer used. Housekeeping looks up a file of instructions and - performs maintenance tasks on directories accordingly. Features - allow selective file deletion and zipping according to file age, - including a search string parameter and the ability to exclude items - from the search. The process can be scheduled, or run immediately - from the command line and can be extended as required to incorporate - more tasks.

      -
    • -
    • -

      File Alerter: A process to periodically scan a set of directories - and execute a function based on the availability of a file. This is - useful where files may arrive to the system during the day and must - be acted upon (e.g. files are uploaded to a shared directory by - users/clients). The functions to execute are defined by the user and - the whole process is driven by a csv file detailing the file to - search for, the function to execute and, optionally, a directory to - move the file to after it has been processed.

      -
    • -
    • -

      Monitor: A basic monitoring process which uses the Discovery Service - to locate the other processes within the system, listens for - heartbeats, and subscribes for log messages. This should be extended - as required but provides a basic central point for system health - checks;

      -
    • -
    • -

      Kill: A process used to kill other processes, optionally using the - Discovery Service to locate them.

      -
    • -
    -

    -

    A Large Scale Data Processing Platform

    -

    One of the key drivers behind TorQ development has been to ensure all -the tools necessary to build a large scale data processing platform are -available. kdb+tick -provides the basic building blocks, and a standard set-up usually looks -something like this:

    -

    Simple kdb+tick Setup

    -

    However, in reality it is usually more complicated. A larger scale -architecture serving large numbers of client queries and receiving data -from multiple sources may look like this:

    -

    Production Data Capture

    -

    A common practice is to use a gateway (section gateway) to -manage client queries across back-end processes. The gateway can load -balance across processes and make failures transparent to the client. If -the clients access the gateway with asynchronous calls, then the gateway -can serve many requests at once and additionally implement client -queuing algorithms.

    -

    Other common production features include:

    -
      -
    • -

      A modified version of the RDB (section sec:rdb) which does - different operations at end-of-day, reloads multiple HDB processes - etc.

      -
    • -
    • -

      A Write Database (section [sec:wdb]) which receives data from the - tickerplant and periodically writes it to disk. WDBs are used when - there is too much data in a day to fit into memory and/or to speed - up the end-of-day rollover job

      -
    • -
    • -

      Processes that load data from other sources either into the HDB - directly or to the RDB potentially via the tickerplant (section - [sec:dataloader]). The data may be dropped in specific locations - which have to be monitored (section [sec:filealerter])

      -
    • -
    • -

      A Reporting Engine (section [sec:reporter]) to run periodic - reports and do something with the result (e.g. generate an xls file - from the database and email it to senior management). Reporting - engines can also be used to run periodic checks of the system

      -
    • -
    • -

      A Discovery Service (section [sec:discovery]) to allow processes - to locate each other, and to allow processes to dynamically register - availability and push notifications around the system.

      -
    • -
    • -

      Basic Monitoring (section [sec:monitor]) of process availability

      -
    • -
    • -

      Housekeeping (section [sec:housekeeping]) to ensure log files are - tidied up, tickerplant log files are compressed/moved in a timely - fashion etc.

      -
    • -
    -

    -

    Do I Really Have to Read This Whole Document?

    -

    Hopefully not. The core of AquaQ TorQ is a script called torq.q and we -have tried to make it as descriptive as possible, so perhaps that will -suffice. The first place to look will be in the config files, the main -one being \$KDBCONFIG/settings/default.q. This should contain a lot of -information on what can be modified. In addition:

    -
      -
    • -

      We have added a load of usage information:

      -
      aquaq$ q torq.q -usage
      -KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
      -
      -General:
      - This script should form the basis of a production kdb+ environment.
      - It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags 
      -... etc ...
      -
      -

      If sourcing from another script there are hooks to modify and extend -the usage information as required.

      -
    • -
    • -

      We have some pretty extensive logging:

      -
      aquaq$ q torq.q -p 9999 -debug
      -KDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems
      -
      -2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0
      -2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0
      -2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv
      -2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1
      -2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found
      -... etc ...
      -
      -
    • -
    • -

      We have added functionality to find functions or variables defined - in the session, and also to search function definitions.

      -
      q).api.f`max                                                                                                                                                                                   
      -name                | vartype   namespace public descrip              ..
      ---------------------| ------------------------------------------------..
      -maxs                | function  .q        1      ""                   ..
      -mmax                | function  .q        1      ""                   ..
      -.clients.MAXIDLE    | variable  .clients  0      ""                   ..
      -.access.MAXSIZE     | variable  .access   0      ""                   ..
      -.cache.maxsize      | variable  .cache    1      "The maximum size in ..
      -.cache.maxindividual| variable  .cache    1      "The maximum size in ..
      -max                 | primitive           1      ""                   ..
      -
      -q)first 0!.api.p`.api                                                                                                                                                                          
      -name     | `.api.f
      -vartype  | `function
      -namespace| `.api
      -public   | 1b
      -descrip  | "Find a function/variable/table/view in the current process"
      -params   | "[string:search string]"
      -return   | "table of matching elements"
      -
      -q).api.p`.api                                                                                                                                                                                  
      -name        | vartype  namespace public descrip                       ..
      -------------| --------------------------------------------------------..
      -.api.f      | function .api      1      "Find a function/variable/tabl..
      -.api.p      | function .api      1      "Find a public function/variab..
      -.api.u      | function .api      1      "Find a non-standard q public ..
      -.api.s      | function .api      1      "Search all function definitio..
      -.api.find   | function .api      1      "Generic method for finding fu..
      -.api.search | function .api      1      "Generic method for searching ..
      -.api.add    | function .api      1      "Add a function to the api des..
      -.api.fullapi| function .api      1      "Return the full function api ..
      -
      -
    • -
    • -

      We have incorporated help.q.

      -
      q)help`                                                                                                                                                                                        
      -adverb    | adverbs/operators
      -attributes| data attributes
      -cmdline   | command line parameters
      -data      | data types
      -define    | assign, define, control and debug
      -dotz      | .z locale contents
      -errors    | error messages
      -save      | save/load tables
      -syscmd    | system commands
      -temporal  | temporal - date & time casts
      -verbs     | verbs/functions
      -
      -
    • -
    • -

      We have separated and commented all of our config:

      -
      aquaq$ head config/default.q 
      -/- Default configuration - loaded by all processes
      -
      -/- Process initialisation
      -\d .proc
      -loadcommoncode:1b   /- whether to load the common code defined at
      -                        /- ${KDBCODE}/common
      -loadprocesscode:0b  /- whether to load the process specific code defined at 
      -                        /- ${KDBCODE}/{process type} 
      -loadnamecode:0b     /- whether to load the name specific code defined at 
      -                    /- ${KDBCODE}/{name of process}
      -loadhandlers:1b     /- whether to load the message handler code defined at 
      -                        /- ${KDBCODE}/handlers
      -logroll:1b      /- whether to roll the std out/err logs daily
      -... etc ...
      -
      -
    • -
    -

    -

    Operating System and kdb+ Version

    -

    AquaQ TorQ has been built and tested on the linux and OSX operating -systems though as far as we are aware there is nothing that would make -this incompatible with Solaris or Windows. It has also been tested with -kdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+ -versions or operating systems.

    -

    -

    License

    -

    This code is released under the MIT license.

    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/Processes/index.html b/site/Processes/index.html deleted file mode 100644 index 06e29c207..000000000 --- a/site/Processes/index.html +++ /dev/null @@ -1,2157 +0,0 @@ - - - - - - - - - - - - - - - - - - Processes - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - - - - -
    -
    - - edit - - - -

    -

    Processes

    -

    A set of processes is included. These processes build upon AquaQ TorQ, -providing specific functionality. All the process scripts are contained -in $KDBCODE/processes. All processes should have an entry in -$KDBCONFIG/process.csv. All processes can have any type and name, -except for discovery services which must have a process type of -“discovery”. An example process.csv is:

    -
    aquaq$ cat config/process.csv
    -host,port,proctype,procname
    -aquaq,9998,rdb,rdb_europe_1
    -aquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1
    -aquaq,9996,discovery,discovery1
    -aquaq,9995,discovery,discovery2
    -aquaq,8000,gateway,gateway1
    -aquaq,5010,tickerplant,tickerplant1
    -aquaq,5011,rdb,rdb1
    -aquaq,5012,hdb,hdb1
    -aquaq,5013,hdb,hdb2
    -aquaq,9990,tickerlogreplay,tpreplay1
    -aquaq,20000,kill,killhdbs
    -aquaq,20001,monitor,monitor1
    -aquaq,20002,housekeeping,hk1
    -
    -

    -

    Discovery Service

    -

    Overview

    -

    Processes use the discovery service to register their own availability, -find other processes (by process type) and subscribe to receive updates -for new process availability (by process type). The discovery service -does not manage connections- it simply returns tables of registered -processes, irrespective of their current availability. It is up to each -individual process to manage its own connections.

    -

    The discovery service uses the process.csv file to make connections to -processes on start up. After start up it is up to each individual -process to attempt connections and register with the discovery service. -This is done automatically, depending on the configuration parameters. -Multiple discovery services can be run in which case each process will -try to register and retrieve process details from each discovery process -it finds in its process.csv file. Discovery services do not replicate -between themselves. A discovery process must have its process type -listed as discovery.

    -

    To run the discovery service, use a start line such as:

    -
    aquaq $ q torq.q -load code/processes/discovery.q -p 9995
    -
    -

    Modify the configuration as required.

    -

    Operation

    -
      -
    1. -

      Processes register with the discovery service.

      -

      Discovery service
-registration

      -
    2. -
    3. -

      Processes use the discovery service to locate other processes.

      -

      Process location

      -
    4. -
    5. -

      When new services register, any processes which have registered an - interest in that process type are notified.

      -

      Notification

      -
    6. -
    -

    Available Processes

    -

    The list of available processes can be found in the .servers.SERVERS -table.

    -
    q).servers.SERVERS                                                                                                                                                                                                                                                            
    -procname     proctype        hpup            w  hits startp                        lastp                         endp attributes                                                                   
    --------------------------------------------------------------------------------------
    -discovery1   discovery       :aquaq:9995     0                                  2014.01.22D17:00:40.947470000      ()!()                                                                        
    -discovery2   discovery       :aquaq:9996     0                                  2014.01.22D17:00:40.947517000      ()!()                                                                        
    -hdb2         hdb             :aquaq:5013     0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
    -killtick     kill            :aquaq:20000    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
    -tpreplay1    tickerlogreplay :aquaq:20002    0                                  2014.01.22D17:00:40.947602000      ()!()                                                                        
    -tickerplant1 tickerplant     :aquaq:5010  6  0    2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000      ()!()                                                                        
    -monitor1     monitor         :aquaq:20001 9  0    2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000      ()!()                                                                        
    -rdb1         rdb             :aquaq:5011  7  0    2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000      `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades)          
    -hdb3         hdb             :aquaq:5012  8  0    2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000      `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)
    -gateway1     gateway         :aquaq:5020  10 0    2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000      ()!()
    -
    -

    -

    Gateway

    -

    A synchronous and asynchronous gateway is provided. The gateway can be -used for load balancing and/or to join the results of queries across -heterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should -only be used with asynchronous calls. Synchronous calls cause the -gateway to block so limits the gateway to serving one query at a time -(although if querying across multiple backend servers the backend -queries will be run in parallel). When using asynchronous calls the -client can either block and wait for the result (deferred synchronous) -or post a call back function which the gateway will call back to the -client with. With both asynchronous and synchronous queries the backend -servers to execute queries against are selected using process type. The -gateway API can be seen by querying .api.p“.gw.*” within a gateway -process.

    -

    Gateway behaviour

    -

    Asynchronous Behaviour

    -

    Asynchronous queries allow much greater flexibility. They allow multiple -queries to be serviced at once, prioritisation, and queries to be timed -out. When an asynchronous query is received the following happens:

    -
      -
    • -

      the query is placed in a queue;

      -
    • -
    • -

      the list of available servers is retrieved;

      -
    • -
    • -

      the queue is prioritised, so those queries with higher priority are - serviced first;

      -
    • -
    • -

      queries are sent to back end servers as they become available. Once - the backend server returns its result, it is given another query;

      -
    • -
    • -

      when all the partial results from the query are returned the results - are aggregated and returned to the client. They are either returned - directly, or wrapped in a callback and posted back asynchronously to - the client.

      -
    • -
    -

    The two main customisable features of the gateway are the selection of -available servers (.gw.availableservers) and the queue prioritisation -(.gw.getnextqueryid). With default configuration, the available servers -are those servers which are not currently servicing a query from the -gateway, and the queue priority is a simple FIFO queue. The available -servers could be extended to handle process attributes, such as the -available datasets or the location of the process, and the queue -prioritisation could be modified to anything required e.g. based on the -query itself, the username, host of the client etc.

    -

    An asynchronous query can be timed out using a timeout defined by the -client. The gateway will periodically check if any client queries have -not completed in the alotted time, and return a timeout error to the -client. If the query is already running on any backend servers then they -cannot be timed out other than by using the standard -T flag.

    -

    Synchronous Behaviour

    -

    When using synchronous queries the gateway can only handle one query at -a time and cannot timeout queries other than with the standard -T flag. -All synchronous queries will be immediately dispatched to the back end -processes. They will be dispatched using an asyhcnronous call, allowing -them to run in parallel rather than serially. When the results are -received they are aggregated and returned to the client.

    -

    Process Discovery

    -

    The gateway uses the discovery service to locate processes to query -across. The discovery service will notify the gateway when new processes -become available and the gateway will automatically connect and start -using them. The gateway can also use the static information in -process.csv, but this limits the gateway to a predefined list of -processes rather than allowing new services to come online as demand -requires.

    -

    Error Handling

    -

    When synchronous calls are used, q errors are returned to clients as -they are encountered. When using asynchronous calls there is no way to -return actual errors and appropriately prefixed strings must be used -instead. It is up to the client to check the type of the received result -and if it is a string then whether it contains the error prefix. The -error prefix can be changed, but the default is “error: ”. Errors will -be returned when:

    -
      -
    • -

      the client requests a query against a server type which the gateway - does not currently have any active instances of (this error is - returned immediately);

      -
    • -
    • -

      the query is timed out;

      -
    • -
    • -

      a back end server returns an error;

      -
    • -
    • -

      a back end server fails;

      -
    • -
    • -

      the join function fails.

      -
    • -
    -

    If postback functions are used, the error string will be posted back -within the postback function (i.e. it will be packed the same way as a -valid result).

    -

    Client Calls

    -

    There are four main client calls. The .gw.sync* methods should only be -invoked synchronously, and the .gw.async* methods should only be -invoked asynchronously. Each of these are documented more extensively in -the gateway api. Use .api.p“.gw.*” for more details.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FunctionDescription
    .gw.syncexec[query; servertypes]Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.
    .gw.syncexecj[query; servertypes; joinfunction]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results.
    .gw.asyncexec[query; servertypes]Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.
    .gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.
    -

    For the purposes of demonstration, assume that the queries must be run -across an RDB and HDB process, and the gateway has one RDB and two HDB -processes available to it.

    -
    q).gw.servers                                                                                                                                                                                                                                                                 
    -handle| servertype inuse active querycount lastquery                     usage                attributes                   
    -------| --------------------------------------------------------------------
    -7     | rdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk
    -8     | hdb        0     1      17         2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk
    -9     | hdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk
    -12    | rdb        0     1      2          2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk
    -
    -

    Both the RDB and HDB processes have a function f and table t defined. f -will run for 2 seconds longer on the HDB processes then it will the RDB.

    -
    q)f                                                                                                                                                                                                                                                                           
    -{system"sleep ",string x+$[`hdb=.proc.proctype;2;0]; t}
    -q)t                                                                                                                                                                                                                                                                           
    -a   
    -----
    -5013
    -5014
    -5015
    -5016
    -5017
    -
    -

    Run the gateway. The main parameter which should be set is the -.servers.CONNECTIONS parameter, which dictates the process types the -gateway queries across. Also, we need to explicitly allow sync calls. We -can do this from the config or from the command line.

    -
    q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb
    -
    -

    Start a client and connect to the gateway. Start with a sync query. The -HDB query should take 4 seconds and the RDB query should take 2 seconds. -If the queries run in parallel, the total query time should be 4 -seconds.

    -
    q)h:hopen 8000                                                                                                                                                                                                                                                                
    -q)h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                            
    -a   
    -----
    -5014
    -5015
    -5016
    -5017
    -5018
    -5012
    -5013
    -5014
    -5015
    -5016
    -q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb)                                                                                                                                                                                                                                         
    -4009
    -
    -

    If a query is done for a server type which is not registered, an error -is returned:

    -
    q)\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other)                                                                                                                                                                                                                                   
    -`not all of the requested server types are available; missing other
    -
    -

    Custom join functions can be specified:

    -
    q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x})                                                                                                                                                                                                  
    -a   | x
    -----| -
    -5014| 2
    -5015| 2
    -5016| 2
    -5017| 1
    -5018| 1
    -5012| 1
    -5013| 1
    -
    -

    Custom joins can fail with appropriate errors:

    -
    q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x})                                                                                                                                                                                                  
    -`failed to apply supplied join function to results: b
    -
    -

    Asynchronous queries must be sent in async and blocked:

    -
    q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::)                                                                                                                                                                                                                          
    -    /- This white space is from pressing return
    -    /- the client is blocked and unresponsive
    -
    -q)q)q)                                                                                                                                                                                                                                                                        
    -q)                                                                                                                                                                                                                                                                            
    -q)r                                                                                                                                                                                                                                                                           
    -a   
    -----
    -5014
    -5015
    -5016
    -5017
    -5018
    -5012
    -5013
    -5014
    -5015
    -5016
    -q)
    -
    -

    We can send multiple async queries at once. Given the gateway has two -RDBs and two HDBs avaialble to it, it should be possible to service two -of these queries at the same time.

    -
    q)h:hopen each 8000 8000                                                                                                                                                                                                                                                      
    -q)\t (neg h)@\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\:(::); r:h@\:(::)
    -4012
    -q)r                                                                                                                                                                                                                                                                           
    -+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016
    -+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003
    -
    -

    Alternatively async queries can specify a postback so the client does -not have to block and wait for the result. The postback function must -take two parameters- the first is the function that was sent up, the -second is the results. The postback can either be a lambda, or the name -of a function.

    -
    q)h:hopen 8000                                                                                                                                                                                                                                                                
    -q)handleresults:{-1(string .z.z)," got results"; -3!x; show y}                                                                                                                                                                                                                
    -q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn)                                                                                                                                                                                                           
    -q)
    -q)  /- These q prompts are from pressing enter
    -q)  /- The q client is not blocked, unlike the previous example
    -q)
    -q)2014.01.07T16:53:42.481 got results
    -a   
    -----
    -5014
    -5015
    -5016
    -5017
    -5018
    -5012
    -5013
    -5014
    -5015
    -5016
    -
    -/- Can also use a named function rather than a lambda
    -q)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)
    -q)
    -q)              
    -q)2014.01.07T16:55:12.235 got results
    -a   
    -----
    -5014
    -5015
    -5016
    -5017
    -5018
    -5012
    -5013
    -5014
    -5015
    -5016
    -
    -

    Asynchronous queries can also be timed out. This query will run for 22 -seconds, but should be timed out after 5 seconds. There is a tolerance -of +5 seconds on the timeout value, as that is how often the query list -is checked. This can be reduced as required.

    -
    q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)
    -
    -q)q)q)r                                                                                                                                                                                                                                                                       
    -"error: query has exceeded specified timeout value"
    -q)\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)                                                                                                                                                                                                  
    -6550
    -
    -

    Non kdb+ Clients

    -

    All the examples in the previous section are from clients written in q. -However it should be possible to do most of the above from non kdb+ -clients. The officially supported APIs for Java, C# and C allow the -asynchronous methods above. For example, we can modify the try block in -the main function of the Java Grid -Viewer:

    -
    import java.awt.BorderLayout;
    -import java.awt.Color;
    -import java.io.IOException;
    -import java.lang.reflect.Array;
    -import java.util.logging.Level;
    -import java.util.logging.Logger;
    -import javax.swing.JFrame;
    -import javax.swing.JScrollPane;
    -import javax.swing.JTable;
    -import javax.swing.table.AbstractTableModel;
    -import kx.c;
    -
    -public class Main {
    -    public static class KxTableModel extends AbstractTableModel {
    -        private c.Flip flip;
    -        public void setFlip(c.Flip data) {
    -            this.flip = data;
    -        }
    -
    -        public int getRowCount() {
    -            return Array.getLength(flip.y[0]);
    -        }
    -
    -        public int getColumnCount() {
    -            return flip.y.length;
    -        }
    -
    -        public Object getValueAt(int rowIndex, int columnIndex) {
    -            return c.at(flip.y[columnIndex], rowIndex);
    -        }
    -
    -        public String getColumnName(int columnIndex) {
    -            return flip.x[columnIndex];
    -        }
    -    };
    -
    -    public static void main(String[] args) {
    -        KxTableModel model = new KxTableModel();
    -        c c = null;
    -        try {
    -            c = new c("localhost", 8000,"username:password");
    -            // Create the query to send
    -        String query=".gw.asyncexec[(`f;2);`hdb`rdb]";
    -            // Send the query 
    -        c.ks(query);
    -            // Block on the socket and wait for the result
    -        model.setFlip((c.Flip) c.k());
    -        } catch (Exception ex) {
    -            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    -        } finally {
    -            if (c != null) {try{c.close();} catch (IOException ex) {}
    -          }
    -        }
    -        JTable table = new JTable(model);
    -        table.setGridColor(Color.BLACK);
    -        String title = "kdb+ Example - "+model.getRowCount()+" Rows";
    -        JFrame frame = new JFrame(title);
    -        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    -        frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
    -        frame.setSize(300, 300);
    -        frame.setVisible(true);
    -    }
    -}
    -
    -

    Some of the unofficially supported APIs may only allow synchronous calls -to be made.

    -

    -

    Real Time Database (RDB)

    -

    The Real Time Database is a modified version of r.q found in kdb+tick. -The modifications from the standard r.q include:

    -
      -
    • -

      Tickerplant (data source) and HDB location derived from processes - defined by the discovery service or from config file;

      -
    • -
    • -

      Automatic re-connection and resubscription to tickerplant;

      -
    • -
    • -

      List of tables to subscribe to supplied as configuration setting;

      -
    • -
    • -

      More pre-built flexibility in end-of-day;

      -
    • -
    • -

      More verbose end-of-day logging;

      -
    • -
    • -

      Reload multiple authenticated HDBs after end-of-day;

      -
    • -
    • -

      End-of-day save down manipulation code is shared between RDB, WDB - and tickerplant log replay

      -
    • -
    -

    See the top of the file for more information.

    -

    -

    Write Database (WDB)

    -

    The Write Database or WDB is based on w.q. This process features a -number of modifications and enhancements over w.q:

    -
      -
    1. -

      Provides the option to write down to a custom partition scheme, - defined by parted columns in sort.csv, which removes the need for - end of day sorting;

      -
    2. -
    3. -

      Greater configuration options; max rows on a per table basis, list - subscription tables, upd function etc. See the top of the process - file for the options;

      -
    4. -
    5. -

      Use of common code with the RDB and Tickerplant Log Replay process - to manipulate tables before save, sort and apply attributes;

      -
    6. -
    7. -

      Checks whether to persist data to disk on a timer rather than on - each tick;

      -
    8. -
    9. -

      Informs other RDB, HDB and GW processes that end of day save and - sort has completed;

      -
    10. -
    11. -

      More log information supplied.

      -
    12. -
    -

    The WDB process can broken down into two main functions:

    -
      -
    1. -

      Periodically saving data to disk and

      -
    2. -
    3. -

      Sorting data at end of day

      -
    4. -
    -

    The WDB process provides flexibility so it can be set-up as a -stand-alone process that will both save and sort data or two separate -processes (one that saves the data and another that will sort the data -on disk). This allows greater flexibility around the end of day event as -sorting data can be time consuming. It is also helps when implementing -seemless rollovers (i.e. no outage window at end-of-day).

    -

    The behaviour of the WDB process is controlled by the .wdb.mode -parameter. This should be set to one of following three values:

    -
      -
    • -

      saveandsort - the process will subscribe for data, periodically - write data to disk and at EOD it will flush remaining data to disk - before sorting it and informing GWs, RDBs and HDBs etc.

      -
    • -
    • -

      save - the process will subscribe for data, periodically write data - to disk and at EOD it will flush remaining data to disk. It will - then inform its respective sort mode process to sort the data

      -
    • -
    • -

      sort - the process will wait to get a trigger from its respective - save mode process. When this is triggered it will sort the data on - disk, apply attributes and the trigger a reload on the RDB, HDB and - GW processes

      -
    • -
    -

    When running a system with separate save and sort process, the sort -process should be configured in the processes.csv file with a proctype -of sort. The save process will check for processes with a proctype of -sort when it attempts to trigger the end of day sort of the data.

    -

    The wdb process provides two methods for persisting data to disk and -sorting at the end of the day.

    -
      -
    • -

      default - Data is persisted into a partition defined by the - [partitiontype] variable, similar to the hdb partition scheme. The - general scheme is of the form - [wdbdir]/[partitiontype]/[table]/. And a typical partition - directory would be similar to wdb/database/2015.11.26/trades/. At - the end of the day, before being moved to the hdb, the data is - sorted according to parameters defined in sort.csv. For each table, - sort.csv will specify the columns to sort (using xasc) and apply - attributes to.

      -
    • -
    • -

      partbyattr - Data is persisted to a custom partition scheme, derived - from parameters in the sort.csv file. The write down scheme is taken - from sort.csv, to reflect the effect of using xasc at the end of - day. For each table, the columns defined in sort.csv, with the - parted attribute, are used to create custom partitions in the wdb. - Multiple columns can be defined with the parted attribute and - distinct combinations of each are generated for custom partitions. - The general partition scheme is of the form - [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a - typical partition directory would be similar to - wdb/database/2015.11.26/trade/MSFT_N. In the above example, the - data is parted by sym and source, and so a unique partition - directory MSFT_N is created in the wdb directory.

      -

      At the end of the day, data is upserted into the hdb without the - need for sorting. The number of rows that are joined at once is - limited by the mergenumrows and mergenumtab parameters.

      -
    • -
    -

    The optional partbyattr method may provide a significant saving in time -at the end of day, allowing the hdb to be accessed sooner. For large -data sets with a low cardinality (ie. small number of distinct elements) -the optional method may provide a significant time saving, upwards of -50%. The optional method should also reduce the memory usage at the end -of day event, as joining data is generally less memory intensive than -sorting.

    -

    -

    Tickerplant Log Replay

    -

    The Tickerplant Log Replay script is for replaying tickerplant logs. -This is useful for:

    -
      -
    1. -

      handling end of day save down failures;

      -
    2. -
    3. -

      handling large volumes of data (larger than can fit into RAM).

      -
    4. -
    -

    The process takes as the main input either an individual log file to -replay, or a directory containing a set of log files. Amongst other -functionality, the process can:

    -
      -
    • -

      replay specific message ranges;

      -
    • -
    • -

      replay in manageable message chunks;

      -
    • -
    • -

      recover as many messages as possible from a log file rather than - just stopping at the first bad message;

      -
    • -
    • -

      ignore specific tables;

      -
    • -
    • -

      modify the tables before or after they are saved;

      -
    • -
    • -

      apply sorting and parting after all the data is written out.

      -
    • -
    -

    The process must have some variables set (the tickerplant log file or -directory, the schema file, and the on-disk database directory to write -to) or it will fail on startup. These can either be set in the config -file, or overridden from the command line in the usual way. An example -start line would be:

    -
    q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1
    -
    -

    The tickerplant log replay script has extended usage information which -can be accessed with -.replay.usage.

    -
    q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage
    -
    -

    -

    Housekeeping

    -

    The housekeeping process is used to undertake periodic system -housekeeping and maintenance, such as compressing or removing files -which are no longer required. The process will run the housekeeping jobs -periodically on a timer. Amongst other functionality the process:

    -
      -
    • -

      Allows for removing and zipping of directory files;

      -
    • -
    • -

      Provides an inbuilt search utility and selectively searches using a - ‘find’ and ‘exclude’ string, and an ‘older than’ parameter;

      -
    • -
    • -

      Reads all tasks from a single CSV;

      -
    • -
    • -

      Runs on a user defined timer;

      -
    • -
    • -

      Can be run immediately from command line or within the process;

      -
    • -
    • -

      Can be easily extended to include new user defined housekeeping - tasks.

      -
    • -
    -

    The process has two main parameters that should be set prior to use; -runtimes and inputcsv.‘Runtimes’ sets the timer to run housekeeping at -the set time(s), and ‘Inputcsv’ provides the location of the -housekeeping csv file. These can either be set in the config file, or -overridden via the command line. If these are not set, then default -parameters are used; 12.00 and ‘KDBCONFIG/housekeeping.csv’ -respectively. The process is designed to run from a single csv file with -five headings:

    -
      -
    • -

      Function details the action that you wish to be carried out on the - files, initially, this can be rm (remove) and zip (zipping);

      -
    • -
    • -

      Path specifies the directory that the files are in;

      -
    • -
    • -

      Match provides the search string to the find function, files - returned will have names that match this string;

      -
    • -
    • -

      Exclude provides a second string to the find function, and these - files are excluded from the match list;

      -
    • -
    • -

      Age is the ‘older than’ parameter, and the function will only be - carried out on files older than the age given (in days).

      -
    • -
    -

    An example csv file would be:

    -
    function,path,match,exclude,age
    -zip,./logs/,*.log,*tick*,2
    -rm,./logs/,*.log*,*tick*,4
    -zip,./logs/,*tick*,,1
    -rm,./logs/,*tick*,,3
    -
    -function path      match    exclude  age
    -----------------------------------------
    -zip      "./logs/" "*.log"  "*tick*" 2
    -rm       "./logs/" "*.log*" "*tick*" 4
    -zip      "./logs/" "*tick*" ""       1
    -rm       "./logs/" "*tick*" ""       3
    -
    -

    The process reads in the csv file, and passes it line by line to a -‘find’ function; providing a dictionary of values that can be used to -locate the files required. The find function takes advantage of system -commands to search for the files according to the specifications in the -dictionary. A search is performed for both the match string and the -exclude string, and cross referenced to produce a list of files that -match the parameters given. The files are then each passed to a further -set of system commands to perform the task of either zipping or -removing. Note that an incomplete csv or non-existant path will throw an -error.

    -

    The remove and zipping functions form only basic implimentations of the -housekeeping process; it is designed to be exended to include more -actions than those provided. Any user function defined in the -housekeeping code can be employed in the same fashion by providing the -name of the function,search string and age of files to the csv.

    -

    As well as being scheduled on a timer, the process can also be run -immediately. Adding ‘-hk.runnow 1’ to the command line when starting the -process will force immediate running of the actions in the housekeeping -csv. Likewise, setting runnow to 1b in the config file will immediately -run the cleaning process. Both methods will cause the process to exit -upon completion. Calling hkrun[] from within the q process will also -run the csv instructions immediately. This will not affect any timer -scheduling and the process will remain open upon completion.

    -

    Housekeeping works both on windows and unix based systems. Since the -process utilizes inbuilt system commands to perform maintenances, a -unix/windows switch detects the operating system of the host and applies -either unix or widows functions appropriately. Extensions need only be -made in the namespace of the hosting operating system (i.e. if you are -using a unix system, and wish to add a new function, you do not need to -add the function to the windows namespace to). Usage information can be -accessed using the ‘-hkusage’ flag:

    -
    q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage
    -
    -

    -

    File Alerter

    -

    The file alerter process is a long-running process which periodically -scans a set of directories for user-specified files. If a matching file -is found it will then carry out a user-defined function on it. The files -to search for and the functions to run are read in from a csv file. -Additionally, the file alerter process can:

    -
      -
    • -

      run more than one function on the specified file.

      -
    • -
    • -

      optionally move the file to a new directory after running the - function.

      -
    • -
    • -

      store a table of files that have already been processed.

      -
    • -
    • -

      run the function only on new files or run it every time the file is - modified.

      -
    • -
    • -

      ignore any matching files already on the system when the process - starts and only run a function if a new file is added or a file is - modified.

      -
    • -
    -

    The file alerter process has four parameters which should be set prior -to use. These parameters can either be set in the config file or -overridden on the command-line. If they are not set, the default -parameters will be used. The parameters are as follows.

    -

    inputcsv - The name and location of the csv file which defines the -behaviour of the process. The default is KDBCONFIG/filealerter.csv.

    -

    polltime - How often the process will scan for matching files. The -default is 0D:00:01, i.e., every minute.

    -

    alreadyprocessed - The name and location of the already-processed -table. The default is KDBCONFIG/filealerterprocessed. This table will -be created automatically the first time the process is ran.

    -

    skipallonstart - If this is set to 1, it will ignore all files -already on the system; if it is set to 0, it will not. The default -value is 0.

    -

    The files to find and the functions to run are read in from a csv file -created by the user. This file has five columns, which are detailed -below.

    -

    path - This is the path to the directory that will be scanned for -the file.

    -

    match - This is a search string matching the name of the file to be -found. Wildcards can be used in this search, for example, “file*” will -find all files starting with “fil”.

    -

    function - This is the name of the function to be run on the file. -This function must be defined in the script -KDBCODE/processes/filealerter.q. If the function is not defined or fails -to run, the process will throw an error and ignore that file from then -on.

    -

    newonly - This is a boolean value. If it is set to 1, it will -only run the function on the file if it has been newly created. If it is -set to 0, then it will run the function every time the file is -modified.

    -

    movetodirectory - This is the path of the directory you would like -to move the file to after it has been processed. If this value is left -blank, the file will not be moved.

    -

    It is possible to run two separate functions on the same file by adding -them as separate lines in the csv file. If the file is to be moved after -it is processed, the file alerter will run both functions on the file -and then attempt to move it. A typical csv file to configure the file -alerter would look like:

    -
    path,match,function,newonly,movetodirectory
    -/path/to/dirA,fileA.*,copy,0,/path/to/newDir
    -/path/to/dirB,fileB.txt,email,1,
    -/path/to/dirA,fileA.*,delete,0,/path/to/newDir
    -
    -path        match      function  newonly    movetodirectory
    ----------------------------------------------------
    -"/path/to/dirA" "fileA.*"   copy    0   "/path/to/newDir"
    -"/path/to/dirB" "fileB.txt" email   1   ""
    -"/path/to/dirA" "fileA.*"   delete  0   "/path/to/newDir"
    -
    -

    The file alerter process reads in each line of the csv file and searches -files matching the search string specified in that line. Note that there -may be more than one file found if a wildcard is used in the search -string. If it finds any files, it will check that they are not in the -already processed table. If newonly is set to 1, it only checks if -the filename is already in the table. If newonly is set to 0, it -checks against the filename, filesize and a md5 hash of the file. The -md5 hash and the filesize are used to determine if the file has been -modified since it was processed last. If the found files have not been -processed already, it then attempts to run the specified function to -these files.

    -

    After the process has run through each line of the csv, it generates a -table of all files that were processed on that run. These files are -appended to the already processed table which is then saved to disk. The -file alerter will attempt to move the files to the ‘movetodirectory’, if -specified. If the file has already been moved during the process (for -example, if the function to run on it was ‘delete’), the file alerter -will not attempt to move it.

    -

    The file alerter is designed to be extended by the user. Customised -functions should be defined within the filealerter.q script. They should -be diadic functions, i.e., they take two parameters: the path and the -filename. As an example, a simple function to make a copy of a file in -another directory could be:

    -
    copy:{[path;file] system "cp ", path,"/", file, " /path/to/newDir"}
    -
    -

    Although the process is designed to run at regular intervals throughout -the day, it can be called manually by invoking the FArun[] command -from within the q session. Similarly, if new lines are added to the csv -file, then it can be re-loaded by calling the loadcsv[] command -from the q session.

    -

    Each stage of the process, along with any errors which may occur, are -appropriately logged in the usual manner.

    -

    The file alerter process is designed to work on both Windows and Unix -based systems. Since many of the functions defined will use inbuilt -system command they will be need to written to suit the operating system -in use. It should also be noted that Windows does not have an inbuilt -md5 hashing function so the file alerter will only detect different -versions of files if the filename or filesize changes.

    -

    -

    Reporter

    -

    Overview

    -

    The reporter process is used to run periodic reports on specific -processes. A report is the result of a query that is run on a process at -a specific time. The result of the query is then handled by one of the -inbuilt result handlers, with the ability to add custom result handlers.

    -

    Reporter process

    -

    Features:

    -
      -
    • -

      Easily create a report for information that you want;

      -
    • -
    • -

      Fully customizable scheduling such as start time, end time and days - of the week;

      -
    • -
    • -

      Run reports repeatedly with a custom period between them;

      -
    • -
    • -

      Asynchronous querying with custom timeout intervals;

      -
    • -
    • -

      Inbuilt result handlers allow reports to be written to file or - published;

      -
    • -
    • -

      Custom result handlers can be defined;

      -
    • -
    • -

      Logs each step of the report process;

      -
    • -
    • -

      Fully integrated with the TorQ gateway to allow reports to be run - across backend processes.

      -
    • -
    -

    The reporter process has three parameters that are read in on -initialisation from the reporter.q file found in the -$KDBCONFIG/settings directory. These settings are the string filepath -of the input csv file, a boolean to output log messages and timestamp -for flushing the query log table.

    -

    To run the reporter process:

    -
    q torq.q -load code/processes/reporter.q -p 20004
    -
    -

    Once the reporter process has been initiated, the reports will be -scheduled and no further input is required from the user.

    -

    Report Configuration

    -

    By default, the process takes its inputs from a file called reporter.csv -which is found in the $KDBCONFIG directory. This allows the user -complete control over the configuration of the reports. As the queries -are evaluated on the target process, local variables can be referenced -or foreign functions can be run. Table [table:reportertable] shows the -meaning of the csv schema.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Column HeaderDescription and Example
    nameReport name e.g. Usage
    queryQuery to be evaluated on that process. It can be a string query or function
    resulthandlerResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[“./output”;“usage”]
    gatewayIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway
    joinfunctionUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze
    proctypeThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb
    procnameThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1
    startTime on that day to start at e.g. 12:00
    endTime on that day that the report will stop at e.g. 23:00
    periodThe period between each report query e.g. 00:00:10
    timeoutintervalThe amount of time the reporter waits before timing out a report e.g. 00:00:30
    daysofweekNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday
    -

    When running a report on a gateway, the gateway field must be set to the -proctype of the gateway that will be queried. It will then run the -report on the processes which are listed in the proctype field and join -the results by using the function specified in the joinfunction field. -If there is no join function then the reporter process will not start. -Multiple entries in the proctype field must be separated by a space and -are only allowed when the gateway field is not empty. If gateway field -is empty and there are multiple entries in the proctype field then the -reporter process will not load.

    -

    Listing [code:csvschema] shows an example of the schema needed in the -input csv file.

    -
    name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
    -usage|10#.usage.usage|writetofiletype["./output/";"usage";"csv"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6
    -memory|.Q.w[]|writetofile["./output/";"memory.csv"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6
    -usage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6
    -
    -

    Result Handlers

    -

    There are several default result handlers which are listed below. Custom -result handlers can be defined as required. The result handler will be -invoked with a single parameter (the result of the query).

    -

    writetofiletype - Accepts 3 parameters: path, filename, filetype and -data. When writing to file it uses a date time suffix so the resultant -filename will be usage_rdb_2014_01_02_15_00_12.txt e.g.

    -
    writetofiletype["./output/";"usage";"csv"]
    -
    -

    splaytable - This accepts 3 parameters: path, file and data. This -splays the result to a directory. The result must be a table in order to -use this function e.g.

    -
    splaytable["./output/";"usage"]
    -
    -

    emailalert - This accepts 3 parameters: period, recipient list and -data. The period dictates the throttle i.e. emails will be sent at most -every period. The result of the report must be a table with a single -column called messages which contains the character list of the email -message. This is used with the monitoring checks to raise alerts, but -can be used with other functions.

    -
    emailalert[0D00:30;("test@aquaq.co.uk";"test1@aquaq.co.uk")]
    -
    -

    emailreport - This accepts 3 parameters: temporary path, recipient -list, file name, file type and data. The data is written out as the file -type (e.g. csv, xml, txt, xls, json) with the given file name to the -temporary path. It is then emailed to the recipient list, and the -temporary file removed.

    -
    emailreport["./tempdir/"; ("test@aquaq.co.uk";"test1@aquaq.co.uk"); "EndOfDayReport"; "csv"]
    -
    -

    publishresult - Accepts 1 parameter and that is the data. This is -discussed later in the subsection subresults. -Custom result handlers can be added to $KDBCODE/processes/reporter.q . -It is important to note that the result handler is referencing local -functions as it is executed in the reporter process and not the target -process. When the query has been successful the result handler will be -passed a dictionary with the following keys: queryid, time, name, -procname, proctype and result.

    -

    Report Process Tracking

    -

    Each step of the query is logged by the reporter process. Each query is -given a unique id and regular system messages are given the id 0. The -stage column specifies what stage the query is in and these are shown in -table [table:stagetable]. An appropriate log message is also shown so -any problems can easily be diagnosed. The in memory table is flushed -every interval depending on the value of the flushqueryloginterval -variable in the reporter.q file found in the $KDBCONFIG/settings -directory.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Stage symbolExplanation
    RThe query is currently running
    EAn error has occurred during the query
    CThe query has been completed with no errors
    TThe query has exceeded the timeout interval
    SSystem message e.g. “Reporter Process Initialised”
    -
    time                         | queryid stage message
    ------------------------------| ------------------------------------------------------------------------
    -2014.10.20D22:20:06.597035000| 37 R "Received result"
    -2014.10.20D22:20:06.600692000| 37 R "Running resulthandler"
    -2014.10.20D22:20:06.604455000| 37 C "Finished report"
    -2014.10.20D22:30:00.984572000| 38 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
    -2014.10.20D22:30:00.991862000| 38 R "Received result"
    -2014.10.20D22:30:00.995527000| 38 R "Running resulthandler"
    -2014.10.20D22:30:00.999236000| 38 C "Finished report"
    -2014.10.20D22:30:06.784419000| 39 R "Running report: rdbtablecount against proctype: rdb on handle: 7i"
    -2014.10.20D22:30:06.796431000| 39 R "Received result"
    -
    -

    Subscribing for Results

    -

    To publish the results of the report, the reporter process uses the pub -sub functionality of TorQ. This is done by using the using the inbuilt -result handler called publishresult. In order to subscribe to this feed, -connect to the reporter process and send the function shown below over -the handle. To subscribe to all reports use a backtick as the second -parameter and to subscribe to a specific reports results include the -reporter name as a symbol.

    -
    /- define a upd function
    -upd:insert
    -
    -/- handle to reporter process
    -h: hopen 20004
    -
    -/- Subscribe to all results that use the publishresult handler
    -h(`.ps.subscribe;`reporterprocessresults;`)
    -
    -/- Subscribe to a specific report called testreport
    -h(`.ps.subscribe;`reporterprocessresults;`testreport)
    -
    -

    Example reports

    -

    The following are examples of reports that could be used in the reporter -process. The rdbtablecount report will run hourly and return the count -of all the tables in a rdb process. The memoryusage report will run -every 10 minutes against the gateway for multiple processes and will -return the .Q.w[] information. Both of these reports run between -9:30am to 4:00pm during the weekdays. The report onetimequery is an -example of a query that is run one time, in order to run a query once, -the period must be the same as the difference between the start and end -time.

    -
    name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek
    -rdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6
    -memoryusage|.Q.w[]|writetofile["./output/";"memory.csv"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6
    -onetimequery|10#.usage.usage|writetofile["./output/";"onetime.csv"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6
    -
    -

    -

    Monitor

    -

    The Monitor process is a simple process to monitor the health of the -other processes in the system. It connects to each process that it finds -(by default using the discovery service, though can use the static file -as well) and subscribes to both heartbeats and log messages. It -maintains a keyed table of heartbeats, and a table of all log messages -received.

    -

    Run it with:

    -
    aquaq $ q torq.q -load code/processes/monitor.q -p 20001
    -
    -

    It is probably advisable to run the monitor process with the -trap flag, -as there may be some start up errors if the processes it is connecting -to do not have the necessary heartbeating or publish/subscribe code -loaded.

    -
    aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap
    -
    -

    The current heartbeat statuses are tracked in .hb.hb, and the log -messages in logmsg

    -
    q)show .hb.hb                                                                                                                                                                                                                                                                 
    -sym       procname    | time                          counter warning error
    -----------------------| ---------------------------------------------------
    -discovery discovery2  | 2014.01.07D13:24:31.848257000 893     0       0    
    -hdb       hdb1        | 2014.01.07D13:24:31.866459000 955     0       0    
    -rdb       rdb_europe_1| 2014.01.07D13:23:31.507203000 901     1       0    
    -rdb       rdb1        | 2014.01.07D13:24:31.848259000 34      0       0
    -
    -q)show select from logmsg where loglevel=`ERR                                                                                                              
    -time                          sym  host  loglevel id      message                               
    --------------------------------------------------------------------------------------
    -2014.01.07D12:25:17.457535000 hdb1 aquaq ERR      reload  "failed to reload database"           
    -2014.01.07D13:29:28.784333000 rdb1 aquaq ERR      eodsave "failed to save tables : trade, quote"
    -
    -

    HTML5 front end

    -

    A HTML5 front end has been built to display important process -information that is sent from the monitor process. It uses HTML5, -WebSockets and JavaScript on the front end and interacts with the -monitor process in the kdb+ side. The features of the front end include:

    -
      -
    • -

      Heartbeat table with processes that have warnings highlighted in - orange and errors in red

      -
    • -
    • -

      Log message table displaying the last 30 errors

      -
    • -
    • -

      Log message error chart that is by default displayed in 5 minute - bins

      -
    • -
    • -

      Chart’s bin value can be changed on the fly

      -
    • -
    • -

      Responsive design so works on all main devices i.e. phones, tablets - and desktop

      -
    • -
    -

    It is accessible by going to the url http://HOST:PORT/.non?monitorui

    -

    -

    Compression

    -

    The compression process is a thin wrapper around the compression utility -library. It allows periodic compression of whole or parts of databases -(e.g. data is written out uncompressed and then compressed after a -certain period of time). It uses four variables defined in -KDBCONFIG/settings/compression.q which specify

    -
      -
    • -

      the compression configuration file to use

      -
    • -
    • -

      the database directory to compress

      -
    • -
    • -

      the maximum age of data to attempt to compress

      -
    • -
    • -

      whether the process should exit upon completion

      -
    • -
    -

    The process is run like other TorQ processes:

    -
    q torq.q -load code/processes/compression.q -p 20005
    -
    -

    Modify the settings file or override variables from the command line as -appropriate.

    -

    -

    Kill

    -

    The kill process is used to connect to and terminate currently running -processes. It kills the process by sending the exit command therefore -the kill process must have appropriate permissions to send the command, -and it must be able to create a connection (i.e. it will not be able to -kill a blocked process in the same way that the unix command kill -9 -would). By default, the kill process will connect to the discovery -service(s), and kill the processes of the specified types. The kill -process can be modified to not use the discovery service and instead use -the process.csv file via the configuration in the standard way.

    -

    If run without any command line parameters, kill.q will try to kill each -process it finds with type defined by its .servers.CONNECTIONS variable.

    -
    q torq.q -load code/processes/kill.q -p 20000
    -
    -

    .servers.CONNECTIONS can optionally be overridden from the command line -(as can any other process variable):

    -
    q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant
    -
    -

    The kill process can also be used to kill only specific named processes -within the process types:

    -
    q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2
    -
    -

    -

    Chained Tickerplant

    -

    In tick+ architecture the main tickerplant is the most important -component, as it is relied upon by all the real time subscribers. When -the tickerplant goes down data will be lost, compare this to an rdb -which can be recovered after it fails. The chained tickerplant process -is an additional tickerplant that is a real time subscriber to the main -tickerplant but replicates its behaviour. It will have its own real time -subscribers and can be recovered when it fails. This is the recommended -approach when users want to perform their own custom real time analysis.

    -

    The chained tickerplant can:

    -
      -
    • -

      subscribe to specific tables and syms

      -
    • -
    • -

      batch publish at an interval or publish tick by tick

      -
    • -
    • -

      create a tickerplant log that its real time subscribers can replay

      -
    • -
    • -

      replay the source tickerplant log

      -
    • -
    -

    To launch the chained tickerplant

    -
    q torq.q -load code/processes/chainedtp.q -p 12009
    -
    -

    Chained tickerplant settings are found in config/settings/chainedtp.q -and are under the .ctp namespace.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    SettingExplanationDefault
    tickerplantnamelist of tickerplant names to try and make a connection to`tickerplant1
    pubintervalpublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick0D00:00:00
    tpconnsleepnumber of seconds between attempts to connect to the source tickerplant10
    createlogfilecreate a log file0b
    logdirdirectory containing chained tickerplant logs`:hdb
    subscribetosubscribe to these tables only (null for all)`
    subscribesymssubscribe to these syms only (null for all)`
    replayreplay the tickerplant log file0b
    schemaretrieve schema from tickerplant1b
    clearlogonsubscriptionclear log on subscription, only called if createlogfile is also enabled0b
    -

    -

    Integration with kdb+tick

    -

    AquaQ TorQ can be fully integrated with kdb+tick. For further details, -use one of the AquaQ TorQ Starter packs to set up a production kdb+ data -capture system.

    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/assets/fonts/icon.eot b/site/assets/fonts/icon.eot deleted file mode 100755 index 8f81638c2de436e1b5cc77b6a2693b2b347a0151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2224 zcmaJDYiN^K^qhP1ZcHEMVbZM4%Vs7uwoQ|)E~(XOx7OBXnq))T&RAn>*Cw^Cqp}}H zWH6912NR|+2m5JcjIkeMjv=!Q9249yfx%!u#)^-T>W{&MHQBjeBBo>Pe4KmF^E>CB z@7#O8&r|?g2oV@;1cVDHB*W2-a$#G6b3^#>-#P#loPbHlK$=uKI0z}2f>SUHNmw9> z5fUU>fJL$rHa6%4A9RqW){j^bqzea^bdbuq5*;Zk-LE^Cdn?+_Wk$3IeMJy!S`Wh)UMyN+J zdS?0mGDhF6kI!%~<+qJq>2&vEpxeis4jnV-TbREq7%~}5A-CPp7U&N8yNm|C!pSZ= z>RMgx`%^o6Qv2I!?&%)eT36VWFT?1`lcUl3`6$Mm(PLi)Z77M4~2lu_KixyTMMWFbEgdpD<-HjI^xqTD%xRVN3f% z27EufM7BCq_F{-eA6ANNH2Jt&hXy?n=(b9Pj&yDA7Bp1}?(gblf$p{dxyryAvDrJc zt^F=*bbI@7kDasKZ>5j8H`V(+mJUPmWnFWsN4v+*4sUM2nLSNzr@QTW$GB0}ROgND*=9A% zw1)nnmfd#y?v|l`gH~p?ZtFkf)fup1^YGd6?&$gJGyIAekox zZ*nZ1`&86Qhw@P=Z(>&x;ARp0>8hS~9}KyeD>li(=rCx4^e?QEnx+3`oEyA6+GNZnmZ#7YHL z5IITs5QomaULXEb^rwKI?mhVE*tF(gTJylu*7C253QKlw|iZm6P z(d9W@r8&tvtF(;hi7G9p>(o@G6(o;TX$^Ek_QYf+{q!nMq!t!WWYV@yU&nvnzqQ7- z^ug5BsoCVh#%sLRU?7uTvQ4GZsfFZH>X_~5Y1`mrW+anI`(Qx2;FrKgKL9DZ>czF6 gge97fk?bg(rg2dERTv>l@iX9~idJf0Tk{R{Kaui$V*mgE diff --git a/site/assets/fonts/icon.svg b/site/assets/fonts/icon.svg deleted file mode 100755 index 86250e7b4..000000000 --- a/site/assets/fonts/icon.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/site/assets/fonts/icon.ttf b/site/assets/fonts/icon.ttf deleted file mode 100755 index b5ab5601bed7765790037c721c2ee1c7d444a7a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2072 zcmaJ>ZD^ZS6h7zPd^bx!mX9TkZNApHq|4go%g&_h)~(vEUF()a8EswGW$kL4bZsXc z{#b?xf`|$Z+`tL`T!ufyAL2xYE5gLVlqDbt{t(MPB;9@p4s7DNZ{D%&kLTsw`<$

    vJhI<5Xe z^&QFMB)b;UtBYWSqa?48?8v4UGUKsFzmfbg(%Sf&xy$DPi zbfnwchv86wxm^ZkGPbc`Pb6wFS)yL2t0NqW1bfUTqsq-LxEk6$od+|!dou?+Y3~h9 zY;P#-DOO?Z^y#tj#l>+<>OGUe-8Hl1=4scviv7i!dF-^PzW_;|q^3}((HZq>k@AFj za`SOHRw-aIR%U7}ZV;|qiIO54r&n>b%tw?$r;Xb*d)E+ zLNcE$rBZdZYot1yCMT7`AXeUd%+%!=(zRk6$#NWpFMS^h;0NI)@-?8k52LgOu-0U= zCBVG~G#Lq?*De7A**d&!XpsRA_VlrEs3T0F3b4l=&MtlXfX6<*vvZ`^$=Tkwvd6qz z8iPJtmnr?Sp|w$G)EeJ75P4^Ki&gI)c_r2P(eIxe!uGI<-PJcMj4@A(P2KKs_Ky0u zY-`}I-b1@A;pd_gcHE*z#F6Dju3&7>Vf1w|G`p?(`K!fQwLxu;wu}Bk^=rD%Wq6eY zc~C6oNH~UGRY!LKyE`J?ZP;y&M5){Wr@4s+Fxq9d^dSupt=(pox{WSsVA7_dyGQ%T zkLHfS+_m?{LzCx6wl?A1z80_B+wr_>(yVA{@F(`|uv-;+)4*`sUZ-@(rOxUz_){IXb+m(ESuc#BROaaae4B#(WznI{#M;k znD=Nk8f^~`59wO>`-Z2YR;7NICpfCtZB^K&&Rt51V#M4rnyDoB(|4iA;f>}+;x z5otP{++V0d0sZLTyuwn%euOGiis-N8X;i3RN$~RmPl`F;uH@0}4XCtm2B;alSGl#i zTDf&^@W;=v^QH}3D}UNqE(z!PfayTO(nue&J!2t7nh~I_*9l`!Y*`4VjnRT zN2H^_cpFT>oA54t4&T6Sd;!12+jyTTn2qcrYZJUi-4XPpI!TZh1AHOZh9ZTG8Fll3 zj5+Cd%2+}8sEn2L{p)3{B7Lunbzp;&lo1tL(rCz1!wd{CB4bYaZW${GPsvybX0XUu zMf$jmbr6F5sp(u6PQf(fAe+i8EuYF|9o>O0NI?dcV3|y000$i$fUbJydVDxDb7nrh z1cxbT2F}1dq+zMvVKA3nam-}0nWgkf=7i(;S;x?HZZwz624GN1utF(jC^{>pO~VT9 cCrEc3&eA$0)i+9>qL=`6wATCjoC1DrZ;vj6}9 diff --git a/site/assets/fonts/icon.woff b/site/assets/fonts/icon.woff deleted file mode 100755 index ed0f20d5b80ab98072f3557225b3333e01b78670..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148 zcmaJ?U2M};6hG(Qeym;Bb)z4&t6RTVr5$BkzZkY-Fqm#^Y(iTNVUx0zjk&dB8w&A( z8e?KYjQT(#L^1J^5+8grk{BY32}Tk$w26s{CdP%2q=N?^NL=f=|NfEk;{E5G`#WF% zbMEQ+-@ZLQGz18=8fKtT+PBtZfuCRFM|SoCU;}B73uHeVHCj?Ez9{;wK zTUn*D_W$R{332`_ehf+gc8O7y@KJ5YhY&;!$@L2j^^(8?0P8LMM)d{^a3azm(bMIS zfRu%hoooWzi3=|~D5MA-b&3&2aI9i2uExtracIOW6c|0?H$$~W zZ9y!=*Vf_)tPsDs7NdhB6d}+3tSBZMy=t#;i_#gmKVB}!H#Q{BF2%~_Sb0P64eD(k z3OrBm<)9XEQD?aJn4IA}hfUH8DkSsCQYuwfJIy)O;WRm^6b7;K<`bqa$B>Q{+ent< zD0~4L6~GU|%jBy^bw5Ul2e8&;vn9a2dNdgcpw}(|J=r?F?P!q!5BB!6aHum(p$f3a z9nNlD$DqePv7>9W&&k=|ce2O5P0c}{t=p7-Mc>w}HEN7+9*Dd@(qz@SM_)~Kee(OK zhp;1TV)t|{3S-REYEyT3oPA^drmcrvRh&Z~^%oU97IgGw;hGw@_ zw{WdEr`D^@(GJmHsD4A|xdN||AP+eZdXI)&A~eej51Z$iVC(RU|96Bn+}^DBZUFQ1>X@m8%S;;ip%T zC`Qa3qnS!_KYb@^(9x;gEzTCV29c)2$^C^Y6wr_U&8sX$|R8 z@T8dYZAu>9)`&_AXLP3y-LKp}d$w}>{?LzKVAm}hwpISJ-KyNBN%K)miDJY&YUw3m zx5+}J)FAUE5{XIzOY|hKUAvk}<+<;l66GmTOp2rQJq25wUUv)C$xc41+%-H(AWe5A zm8g_hNz^3KLmYYUjpo?jVm`(C<=%tOpY8ImEbel;MWjV>(tSr4mRQ8ao9dULW~r$} z7|D5}0$p)g+KbO*$tLVVmn8BLQE{}iV1#!1Z+QzofG^=&xP!a!YrKOGn1b2JF0vZn zb?S~-Ppgvznd#vxxi%CjWX!0W2V~4izeC0f!bfGSr0-uRV-@N9WUK`noTQAX(2%Bq zEH%tP52G^Xr0R1(LwEqj{ug`Uae@E< diff --git a/site/assets/images/favicon-e565ddfa3b.ico b/site/assets/images/favicon-e565ddfa3b.ico deleted file mode 100644 index e85006a3ce1c6fd81faa6d5a13095519c4a6fc96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` diff --git a/site/assets/images/favicon.ico b/site/assets/images/favicon.ico deleted file mode 100644 index e85006a3ce1c6fd81faa6d5a13095519c4a6fc96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmd6lF-yZh9L1kl>(HSEK`2y^4yB6->f+$wD)=oNY!UheIt03Q=;qj=;8*Bap_4*& za8yAl;wmmx5Yyi^7dXN-WYdJ-{qNqpcez|5t#Fr0qTSYcPTG`I2PBk8r$~4kg^0zN zCJe(rhix3do!L$bZ+IuZ{i08x=JR3=e+M4pv0KsKA??{u_*EFfo|`p&t`Vf=jn{)F z1fKk9hWsmYwqWAP^JO*5u*R;*L&dX3H$%S7oB$f0{ISh{QVXuncnzN67WQH2`lip7 zhX+VI$6x$1+$8gMjh4+1l0N#8_0Fh=N#EwpKk{SeE!)SHFB@xQFX3y+8sF#_@!bDW eIdI-IC`$c%>bk?KbPeN9RHtL<1^)v~#xMt8oB^@` diff --git a/site/assets/images/icons/bitbucket-670608a71a.svg b/site/assets/images/icons/bitbucket-670608a71a.svg deleted file mode 100644 index 7d95cb22d..000000000 --- a/site/assets/images/icons/bitbucket-670608a71a.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/assets/images/icons/github-1da075986e.svg b/site/assets/images/icons/github-1da075986e.svg deleted file mode 100644 index 3cacb2e0f..000000000 --- a/site/assets/images/icons/github-1da075986e.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/assets/images/icons/gitlab-5ad3f9f9e5.svg b/site/assets/images/icons/gitlab-5ad3f9f9e5.svg deleted file mode 100644 index b036a9b52..000000000 --- a/site/assets/images/icons/gitlab-5ad3f9f9e5.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/site/assets/javascripts/application-16f434a21a.js b/site/assets/javascripts/application-16f434a21a.js deleted file mode 100644 index 057cdeebe..000000000 --- a/site/assets/javascripts/application-16f434a21a.js +++ /dev/null @@ -1,58 +0,0 @@ -var Application=function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){n(1),n(65),n(66),t.exports=n(67)},function(t,e,n){"use strict";n(2),n(22),n(48),n(52),t.exports=n(21).Promise},function(t,e,n){"use strict";var r=n(3),o={};o[n(5)("toStringTag")]="z",o+""!="[object z]"&&n(9)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(t,e,n){"use strict";var r=n(4),o=n(5)("toStringTag"),i="Arguments"==r(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),o))?n:i?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e){"use strict";var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){"use strict";var r=n(6)("wks"),o=n(8),i=n(7).Symbol,s="function"==typeof i,a=t.exports=function(t){return r[t]||(r[t]=s&&i[t]||(s?i:o)("Symbol."+t))};a.store=r},function(t,e,n){"use strict";var r=n(7),o="__core-js_shared__",i=r[o]||(r[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){"use strict";var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){"use strict";var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e,n){"use strict";var r=n(7),o=n(10),i=n(20),s=n(8)("src"),a="toString",u=Function[a],c=(""+u).split(a);n(21).inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,a){var u="function"==typeof n;u&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(u&&(i(n,s)||o(n,s,t[e]?""+t[e]:c.join(String(e)))),t===r?t[e]=n:a?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,a,function(){return"function"==typeof this&&this[s]||u.call(this)})},function(t,e,n){"use strict";var r=n(11),o=n(19);t.exports=n(15)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){"use strict";var r=n(12),o=n(14),i=n(18),s=Object.defineProperty;e.f=n(15)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var r=n(13);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};t.exports=function(t){return"object"===("undefined"==typeof t?"undefined":n(t))?null!==t:"function"==typeof t}},function(t,e,n){"use strict";t.exports=!n(15)&&!n(16)(function(){return 7!=Object.defineProperty(n(17)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){"use strict";t.exports=!n(16)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){"use strict";t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){"use strict";var r=n(13),o=n(7).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,e,n){"use strict";var r=n(13);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e){"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){"use strict";var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){"use strict";var n=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(t,e,n){"use strict";var r=n(23)(!0);n(26)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){"use strict";var r=n(24),o=n(25);t.exports=function(t){return function(e,n){var i,s,a=String(o(e)),u=r(n),c=a.length;return u<0||u>=c?t?"":void 0:(i=a.charCodeAt(u),i<55296||i>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):i:t?a.slice(u,u+2):(i-55296<<10)+(s-56320)+65536)}}},function(t,e){"use strict";var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){"use strict";t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(27),o=n(28),i=n(9),s=n(10),a=n(20),u=n(31),c=n(32),l=n(45),f=n(46),d=n(5)("iterator"),h=!([].keys&&"next"in[].keys()),p="@@iterator",v="keys",y="values",m=function(){return this};t.exports=function(t,e,n,g,b,w,_){c(n,e,g);var S,x,E,k=function(t){if(!h&&t in P)return P[t];switch(t){case v:return function(){return new n(this,t)};case y:return function(){return new n(this,t)}}return function(){return new n(this,t)}},T=e+" Iterator",O=b==y,C=!1,P=t.prototype,A=P[d]||P[p]||b&&P[b],M=A||k(b),j=b?O?k("entries"):M:void 0,L="Array"==e?P.entries||A:A;if(L&&(E=f(L.call(new t)),E!==Object.prototype&&(l(E,T,!0),r||a(E,d)||s(E,d,m))),O&&A&&A.name!==y&&(C=!0,M=function(){return A.call(this)}),r&&!_||!h&&!C&&P[d]||s(P,d,M),u[e]=M,u[T]=m,b)if(S={values:O?M:k(y),keys:w?M:k(v),entries:j},_)for(x in S)x in P||i(P,x,S[x]);else o(o.P+o.F*(h||C),e,S);return S}},function(t,e){"use strict";t.exports=!1},function(t,e,n){"use strict";var r=n(7),o=n(21),i=n(10),s=n(9),a=n(29),u="prototype",c=function t(e,n,c){var l,f,d,h,p=e&t.F,v=e&t.G,y=e&t.S,m=e&t.P,g=e&t.B,b=v?r:y?r[n]||(r[n]={}):(r[n]||{})[u],w=v?o:o[n]||(o[n]={}),_=w[u]||(w[u]={});v&&(c=n);for(l in c)f=!p&&b&&void 0!==b[l],d=(f?b:c)[l],h=g&&f?a(d,r):m&&"function"==typeof d?a(Function.call,d):d,b&&s(b,l,d,e&t.U),w[l]!=d&&i(w,l,h),m&&_[l]!=d&&(_[l]=d)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},function(t,e,n){"use strict";var r=n(30);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e){"use strict";t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e){"use strict";t.exports={}},function(t,e,n){"use strict";var r=n(33),o=n(19),i=n(45),s={};n(10)(s,n(5)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:o(1,n)}),i(t,e+" Iterator")}},function(t,e,n){"use strict";var r=n(12),o=n(34),i=n(43),s=n(42)("IE_PROTO"),a=function(){},u="prototype",c=function(){var t,e=n(17)("iframe"),r=i.length,o="<",s=">";for(e.style.display="none",n(44).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(o+"script"+s+"document.F=Object"+o+"/script"+s),t.close(),c=t.F;r--;)delete c[u][i[r]];return c()};t.exports=Object.create||function(t,e){var n;return null!==t?(a[u]=r(t),n=new a,a[u]=null,n[s]=t):n=c(),void 0===e?n:o(n,e)}},function(t,e,n){"use strict";var r=n(11),o=n(12),i=n(35);t.exports=n(15)?Object.defineProperties:function(t,e){o(t);for(var n,s=i(e),a=s.length,u=0;a>u;)r.f(t,n=s[u++],e[n]);return t}},function(t,e,n){"use strict";var r=n(36),o=n(43);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e,n){"use strict";var r=n(20),o=n(37),i=n(39)(!1),s=n(42)("IE_PROTO");t.exports=function(t,e){var n,a=o(t),u=0,c=[];for(n in a)n!=s&&r(a,n)&&c.push(n);for(;e.length>u;)r(a,n=e[u++])&&(~i(c,n)||c.push(n));return c}},function(t,e,n){"use strict";var r=n(38),o=n(25);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(4);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e,n){"use strict";var r=n(37),o=n(40),i=n(41);t.exports=function(t){return function(e,n,s){var a,u=r(e),c=o(u.length),l=i(s,c);if(t&&n!=n){for(;c>l;)if(a=u[l++],a!=a)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){"use strict";var r=n(24),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){"use strict";var r=n(24),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},function(t,e,n){"use strict";var r=n(6)("keys"),o=n(8);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e){"use strict";t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){"use strict";t.exports=n(7).document&&document.documentElement},function(t,e,n){"use strict";var r=n(11).f,o=n(20),i=n(5)("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e,n){"use strict";var r=n(20),o=n(47),i=n(42)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){"use strict";var r=n(25);t.exports=function(t){return Object(r(t))}},function(t,e,n){"use strict";for(var r=n(49),o=n(9),i=n(7),s=n(10),a=n(31),u=n(5),c=u("iterator"),l=u("toStringTag"),f=a.Array,d=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],h=0;h<5;h++){var p,v=d[h],y=i[v],m=y&&y.prototype;if(m){m[c]||s(m,c,f),m[l]||s(m,l,v),a[v]=f;for(p in r)m[p]||o(m,p,r[p],!0)}}},function(t,e,n){"use strict";var r=n(50),o=n(51),i=n(31),s=n(37);t.exports=n(26)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):"keys"==e?o(0,n):"values"==e?o(0,t[n]):o(0,[n,t[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},function(t,e,n){"use strict";var r=n(5)("unscopables"),o=Array.prototype;void 0==o[r]&&n(10)(o,r,{}),t.exports=function(t){o[r][t]=!0}},function(t,e){"use strict";t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){"use strict";var r,o,i,s=n(27),a=n(7),u=n(29),c=n(3),l=n(28),f=n(13),d=n(30),h=n(53),p=n(54),v=n(58),y=n(59).set,m=n(61)(),g="Promise",b=a.TypeError,w=a.process,_=a[g],w=a.process,S="process"==c(w),x=function(){},E=!!function(){try{var t=_.resolve(1),e=(t.constructor={})[n(5)("species")]=function(t){t(x,x)};return(S||"function"==typeof PromiseRejectionEvent)&&t.then(x)instanceof e}catch(t){}}(),k=function(t,e){return t===e||t===_&&e===i},T=function(t){var e;return!(!f(t)||"function"!=typeof(e=t.then))&&e},O=function(t){return k(_,t)?new C(t):new o(t)},C=o=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw b("Bad Promise constructor");e=t,n=r}),this.resolve=d(e),this.reject=d(n)},P=function(t){try{t()}catch(t){return{error:t}}},A=function(t,e){if(!t._n){t._n=!0;var n=t._c;m(function(){for(var r=t._v,o=1==t._s,i=0,s=function(e){var n,i,s=o?e.ok:e.fail,a=e.resolve,u=e.reject,c=e.domain;try{s?(o||(2==t._h&&L(t),t._h=1),s===!0?n=r:(c&&c.enter(),n=s(r),c&&c.exit()),n===e.promise?u(b("Promise-chain cycle")):(i=T(n))?i.call(n,a,u):a(n)):u(r)}catch(t){u(t)}};n.length>i;)s(n[i++]);t._c=[],t._n=!1,e&&!t._h&&M(t)})}},M=function(t){y.call(a,function(){var e,n,r,o=t._v;if(j(t)&&(e=P(function(){S?w.emit("unhandledRejection",o,t):(n=a.onunhandledrejection)?n({promise:t,reason:o}):(r=a.console)&&r.error&&r.error("Unhandled promise rejection",o)}),t._h=S||j(t)?2:1),t._a=void 0,e)throw e.error})},j=function t(e){if(1==e._h)return!1;for(var n,r=e._a||e._c,o=0;r.length>o;)if(n=r[o++],n.fail||!t(n.promise))return!1;return!0},L=function(t){y.call(a,function(){var e;S?w.emit("rejectionHandled",t):(e=a.onrejectionhandled)&&e({promise:t,reason:t._v})})},F=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),A(e,!0))},N=function t(e){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===e)throw b("Promise can't be resolved itself");(n=T(e))?m(function(){var o={_w:r,_d:!1};try{n.call(e,u(t,o,1),u(F,o,1))}catch(t){F.call(o,t)}}):(r._v=e,r._s=1,A(r,!1))}catch(t){F.call({_w:r,_d:!1},t)}}};E||(_=function(t){h(this,_,g,"_h"),d(t),r.call(this);try{t(u(N,this,1),u(F,this,1))}catch(t){F.call(this,t)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(62)(_.prototype,{then:function(t,e){var n=O(v(this,_));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=S?w.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&A(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),C=function(){var t=new r;this.promise=t,this.resolve=u(N,t,1),this.reject=u(F,t,1)}),l(l.G+l.W+l.F*!E,{Promise:_}),n(45)(_,g),n(63)(g),i=n(21)[g],l(l.S+l.F*!E,g,{reject:function(t){var e=O(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(s||!E),g,{resolve:function(t){if(t instanceof _&&k(t.constructor,this))return t;var e=O(this),n=e.resolve;return n(t),e.promise}}),l(l.S+l.F*!(E&&n(64)(function(t){_.all(t).catch(x)})),g,{all:function(t){var e=this,n=O(e),r=n.resolve,o=n.reject,i=P(function(){var n=[],i=0,s=1;p(t,!1,function(t){var a=i++,u=!1;n.push(void 0),s++,e.resolve(t).then(function(t){u||(u=!0,n[a]=t,--s||r(n))},o)}),--s||r(n)});return i&&o(i.error),n.promise},race:function(t){var e=this,n=O(e),r=n.reject,o=P(function(){p(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},function(t,e){"use strict";t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+": incorrect invocation!");return t}},function(t,e,n){"use strict";var r=n(29),o=n(55),i=n(56),s=n(12),a=n(40),u=n(57),c={},l={},f=t.exports=function(t,e,n,f,d){var h,p,v,y,m=d?function(){return t}:u(t),g=r(n,f,e?2:1),b=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(i(m)){for(h=a(t.length);h>b;b++)if(y=e?g(s(p=t[b])[0],p[1]):g(t[b]),y===c||y===l)return y}else for(v=m.call(t);!(p=v.next()).done;)if(y=o(v,g,p.value,e),y===c||y===l)return y};f.BREAK=c,f.RETURN=l},function(t,e,n){"use strict";var r=n(12);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){var i=t.return;throw void 0!==i&&r(i.call(t)),e}}},function(t,e,n){"use strict";var r=n(31),o=n(5)("iterator"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},function(t,e,n){"use strict";var r=n(3),o=n(5)("iterator"),i=n(31);t.exports=n(21).getIteratorMethod=function(t){if(void 0!=t)return t[o]||t["@@iterator"]||i[r(t)]}},function(t,e,n){"use strict";var r=n(12),o=n(30),i=n(5)("species");t.exports=function(t,e){var n,s=r(t).constructor;return void 0===s||void 0==(n=r(s)[i])?e:o(n)}},function(t,e,n){"use strict";var r,o,i,s=n(29),a=n(60),u=n(44),c=n(17),l=n(7),f=l.process,d=l.setImmediate,h=l.clearImmediate,p=l.MessageChannel,v=0,y={},m="onreadystatechange",g=function(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},b=function(t){g.call(t.data)};d&&h||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return y[++v]=function(){a("function"==typeof t?t:Function(t),e)},r(v),v},h=function(t){delete y[t]},"process"==n(4)(f)?r=function(t){f.nextTick(s(g,t,1))}:p?(o=new p,i=o.port2,o.port1.onmessage=b,r=s(i.postMessage,i,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(t){l.postMessage(t+"","*")},l.addEventListener("message",b,!1)):r=m in c("script")?function(t){u.appendChild(c("script"))[m]=function(){u.removeChild(this),g.call(t)}}:function(t){setTimeout(s(g,t,1),0)}),t.exports={set:d,clear:h}},function(t,e){"use strict";t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){"use strict";var r=n(7),o=n(59).set,i=r.MutationObserver||r.WebKitMutationObserver,s=r.process,a=r.Promise,u="process"==n(4)(s);t.exports=function(){var t,e,n,c=function(){var r,o;for(u&&(r=s.domain)&&r.exit();t;){o=t.fn,t=t.next;try{o()}catch(r){throw t?n():e=void 0,r}}e=void 0,r&&r.enter()};if(u)n=function(){s.nextTick(c)};else if(i){var l=!0,f=document.createTextNode("");new i(c).observe(f,{characterData:!0}),n=function(){f.data=l=!l}}else if(a&&a.resolve){var d=a.resolve();n=function(){d.then(c)}}else n=function(){o.call(r,c)};return function(r){var o={fn:r,next:void 0};e&&(e.next=o),t||(t=o,n()),e=o}}},function(t,e,n){"use strict";var r=n(9);t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},function(t,e,n){"use strict";var r=n(7),o=n(11),i=n(15),s=n(5)("species");t.exports=function(t){var e=r[t];i&&e&&!e[s]&&o.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e,n){"use strict";var r=n(5)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i=[7],s=i[r]();s.next=function(){return{done:n=!0}},i[r]=function(){return s},t(i)}catch(t){}return n}},function(t,e){"use strict";try{var n=new window.CustomEvent("test");if(n.preventDefault(),n.defaultPrevented!==!0)throw new Error("Could not prevent default")}catch(t){var r=function(t,e){var n,r;return e=e||{bubbles:!1,cancelable:!1,detail:void 0},n=document.createEvent("CustomEvent"),n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(t){this.defaultPrevented=!0}},n};r.prototype=window.Event.prototype,window.CustomEvent=r}},function(t,e){"use strict";!function(t){function e(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function n(t){return"string"!=typeof t&&(t=String(t)),t}function r(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return m.iterable&&(e[Symbol.iterator]=function(){return e}),e}function o(t){this.map={},t instanceof o?t.forEach(function(t,e){this.append(e,t)},this):t&&Object.getOwnPropertyNames(t).forEach(function(e){this.append(e,t[e])},this)}function i(t){return t.bodyUsed?Promise.reject(new TypeError("Already read")):void(t.bodyUsed=!0)}function s(t){return new Promise(function(e,n){t.onload=function(){e(t.result)},t.onerror=function(){n(t.error)}})}function a(t){var e=new FileReader,n=s(e);return e.readAsArrayBuffer(t),n}function u(t){var e=new FileReader,n=s(e);return e.readAsText(t),n}function c(t){for(var e=new Uint8Array(t),n=new Array(e.length),r=0;r-1?e:t}function h(t,e){e=e||{};var n=e.body;if("string"==typeof t)this.url=t;else{if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new o(t.headers)),this.method=t.method,this.mode=t.mode,n||null==t._bodyInit||(n=t._bodyInit,t.bodyUsed=!0)}if(this.credentials=e.credentials||this.credentials||"omit",!e.headers&&this.headers||(this.headers=new o(e.headers)),this.method=d(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function p(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var n=t.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(o))}}),e}function v(t){var e=new o;return t.split("\r\n").forEach(function(t){var n=t.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();e.append(r,o)}}),e}function y(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new o(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var m={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(m.arrayBuffer)var g=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],b=function(t){return t&&DataView.prototype.isPrototypeOf(t)},w=ArrayBuffer.isView||function(t){return t&&g.indexOf(Object.prototype.toString.call(t))>-1};o.prototype.append=function(t,r){t=e(t),r=n(r);var o=this.map[t];this.map[t]=o?o+","+r:r},o.prototype.delete=function(t){delete this.map[e(t)]},o.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},o.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},o.prototype.set=function(t,r){this.map[e(t)]=n(r)},o.prototype.forEach=function(t,e){for(var n in this.map)this.map.hasOwnProperty(n)&&t.call(e,this.map[n],n,this)},o.prototype.keys=function(){var t=[];return this.forEach(function(e,n){t.push(n)}),r(t)},o.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},o.prototype.entries=function(){var t=[];return this.forEach(function(e,n){t.push([n,e])}),r(t)},m.iterable&&(o.prototype[Symbol.iterator]=o.prototype.entries);var _=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];h.prototype.clone=function(){return new h(this,{body:this._bodyInit})},f.call(h.prototype),f.call(y.prototype),y.prototype.clone=function(){return new y(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},y.error=function(){var t=new y(null,{status:0,statusText:""});return t.type="error",t};var S=[301,302,303,307,308];y.redirect=function(t,e){if(S.indexOf(e)===-1)throw new RangeError("Invalid status code");return new y(null,{status:e,headers:{location:t}})},t.Headers=o,t.Request=h,t.Response=y,t.fetch=function(t,e){return new Promise(function(n,r){var o=new h(t,e),i=new XMLHttpRequest;i.onload=function(){var t={status:i.status,statusText:i.statusText,headers:v(i.getAllResponseHeaders()||"")};t.url="responseURL"in i?i.responseURL:t.headers.get("X-Request-URL");var e="response"in i?i.response:i.responseText;n(new y(e,t))},i.onerror=function(){r(new TypeError("Network request failed"))},i.ontimeout=function(){r(new TypeError("Network request failed"))},i.open(o.method,o.url,!0),"include"===o.credentials&&(i.withCredentials=!0),"responseType"in i&&m.blob&&(i.responseType="blob"),o.headers.forEach(function(t,e){i.setRequestHeader(e,t)}),i.send("undefined"==typeof o._bodyInit?null:o._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:void 0)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n=0,a=navigator.userAgent.indexOf("Android")>0&&!s,u=/iP(ad|hone|od)/.test(navigator.userAgent)&&!s,c=u&&/OS 4_\d(_\d)?/.test(navigator.userAgent),l=u&&/OS [6-7]_\d/.test(navigator.userAgent),f=navigator.userAgent.indexOf("BB10")>0;i.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(u&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},i.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!a;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},i.prototype.sendClick=function(t,e){var n,r;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),r=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},i.prototype.determineEventType=function(t){return a&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},i.prototype.focus=function(t){var e;u&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},i.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},i.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},i.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],u){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!c){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n},i.prototype.onTouchMove=function(t){return!this.trackingClick||((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0)},i.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},i.prototype.onTouchEnd=function(t){var e,n,r,o,i,s=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,l&&(i=t.changedTouches[0],s=document.elementFromPoint(i.pageX-window.pageXOffset,i.pageY-window.pageYOffset)||s,s.fastClickScrollParent=this.targetElement.fastClickScrollParent),r=s.tagName.toLowerCase(),"label"===r){if(e=this.findControl(s)){if(this.focus(s),a)return!1;s=e}}else if(this.needsFocus(s))return t.timeStamp-n>100||u&&window.top!==window&&"input"===r?(this.targetElement=null,!1):(this.focus(s),this.sendClick(s,t),u&&"select"===r||(this.targetElement=null,t.preventDefault()),!1);return!(!u||c||(o=s.fastClickScrollParent,!o||o.fastClickLastScrollTop===o.scrollTop))||(this.needsClick(s)||(t.preventDefault(),this.sendClick(s,t)),!1)},i.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},i.prototype.onMouse=function(t){return!this.targetElement||(!!t.forwardedTouchEvent||(!t.cancelable||(!(!this.needsClick(this.targetElement)||this.cancelNextClick)||(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1))))},i.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail||(e=this.onMouse(t),e||(this.targetElement=null),e)},i.prototype.destroy=function(){var t=this.layer;a&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},i.notNeeded=function(t){var e,n,r,o;if("undefined"==typeof window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!a)return!0;if(e=document.querySelector("meta[name=viewport]")){if(e.content.indexOf("user-scalable=no")!==-1)return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(f&&(r=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),r[1]>=10&&r[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(e.content.indexOf("user-scalable=no")!==-1)return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction||(o=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],!!(o>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(e.content.indexOf("user-scalable=no")!==-1||document.documentElement.scrollWidth<=window.outerWidth)))||("none"===t.style.touchAction||"manipulation"===t.style.touchAction))},i.attach=function(t,e){return new i(t,e)},"object"===o(n(69))&&n(69)?(r=function(){return i}.call(e,n,e,t),!(void 0!==r&&(t.exports=r))):"undefined"!=typeof t&&t.exports?(t.exports=i.attach,t.exports.FastClick=i):window.FastClick=i}()},function(t,e){(function(e){t.exports=e}).call(e,{})},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(71),i=r(o),s=n(74),a=r(s),u=n(78),c=r(u),l=n(83),f=r(l),d=n(86),h=r(d);e.default={Event:i.default,Nav:a.default,Search:c.default,Sidebar:f.default,Source:h.default},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(72),i=r(o),s=n(73),a=r(s);e.default={Listener:i.default,MatchMedia:a.default},t.exports=e.default},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n0&&(this.els_[e-1].dataset.mdState="blur"),this.index_=e;else for(var n=this.index_;n>=0;n--){if(!(this.anchors_[n].offsetTop-80>t)){this.index_=n;break}n>0&&(this.els_[n-1].dataset.mdState="")}this.offset_=t}}},{key:"reset",value:function(){Array.prototype.forEach.call(this.els_,function(t){t.dataset.mdState=""}),this.index_=0,this.offset_=window.pageYOffset}}]),t}();e.default=o,t.exports=e.default},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;nn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}}return a(t,[{key:"update",value:function(t){var e=this;if("focus"!==t.type||this.index_){if("keyup"===t.type){for(;this.list_.firstChild;)this.list_.removeChild(this.list_.firstChild);var n=this.index_.search(t.target.value);n.forEach(function(t){var n=e.data_[t.ref],o=n.location.split("#"),i=s(o,1),a=i[0];a=a.replace(/^(\/?\.{2})+/g,""),e.list_.appendChild(r.createElement("li",{class:"md-search-result__item"},r.createElement("a",{href:n.location,title:n.title,class:"md-search-result__link","data-md-rel":a===document.location.pathname?"anchor":""},r.createElement("article",{class:"md-search-result__article"},r.createElement("h1",{class:"md-search-result__title"},n.title),r.createElement("p",{class:"md-search-result__teaser"},e.truncate_(n.text,140))))))});var o=this.list_.querySelectorAll("[data-md-rel=anchor]");Array.prototype.forEach.call(o,function(t){t.addEventListener("click",function(e){var n=document.querySelector("[data-md-toggle=search]");n.checked&&(n.checked=!1,n.dispatchEvent(new CustomEvent("change"))),e.preventDefault(),setTimeout(function(){document.location.href=t.href},100)})}),this.meta_.textContent=n.length+" search result"+(1!==n.length?"s":"")}}else!function(){var t=function(t){e.index_=(0,c.default)(function(){this.field("title",{boost:10}),this.field("text"),this.ref("location")}),e.data_=t.reduce(function(t,n){return e.index_.add(n),t[n.location]=n,t},{})};setTimeout(function(){return"function"==typeof e.data_?e.data_().then(t):t(e.data_)},250)}()}}]),t}();e.default=l,t.exports=e.default}).call(e,n(81))},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={createElement:function(t,e){var n=document.createElement(t);e&&Array.prototype.forEach.call(Object.keys(e),function(t){n.setAttribute(t,e[t])});for(var r=function t(e){Array.prototype.forEach.call(e,function(e){"string"==typeof e||"number"==typeof e?n.textContent+=e:Array.isArray(e)?t(e):n.appendChild(e)})},o=arguments.length,i=Array(o>2?o-2:0),s=2;sn.idx?n=n.next:(r+=e.val*n.val,e=e.next,n=n.next);return r},i.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},/*! - * lunr.SortedSet - * Copyright (C) 2016 Oliver Nightingale - */ -i.SortedSet=function(){this.length=0,this.elements=[]},i.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},i.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(i===t)return o;it&&(n=o),r=n-e,o=e+Math.floor(r/2),i=this.elements[o]}return i===t?o:-1},i.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,r=n-e,o=e+Math.floor(r/2),i=this.elements[o];r>1;)it&&(n=o),r=n-e,o=e+Math.floor(r/2),i=this.elements[o];return i>t?o:io-1||r>s-1)break;a[n]!==u[r]?a[n]u[r]&&r++:(e.add(a[n]),n++,r++)}return e},i.SortedSet.prototype.clone=function(){var t=new i.SortedSet;return t.elements=this.toArray(),t.length=t.elements.length,t},i.SortedSet.prototype.union=function(t){var e,n,r;this.length>=t.length?(e=this,n=t):(e=t,n=this),r=e.clone();for(var o=0,i=n.toArray();o0&&(r=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=r},i.Index.prototype.search=function(t){var e=this.pipeline.run(this.tokenizerFn(t)),n=new i.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=e.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];e.forEach(function(t,e,s){var a=1/s.length*this._fields.length*o,u=this,c=this.tokenStore.expand(t).reduce(function(e,r){var o=u.corpusTokens.indexOf(r),s=u.idf(r),c=1,l=new i.SortedSet;if(r!==t){var f=Math.max(3,r.length-t.length);c=1/Math.log(f)}o>-1&&n.insert(o,a*s*c);for(var d=u.tokenStore.get(r),h=Object.keys(d),p=h.length,v=0;v=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")}},{key:"reset",value:function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0}}]),t}();e.default=o,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(87),i=r(o),s=n(91),a=r(s);e.default={Adapter:i.default,Repository:a.default},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var o=n(88),i=r(o);e.default={GitHub:i.default},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n1e4?(t/1e3).toFixed(0)+"k":t>1e3?(t/1e3).toFixed(1)+"k":t}},{key:"hash_",value:function(t){var e=0;if(0===t.length)return e;for(var n=0,r=t.length;n1){if(i=t({path:"/"},r.defaults,i),"number"==typeof i.expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*i.expires),i.expires=a}try{s=JSON.stringify(o),/^[\{\[]/.test(s)&&(o=s)}catch(t){}return o=n.write?n.write(o,e):encodeURIComponent(String(o)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)),e=e.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),e=e.replace(/[\(\)]/g,escape),document.cookie=[e,"=",o,i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}e||(s={});for(var u=document.cookie?document.cookie.split("; "):[],c=/(%[0-9A-Z]{2})+/g,l=0;ln;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/application.js b/site/assets/javascripts/application.js deleted file mode 100644 index 1199f2e1d..000000000 --- a/site/assets/javascripts/application.js +++ /dev/null @@ -1 +0,0 @@ -function pegasus(t,e){return e=new XMLHttpRequest,e.open("GET",t),t=[],e.onreadystatechange=e.then=function(n,o,i,r){if(n&&n.call&&(t=[,n,o]),4==e.readyState&&(i=t[0|e.status/200])){try{r=JSON.parse(e.responseText)}catch(s){r=null}i(r,e)}},e.send(),e}if("document"in self&&("classList"in document.createElement("_")?!function(){"use strict";var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;o>n;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",o=t.Element[n],i=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},s=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return s.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],o=0,i=n.length;i>o;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],d=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",-1!==c(this,t)},u.add=function(){var t,e=arguments,n=0,o=e.length,i=!1;do t=e[n]+"",-1===c(this,t)&&(this.push(t),i=!0);while(++nc;c++)a[s[c]]=i(a[s[c]],a);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),s=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTimen||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,s,a,c,l,u=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTimethis.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,s=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(l=t.changedTouches[0],u=document.elementFromPoint(l.pageX-window.pageXOffset,l.pageY-window.pageYOffset)||u,u.fastClickScrollParent=this.targetElement.fastClickScrollParent),a=u.tagName.toLowerCase(),"label"===a){if(e=this.findControl(u)){if(this.focus(u),n)return!1;u=e}}else if(this.needsFocus(u))return t.timeStamp-s>100||o&&window.top!==window&&"input"===a?(this.targetElement=null,!1):(this.focus(u),this.sendClick(u,t),o&&"select"===a||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(c=u.fastClickScrollParent,c&&c.fastClickLastScrollTop!==c.scrollTop)?!0:(this.needsClick(u)||(t.preventDefault(),this.sendClick(u,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(s&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}(),function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var o=t.Pipeline.registeredFunctions[e];if(!o)throw new Error("Cannot load un-registered function: "+e);n.add(o)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");o+=1,this._stack.splice(o,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var o=this._stack.indexOf(e);if(-1==o)throw new Error("Cannot find existingFn");this._stack.splice(o,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,o=this._stack.length,i=0;n>i;i++){for(var r=t[i],s=0;o>s&&(r=this._stack[s](r,i,t),void 0!==r&&""!==r);s++);void 0!==r&&""!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var o=this.list;if(!o)return this.list=new t.Vector.Node(e,n,o),this.length++;if(en.idx?n=n.next:(o+=e.val*n.val,e=e.next,n=n.next);return o},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(r===t)return i;t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i]}return r===t?i:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,o=n-e,i=e+Math.floor(o/2),r=this.elements[i];o>1;)t>r&&(e=i),r>t&&(n=i),o=n-e,i=e+Math.floor(o/2),r=this.elements[i];return r>t?i:t>r?i+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,o=0,i=0,r=this.length,s=e.length,a=this.elements,c=e.elements;;){if(o>r-1||i>s-1)break;a[o]!==c[i]?a[o]c[i]&&i++:(n.add(a[o]),o++,i++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,o;return this.length>=t.length?(e=this,n=t):(e=t,n=this),o=e.clone(),o.add.apply(o,n.toArray()),o},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var o={},i=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));o[n.name]=r,t.SortedSet.prototype.add.apply(i,r)},this),this.documentStore.set(r,i),t.SortedSet.prototype.add.apply(this.corpusTokens,i.toArray());for(var s=0;s0&&(o=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=o},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),o=new t.Vector,i=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,c=this,l=this.tokenStore.expand(e).reduce(function(n,i){var r=c.corpusTokens.indexOf(i),s=c.idf(i),l=1,u=new t.SortedSet;if(i!==e){var d=Math.max(3,i.length-e.length);l=1/Math.log(d)}r>-1&&o.insert(r,a*s*l);for(var h=c.tokenStore.get(i),f=Object.keys(h),p=f.length,m=0;p>m;m++)u.add(h[f[m]].ref);return n.union(u)},new t.SortedSet);i.push(l)},this);var a=i.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:o.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),o=n.length,i=new t.Vector,r=0;o>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,c=this.idf(s);i.insert(this.corpusTokens.indexOf(s),a*c)}return i},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,o){return n[o]=t.SortedSet.load(e.store[o]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",o="[aeiouy]",i=n+"[^aeiouy]*",r=o+"[aeiou]*",s="^("+i+")?"+r+i,a="^("+i+")?"+r+i+"("+r+")?$",c="^("+i+")?"+r+i+r+i,l="^("+i+")?"+o,u=new RegExp(s),d=new RegExp(c),h=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,S=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+i+o+"[^aeiouwxy]$"),E=/^(.+?[^aeiou])y$/,x=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,L=/^(.+?)e$/,_=/ll$/,A=new RegExp("^"+i+o+"[^aeiouwxy]$"),O=function(n){var o,i,r,s,a,c,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=g,s.test(n)){var O=s.exec(n);s=u,s.test(O[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var O=a.exec(n);o=O[1],a=f,a.test(o)&&(n=o,a=w,c=S,l=k,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=E,s.test(n)){var O=s.exec(n);o=O[1],n=o+"i"}if(s=x,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+t[i])}if(s=b,s.test(n)){var O=s.exec(n);o=O[1],i=O[2],s=u,s.test(o)&&(n=o+e[i])}if(s=T,a=C,s.test(n)){var O=s.exec(n);o=O[1],s=d,s.test(o)&&(n=o)}else if(a.test(n)){var O=a.exec(n);o=O[1]+O[2],a=d,a.test(o)&&(n=o)}if(s=L,s.test(n)){var O=s.exec(n);o=O[1],s=d,a=h,c=A,(s.test(o)||a.test(o)&&!c.test(o))&&(n=o)}return s=_,a=d,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return O}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,o=t.charAt(0),i=t.slice(1);return o in n||(n[o]={docs:{}}),0===i.length?(n[o].docs[e.ref]=e,void(this.length+=1)):this.add(i,e,n[o])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;nt){for(;" "!=this[t]&&--t>0;);return this.substring(0,t)+"…"}return this},HTMLElement.prototype.wrap=function(t){t.length||(t=[t]);for(var e=t.length-1;e>=0;e--){var n=e>0?this.cloneNode(!0):this,o=t[e],i=o.parentNode,r=o.nextSibling;n.appendChild(o),r?i.insertBefore(n,r):i.appendChild(n)}},document.addEventListener("DOMContentLoaded",function(){"use strict";Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}),Modernizr.addTest("standalone",function(){return!!navigator.standalone}),FastClick.attach(document.body);var t=document.getElementById("toggle-search"),e=(document.getElementById("reset-search"),document.querySelector(".drawer")),n=document.querySelectorAll(".anchor"),o=document.querySelector(".search .field"),i=document.querySelector(".query"),r=document.querySelector(".results .meta");Array.prototype.forEach.call(n,function(t){t.querySelector("a").addEventListener("click",function(){document.getElementById("toggle-drawer").checked=!1,document.body.classList.remove("toggle-drawer")})});var s=window.pageYOffset,a=function(){var t=window.pageYOffset+window.innerHeight,n=Math.max(0,window.innerHeight-e.offsetHeight);t>document.body.clientHeight-(96-n)?"absolute"!=e.style.position&&(e.style.position="absolute",e.style.top=null,e.style.bottom=0):e.offsetHeighte.offsetTop+e.offsetHeight?(e.style.position="fixed",e.style.top=null,e.style.bottom="-96px"):window.pageYOffsets?e.style.top&&(e.style.position="absolute",e.style.top=Math.max(0,s)+"px",e.style.bottom=null):e.style.bottom&&(e.style.position="absolute",e.style.top=t-e.offsetHeight+"px",e.style.bottom=null),s=Math.max(0,window.pageYOffset)},c=function(){var t=document.querySelector(".main");window.removeEventListener("scroll",a),matchMedia("only screen and (max-width: 959px)").matches?(e.style.position=null,e.style.top=null,e.style.bottom=null):e.offsetHeight+96o;o++)t1e4?n=(n/1e3).toFixed(0)+"k":n>1e3&&(n=(n/1e3).toFixed(1)+"k");var o=document.querySelector(".repo-stars .count");o.innerHTML=n},function(t,e){console.error(t,e.status)})}),"standalone"in window.navigator&&window.navigator.standalone){var node,remotes=!1;document.addEventListener("click",function(t){for(node=t.target;"A"!==node.nodeName&&"HTML"!==node.nodeName;)node=node.parentNode;"href"in node&&-1!==node.href.indexOf("http")&&(-1!==node.href.indexOf(document.location.host)||remotes)&&(t.preventDefault(),document.location.href=node.href)},!1)} \ No newline at end of file diff --git a/site/assets/javascripts/modernizr-4ab42b99fd.js b/site/assets/javascripts/modernizr-4ab42b99fd.js deleted file mode 100644 index e82c90988..000000000 --- a/site/assets/javascripts/modernizr-4ab42b99fd.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t,n){function r(e,t){return typeof e===t}function i(){var e,t,n,i,o,a,s;for(var l in x)if(x.hasOwnProperty(l)){if(e=[],t=x[l],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;t=9,r=t<533&&e.match(/android/gi);return n||r||s}();E?_.addTest("fontface",!1):z('@font-face {font-family:"font";src:url("https://")}',function(e,n){var s=t.getElementById("smodernizr"),r=s.sheet||s.styleSheet,o=r?r.cssRules&&r.cssRules[0]?r.cssRules[0].cssText:r.cssText||"":"",i=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);_.addTest("fontface",i)});var j="Moz O ms Webkit",k=x._config.usePrefixes?j.split(" "):[];x._cssomPrefixes=k;var N={elem:a("modernizr")};_._q.push(function(){delete N.elem});var A={style:N.elem.style};_._q.unshift(function(){delete A.style});var R=x._config.usePrefixes?j.toLowerCase().split(" "):[];x._domPrefixes=R,x.testAllProps=v,x.testAllProps=y;var q="CSS"in e&&"supports"in e.CSS,L="supportsCSS"in e;_.addTest("supports",q||L),_.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=_._config.usePrefixes;if(e&&(!t||"webkitPerspective"in b.style)){var n,s="#modernizr{width:0;height:0}";_.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",z(s+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),r(),o(S),delete x.addTest,delete x.addAsyncTest;for(var O=0;O<_._q.length;O++)_._q[O]();e.Modernizr=_}(window,document); \ No newline at end of file diff --git a/site/assets/javascripts/modernizr.js b/site/assets/javascripts/modernizr.js deleted file mode 100644 index e82c90988..000000000 --- a/site/assets/javascripts/modernizr.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t,n){function r(e,t){return typeof e===t}function i(){var e,t,n,i,o,a,s;for(var l in x)if(x.hasOwnProperty(l)){if(e=[],t=x[l],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nf;f++)if(h=e[f],g=_.style[h],l(h,"-")&&(h=m(h)),_.style[h]!==n){if(o||r(i,"undefined"))return a(),"pfx"==t?h:!0;try{_.style[h]=i}catch(y){}if(_.style[h]!=g)return a(),"pfx"==t?h:!0}return a(),!1}function g(e,t,n){var i;for(var o in e)if(e[o]in t)return n===!1?e[o]:(i=t[e[o]],r(i,"function")?s(i,n||t):i);return!1}function v(e,t,n,i,o){var a=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+P.join(a+" ")+a).split(" ");return r(t,"string")||r(t,"undefined")?h(s,t,i,o):(s=(e+" "+A.join(a+" ")+a).split(" "),g(s,t,n))}function y(e,t,r){return v(e,n,n,t,r)}var x=[],E={_version:"3.3.1",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){x.push({name:e,fn:t,options:n})},addAsyncTest:function(e){x.push({name:null,fn:e})}},S=function(){};S.prototype=E,S=new S;var b,w=[],C=t.documentElement,T="svg"===C.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),E._l={},E.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),S.hasOwnProperty(e)&&setTimeout(function(){S._trigger(e,S[e])},0)},E._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=C.elements;return"string"==typeof e?e.split(" "):e}function i(e,t){var n=C.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),C.elements=n+" "+e,u(t)}function o(e){var t=w[e[S]];return t||(t={},b++,e[S]=b,w[b]=t),t}function a(e,n,r){if(n||(n=t),g)return n.createElement(e);r||(r=o(n));var i;return i=r.cache[e]?r.cache[e].cloneNode():E.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!i.canHaveChildren||x.test(e)||i.tagUrn?i:r.frag.appendChild(i)}function s(e,n){if(e||(e=t),g)return e.createDocumentFragment();n=n||o(e);for(var i=n.frag.cloneNode(),a=0,s=r(),l=s.length;l>a;a++)i.createElement(s[a]);return i}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return C.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(C,t.frag)}function u(e){e||(e=t);var r=o(e);return!C.shivCSS||h||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),g||l(e,r),e}function c(e){for(var t,n=e.getElementsByTagName("*"),i=n.length,o=RegExp("^(?:"+r().join("|")+")$","i"),a=[];i--;)t=n[i],o.test(t.nodeName)&&a.push(t.applyElement(f(t)));return a}function f(e){for(var t,n=e.attributes,r=n.length,i=e.ownerDocument.createElement(N+":"+e.nodeName);r--;)t=n[r],t.specified&&i.setAttribute(t.nodeName,t.nodeValue);return i.style.cssText=e.style.cssText,i}function d(e){for(var t,n=e.split("{"),i=n.length,o=RegExp("(^|[\\s,>+~])("+r().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),a="$1"+N+"\\:$2";i--;)t=n[i]=n[i].split("}"),t[t.length-1]=t[t.length-1].replace(o,a),n[i]=t.join("}");return n.join("{")}function p(e){for(var t=e.length;t--;)e[t].removeNode()}function m(e){function t(){clearTimeout(a._removeSheetTimer),r&&r.removeNode(!0),r=null}var r,i,a=o(e),s=e.namespaces,l=e.parentWindow;return!_||e.printShived?e:("undefined"==typeof s[N]&&s.add(N),l.attachEvent("onbeforeprint",function(){t();for(var o,a,s,l=e.styleSheets,u=[],f=l.length,p=Array(f);f--;)p[f]=l[f];for(;s=p.pop();)if(!s.disabled&&T.test(s.media)){try{o=s.imports,a=o.length}catch(m){a=0}for(f=0;a>f;f++)p.push(o[f]);try{u.push(s.cssText)}catch(m){}}u=d(u.reverse().join("")),i=c(e),r=n(e,u)}),l.attachEvent("onafterprint",function(){p(i),clearTimeout(a._removeSheetTimer),a._removeSheetTimer=setTimeout(t,500)}),e.printShived=!0,e)}var h,g,v="3.7.3",y=e.html5||{},x=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,E=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,S="_html5shiv",b=0,w={};!function(){try{var e=t.createElement("a");e.innerHTML="",h="hidden"in e,g=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){h=!0,g=!0}}();var C={elements:y.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:v,shivCSS:y.shivCSS!==!1,supportsUnknownElements:g,shivMethods:y.shivMethods!==!1,type:"default",shivDocument:u,createElement:a,createDocumentFragment:s,addElements:i};e.html5=C,u(t);var T=/^$|\b(?:all|print)\b/,N="html5shiv",_=!g&&function(){var n=t.documentElement;return!("undefined"==typeof t.namespaces||"undefined"==typeof t.parentWindow||"undefined"==typeof n.applyElement||"undefined"==typeof n.removeNode||"undefined"==typeof e.attachEvent)}();C.type+=" print",C.shivPrint=m,m(t),"object"==typeof module&&module.exports&&(module.exports=C)}("undefined"!=typeof e?e:this,t);var N={elem:u("modernizr")};S._q.push(function(){delete N.elem});var _={style:N.elem.style};S._q.unshift(function(){delete _.style});var z=(E.testProp=function(e,t,r){return h([e],n,t,r)},function(){function e(e,t){var i;return e?(t&&"string"!=typeof t||(t=u(t||"div")),e="on"+e,i=e in t,!i&&r&&(t.setAttribute||(t=u("div")),t.setAttribute(e,""),i="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),i):!1}var r=!("onblur"in t.documentElement);return e}());E.hasEvent=z,S.addTest("inputsearchevent",z("search"));var k=E.testStyles=f,$=function(){var e=navigator.userAgent,t=e.match(/applewebkit\/([0-9]+)/gi)&&parseFloat(RegExp.$1),n=e.match(/w(eb)?osbrowser/gi),r=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9,i=533>t&&e.match(/android/gi);return n||i||r}();$?S.addTest("fontface",!1):k('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),i=r.sheet||r.styleSheet,o=i?i.cssRules&&i.cssRules[0]?i.cssRules[0].cssText:i.cssText||"":"",a=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);S.addTest("fontface",a)});var j="Moz O ms Webkit",P=E._config.usePrefixes?j.split(" "):[];E._cssomPrefixes=P;var A=E._config.usePrefixes?j.toLowerCase().split(" "):[];E._domPrefixes=A,E.testAllProps=v,E.testAllProps=y;var R="CSS"in e&&"supports"in e.CSS,F="supportsCSS"in e;S.addTest("supports",R||F),S.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=S._config.usePrefixes;if(e&&(!t||"webkitPerspective"in C.style)){var n,r="#modernizr{width:0;height:0}";S.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",k(r+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),S.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),S.addTest("checked",function(){return k("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=u("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),S.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(n){return!1}}),S.addTest("contains",r(String.prototype.contains,"function")),i(),o(w),delete E.addTest,delete E.addAsyncTest;for(var M=0;M #mq-test-1 { width: 42px; }',r.insertBefore(o,i),n=42===a.offsetWidth,r.removeChild(o),{matches:n,media:e}}}(e.document)}(this),function(e){"use strict";function t(){E(!0)}var n={};e.respond=n,n.update=function(){};var r=[],i=function(){var t=!1;try{t=new e.XMLHttpRequest}catch(n){t=new e.ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}(),o=function(e,t){var n=i();n&&(n.open("GET",e,!0),n.onreadystatechange=function(){4!==n.readyState||200!==n.status&&304!==n.status||t(n.responseText)},4!==n.readyState&&n.send(null))};if(n.ajax=o,n.queue=r,n.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},n.mediaQueriesSupported=e.matchMedia&&null!==e.matchMedia("only all")&&e.matchMedia("only all").matches,!n.mediaQueriesSupported){var a,s,l,u=e.document,c=u.documentElement,f=[],d=[],p=[],m={},h=30,g=u.getElementsByTagName("head")[0]||c,v=u.getElementsByTagName("base")[0],y=g.getElementsByTagName("link"),x=function(){var e,t=u.createElement("div"),n=u.body,r=c.style.fontSize,i=n&&n.style.fontSize,o=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",n||(n=o=u.createElement("body"),n.style.background="none"),c.style.fontSize="100%",n.style.fontSize="100%",n.appendChild(t),o&&c.insertBefore(n,c.firstChild),e=t.offsetWidth,o?c.removeChild(n):n.removeChild(t),c.style.fontSize=r,i&&(n.style.fontSize=i),e=l=parseFloat(e)},E=function(t){var n="clientWidth",r=c[n],i="CSS1Compat"===u.compatMode&&r||u.body[n]||r,o={},m=y[y.length-1],v=(new Date).getTime();if(t&&a&&h>v-a)return e.clearTimeout(s),void(s=e.setTimeout(E,h));a=v;for(var S in f)if(f.hasOwnProperty(S)){var b=f[S],w=b.minw,C=b.maxw,T=null===w,N=null===C,_="em";w&&(w=parseFloat(w)*(w.indexOf(_)>-1?l||x():1)),C&&(C=parseFloat(C)*(C.indexOf(_)>-1?l||x():1)),b.hasquery&&(T&&N||!(T||i>=w)||!(N||C>=i))||(o[b.media]||(o[b.media]=[]),o[b.media].push(d[b.rules]))}for(var z in p)p.hasOwnProperty(z)&&p[z]&&p[z].parentNode===g&&g.removeChild(p[z]);p.length=0;for(var k in o)if(o.hasOwnProperty(k)){var $=u.createElement("style"),j=o[k].join("\n");$.type="text/css",$.media=k,g.insertBefore($,m.nextSibling),$.styleSheet?$.styleSheet.cssText=j:$.appendChild(u.createTextNode(j)),p.push($)}},S=function(e,t,r){var i=e.replace(n.regex.keyframes,"").match(n.regex.media),o=i&&i.length||0;t=t.substring(0,t.lastIndexOf("/"));var a=function(e){return e.replace(n.regex.urls,"$1"+t+"$2$3")},s=!o&&r;t.length&&(t+="/"),s&&(o=1);for(var l=0;o>l;l++){var u,c,p,m;s?(u=r,d.push(a(e))):(u=i[l].match(n.regex.findStyles)&&RegExp.$1,d.push(RegExp.$2&&a(RegExp.$2))),p=u.split(","),m=p.length;for(var h=0;m>h;h++)c=p[h],f.push({media:c.split("(")[0].match(n.regex.only)&&RegExp.$2||"all",rules:d.length-1,hasquery:c.indexOf("(")>-1,minw:c.match(n.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:c.match(n.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}E()},b=function(){if(r.length){var t=r.shift();o(t.href,function(n){S(n,t.href,t.media),m[t.href]=!0,e.setTimeout(function(){b()},0)})}},w=function(){for(var t=0;tcode{margin:inherit;padding:inherit;border-radius:none;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{margin:1em 0;padding:1rem 1.2rem;border-radius:.2rem;line-height:1.4;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset pre::-webkit-scrollbar{width:.4rem;height:.4rem}.md-typeset pre::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset pre>code{margin:0;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:none;box-decoration-break:none}.md-typeset kbd{padding:0 .29412em;border:.1rem solid #c9c9c9;border-radius:.2rem;border-bottom-color:#bcbcbc;background-color:#fcfcfc;color:#555;font-size:85%;box-shadow:0 .1rem 0 #b0b0b0;word-break:break-word}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.2rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.1rem dotted rgba(0,0,0,.54);cursor:help}.md-typeset small{opacity:.75}.md-typeset sub,.md-typeset sup{margin-left:.07812em}.md-typeset blockquote{padding-left:1.2rem;border-left:.4rem solid rgba(0,0,0,.26);color:rgba(0,0,0,.54)}.md-typeset ul{list-style-type:disc}.md-typeset ol,.md-typeset ul{margin-left:.625em;padding:0}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em;margin-left:1.25em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin:.5em 0 .5em .625em}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);margin:2em 0;border-radius:.2rem;font-size:1.28rem;overflow:hidden}.no-js .md-typeset table:not([class]){display:inline-block;max-width:100%;margin:.8em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}.md-typeset table:not([class]) th{min-width:10rem;padding:1.2rem 1.6rem;background-color:rgba(0,0,0,.54);color:#fff;vertical-align:top}.md-typeset table:not([class]) td{padding:1.2rem 1.6rem;border-top:.1rem solid rgba(0,0,0,.07);vertical-align:top}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset .md-typeset__table{margin:1.6em -1.6rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table table{display:inline-block;margin:0 1.6rem}html{font-size:62.5%}body,html{height:100%}body{position:relative}hr{display:block;height:.1rem;padding:0;border:0}.md-svg{display:none}.md-grid{max-width:122rem;margin-right:auto;margin-left:auto}.md-container,.md-main{overflow:auto}.md-container{display:table;width:100%;height:100%;table-layout:fixed}.md-main{display:table-row;height:100%}.md-main__inner{margin-top:5.6rem;padding-top:3rem;overflow:auto}.csscalc .md-main__inner{min-height:calc(100% - 2.6rem)}@-moz-document url-prefix(){.csscalc .md-main__inner{min-height:calc(100% - 5.6rem)}}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;-webkit-transition:width 0s .25s,height 0s .25s,opacity .25s;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);opacity:0;z-index:2}.md-flex{display:table}.md-flex__cell{display:table-cell;position:relative;vertical-align:top}.md-flex__cell--shrink{width:0}.md-flex__cell--stretch{display:table;width:100%;table-layout:fixed}.md-flex__ellipsis{display:table-cell;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@page{margin:25mm}.md-content__inner{margin:2.4rem 1.6rem}.md-content__edit{float:right}.md-header{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:fixed;top:0;right:0;left:0;height:5.6rem;-webkit-transition:background-color .25s;transition:background-color .25s;background-color:#3f51b5;color:#fff;z-index:1}.md-header-nav{padding:.4rem}.md-header-nav__button{position:relative;-webkit-transition:opacity .25s;transition:opacity .25s;z-index:1}.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo img{display:block}.no-js .md-header-nav__button.md-icon--search{display:none}.md-header-nav__title{padding:0 2rem;font-size:1.8rem;line-height:4.8rem}.md-header-nav__parent{color:hsla(0,0%,100%,.7)}.md-header-nav__parent:after{display:inline;color:hsla(0,0%,100%,.3);content:"/"}.md-header-nav__source{display:none}.md-footer-nav{background-color:rgba(0,0,0,.87);color:#fff}.md-footer-nav__inner{padding:.4rem;overflow:auto}.md-footer-nav__link{padding-top:2.8rem;padding-bottom:.8rem;-webkit-transition:opacity .25s;transition:opacity .25s}.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}.md-footer-nav__link--next{width:75%;float:right;text-align:right}.md-footer-nav__button{-webkit-transition:background .25s;transition:background .25s}.md-footer-nav__title{position:relative;padding:0 2rem;font-size:1.8rem;line-height:4.8rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-2rem;padding:0 2rem;color:hsla(0,0%,100%,.7);font-size:1.5rem}.md-footer-meta{background:rgba(0,0,0,.895)}.md-footer-meta__inner{padding:.4rem;overflow:auto}html .md-footer-meta.md-typeset a{color:hsla(0,0%,100%,.7)}.md-footer-copyright{margin:0 1.2rem;padding:.8rem 0;color:hsla(0,0%,100%,.3);font-size:1.28rem}.md-footer-copyright__highlight{color:hsla(0,0%,100%,.7)}.md-footer-social{margin:0 .8rem;padding:.4rem 0 1.2rem}.md-footer-social__link{display:inline-block;width:3.2rem;height:3.2rem;border:.1rem solid hsla(0,0%,100%,.12);border-radius:100%;color:hsla(0,0%,100%,.7);font-size:1.6rem;text-align:center}.md-footer-social__link:before{line-height:1.9}.md-nav{font-size:1.28rem;line-height:1.3}.md-nav--secondary{-webkit-transition:border-left .25s;transition:border-left .25s;border-left:.4rem solid #3f51b5}.md-nav__title{display:block;padding:1.2rem 1.2rem 0;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title:before{display:none;content:"arrow_back"}.md-nav__title .md-nav__button{display:none}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:.625em 1.2rem 0}.md-nav__item:last-child{padding-bottom:1.2rem}.md-nav__item .md-nav__item{padding-right:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__button img{width:100%;height:auto}.md-nav__link{display:block;-webkit-transition:color .125s;transition:color .125s;text-overflow:ellipsis;cursor:pointer;overflow:hidden}.md-nav__item--nested>.md-nav__link:after{content:"keyboard_arrow_down"}html .md-nav__link[for=toc],html .md-nav__link[for=toc]+.md-nav__link:after,html .md-nav__link[for=toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:rgba(0,0,0,.54)}.md-nav__link--active,.md-nav__link:active{color:#3f51b5}.md-nav__link:hover{color:#536dfe}.md-nav__source,.no-js .md-search{display:none}.md-search__overlay{display:none;pointer-events:none}.md-search__inner{width:100%}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 1.6rem 0 7.2rem;text-overflow:ellipsis;z-index:1}.md-search__input+.md-search__icon,.md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}.md-search__input+.md-search__icon,.md-search__input::-moz-placeholder{color:rgba(0,0,0,.54)}.md-search__input+.md-search__icon,.md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}.md-search__input+.md-search__icon,.md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;top:.8rem;left:1.2rem;-webkit-transition:color .25s;transition:color .25s;font-size:2.4rem;cursor:pointer;z-index:1}.md-search__icon:before{content:"search"}.md-search__output{position:absolute;width:100%;border-radius:0 0 .2rem .2rem;overflow:hidden}.md-search__scrollwrap{height:100%;background:-webkit-linear-gradient(top,#fff 10%,hsla(0,0%,100%,0)),-webkit-linear-gradient(top,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background:linear-gradient(180deg,#fff 10%,hsla(0,0%,100%,0)),linear-gradient(180deg,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background-attachment:local,scroll;background-color:#fff;background-repeat:no-repeat;background-size:100% 2rem,100% 1rem;box-shadow:inset 0 .1rem 0 rgba(0,0,0,.07);overflow-y:auto;-webkit-overflow-scrolling:touch}.md-search-result__meta{padding:0 1.6rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-size:1.28rem;line-height:4rem}.md-search-result__list{margin:0;padding:0;border-top:.1rem solid rgba(0,0,0,.07);list-style:none}.md-search-result__item{box-shadow:0 -.1rem 0 rgba(0,0,0,.07)}.md-search-result__link{display:block;padding:0 1.6rem;-webkit-transition:background .25s;transition:background .25s;overflow:auto}.md-search-result__link:hover{background-color:rgba(83,109,254,.1)}.md-search-result__article{margin:1em 0}.md-search-result__title{margin-top:.5em;margin-bottom:0;color:rgba(0,0,0,.87);font-size:1.6rem;font-weight:400;line-height:1.4}.md-search-result__teaser{margin:.5em 0;color:rgba(0,0,0,.54);font-size:1.28rem;line-height:1.4;word-break:break-word}.md-sidebar{position:relative;width:24.2rem;float:left;overflow:visible}.md-sidebar[data-md-state=lock]{position:fixed;top:5.6rem;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{margin:2.4rem .4rem;overflow-y:auto}.js .md-sidebar__scrollwrap{position:absolute;top:0;right:0;bottom:0;left:0}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.4rem;height:.4rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}@-webkit-keyframes a{0%{height:0}to{height:1.3rem}}@keyframes a{0%{height:0}to{height:1.3rem}}@-webkit-keyframes b{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes b{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.md-source{display:block;-webkit-transition:opacity .25s;transition:opacity .25s;font-size:1.3rem;line-height:1.2;white-space:nowrap}.md-source:hover{opacity:.7}.md-source:after,.md-source__icon{display:inline-block;height:4.8rem;content:"";vertical-align:middle}.md-source__icon{width:4.8rem}.md-source__icon svg{margin-top:1.2rem;margin-left:1.2rem}.md-source__icon+.md-source__repository{margin-left:-4.4rem;padding-left:4rem}.md-source__repository{display:inline-block;max-width:100%;margin-left:1.2rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:1.1rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:a .25s ease-in;animation:a .25s ease-in}.md-source__fact{float:left}[data-md-state=done] .md-source__fact{-webkit-animation:b .4s ease-out;animation:b .4s ease-out}.md-source__fact:before{margin:0 .2rem;content:"\00B7"}.md-source__fact:first-child:before{display:none}.admonition{position:relative;margin:1.5625em 0;padding:.8rem 1.2rem;border-left:3.2rem solid rgba(68,138,255,.4);border-radius:.2rem;background-color:rgba(68,138,255,.15);font-size:1.28rem}.admonition:before{position:absolute;left:-2.6rem;color:#fff;font-size:2rem;content:"edit";vertical-align:-.25em}.admonition :first-child{margin-top:0}.admonition :last-child{margin-bottom:0}.admonition.summary,.admonition.tldr{border-color:rgba(0,176,255,.4);background-color:rgba(0,176,255,.15)}.admonition.summary:before,.admonition.tldr:before{content:"subject"}.admonition.hint,.admonition.important,.admonition.tip{border-color:rgba(0,191,165,.4);background-color:rgba(0,191,165,.15)}.admonition.hint:before,.admonition.important:before,.admonition.tip:before{content:"whatshot"}.admonition.check,.admonition.done,.admonition.success{border-color:rgba(0,230,118,.4);background-color:rgba(0,230,118,.15)}.admonition.check:before,.admonition.done:before,.admonition.success:before{content:"done"}.admonition.attention,.admonition.caution,.admonition.warning{border-color:rgba(255,145,0,.4);background-color:rgba(255,145,0,.15)}.admonition.attention:before,.admonition.caution:before,.admonition.warning:before{content:"warning"}.admonition.fail,.admonition.failure,.admonition.missing{border-color:rgba(255,82,82,.4);background-color:rgba(255,82,82,.15)}.admonition.fail:before,.admonition.failure:before,.admonition.missing:before{content:"clear"}.admonition.danger,.admonition.error{border-color:rgba(255,23,68,.4);background-color:rgba(255,23,68,.15)}.admonition.danger:before,.admonition.error:before{content:"flash_on"}.admonition.bug{border-color:rgba(245,0,87,.4);background-color:rgba(245,0,87,.15)}.admonition.bug:before{content:"bug_report"}.admonition-title{font-weight:700}html .admonition-title{margin-bottom:0}html .admonition-title+*{margin-top:0}.codehilite .o,.codehilite .ow{color:inherit}.codehilite .ge{color:#000}.codehilite .gr{color:#a00}.codehilite .gh{color:#999}.codehilite .go{color:#888}.codehilite .gp{color:#555}.codehilite .gs{color:inherit}.codehilite .gu{color:#aaa}.codehilite .gt{color:#a00}.codehilite .gd{background-color:#fdd}.codehilite .gi{background-color:#dfd}.codehilite .k{color:#3b78e7}.codehilite .kc{color:#a71d5d}.codehilite .kd,.codehilite .kn{color:#3b78e7}.codehilite .kp{color:#a71d5d}.codehilite .kr,.codehilite .kt{color:#3e61a2}.codehilite .c,.codehilite .cm{color:#999}.codehilite .cp{color:#666}.codehilite .c1,.codehilite .ch,.codehilite .cs{color:#999}.codehilite .na,.codehilite .nb{color:#c2185b}.codehilite .bp{color:#3e61a2}.codehilite .nc{color:#c2185b}.codehilite .no{color:#3e61a2}.codehilite .nd,.codehilite .ni{color:#666}.codehilite .ne,.codehilite .nf{color:#c2185b}.codehilite .nl{color:#3b5179}.codehilite .nn{color:#ec407a}.codehilite .nt{color:#3b78e7}.codehilite .nv,.codehilite .vc,.codehilite .vg,.codehilite .vi{color:#3e61a2}.codehilite .nx{color:#ec407a}.codehilite .il,.codehilite .m,.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo{color:#e74c3c}.codehilite .s,.codehilite .sb,.codehilite .sc{color:#0d904f}.codehilite .sd{color:#999}.codehilite .s2{color:#0d904f}.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sx{color:#183691}.codehilite .sr{color:#009926}.codehilite .s1,.codehilite .ss{color:#0d904f}.codehilite .err{color:#a61717}.codehilite .w{color:transparent}.codehilite .hll{display:block;margin:0 -1.2rem;padding:0 1.2rem;background-color:rgba(255,235,59,.5)}.md-typeset .codehilite{margin:1em 0;padding:1rem 1.2rem .8rem;border-radius:.2rem;background-color:hsla(0,0%,93%,.5);color:#37474f;line-height:1.4;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .codehilite::-webkit-scrollbar{width:.4rem;height:.4rem}.md-typeset .codehilite::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset .codehilite::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset .codehilite pre{display:inline-block;min-width:100%;margin:0;padding:0;background-color:transparent;overflow:visible;vertical-align:top}.md-typeset .codehilitetable{display:block;margin:1em 0;border-radius:.2em;font-size:1.6rem;overflow:hidden}.md-typeset .codehilitetable tbody,.md-typeset .codehilitetable td{display:block;padding:0}.md-typeset .codehilitetable tr{display:-webkit-box;display:-ms-flexbox;display:flex}.md-typeset .codehilitetable .codehilite,.md-typeset .codehilitetable .linenodiv{margin:0;border-radius:0}.md-typeset .codehilitetable .linenodiv{padding:1rem 1.2rem .8rem}.md-typeset .codehilitetable .linenodiv,.md-typeset .codehilitetable .linenodiv>pre{height:100%}.md-typeset .codehilitetable .linenos{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.26);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset .codehilitetable .linenos pre{margin:0;padding:0;background-color:transparent;color:inherit;text-align:right}.md-typeset .codehilitetable .code{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.md-typeset>.codehilitetable{box-shadow:none}.md-typeset .footnote{color:rgba(0,0,0,.54);font-size:1.28rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{-webkit-transition:color .25s;transition:color .25s}.md-typeset .footnote li:before{display:block;height:0}.md-typeset .footnote li:target{color:rgba(0,0,0,.87)}.md-typeset .footnote li:target:before{margin-top:-9rem;padding-top:9rem;pointer-events:none}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:#536dfe}.md-typeset .footnote-backref{display:inline-block;-webkit-transform:translateX(.5rem);transform:translateX(.5rem);-webkit-transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s,-webkit-transform .25s .125s;color:rgba(0,0,0,.26);font-size:0;opacity:0;vertical-align:text-bottom}.md-typeset .footnote-backref:before{font-size:1.6rem;content:"keyboard_return"}.md-typeset .headerlink{display:inline-block;margin-left:1rem;-webkit-transform:translateY(.5rem);transform:translateY(.5rem);-webkit-transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s,-webkit-transform .25s .25s;opacity:0}html body .md-typeset .headerlink{color:rgba(0,0,0,.26)}.md-typeset [id]:before{display:inline-block;content:""}.md-typeset [id]:target:before{margin-top:-9.8rem;padding-top:9.8rem}.md-typeset [id] .headerlink:focus,.md-typeset [id]:hover .headerlink,.md-typeset [id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset [id] .headerlink:focus,.md-typeset [id]:hover .headerlink:hover,.md-typeset [id]:target .headerlink{color:#536dfe}.md-typeset h1[id] .headerlink{display:none}.md-typeset h2[id]:before{display:block;margin-top:-.2rem;padding-top:.2rem}.md-typeset h2[id]:target:before{margin-top:-8.2rem;padding-top:8.2rem}.md-typeset h3[id]:before{display:block;margin-top:-.4rem;padding-top:.4rem}.md-typeset h3[id]:target:before{margin-top:-8.4rem;padding-top:8.4rem}.md-typeset h4[id]:before{display:block;margin-top:-.6rem;padding-top:.6rem}.md-typeset h4[id]:target:before{margin-top:-8.6rem;padding-top:8.6rem}.md-typeset h5[id]:before{display:block;margin-top:-1rem;padding-top:1rem}.md-typeset h5[id]:target:before{margin-top:-9rem;padding-top:9rem}.md-typeset h6[id]:before{display:block;margin-top:-1rem;padding-top:1rem}.md-typeset h6[id]:target:before{margin-top:-9rem;padding-top:9rem}.md-typeset .MJXc-display{margin:.75em 0;padding:.25em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset .comment.critic,.md-typeset del.critic,.md-typeset ins.critic{margin:0 .25em;padding:.0625em 0;border-radius:.2rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-.25em 0 0 #dfd}.md-typeset .critic.comment{background-color:hsla(0,0%,93%,.5);color:#37474f;box-shadow:.25em 0 0 hsla(0,0%,93%,.5),-.25em 0 0 hsla(0,0%,93%,.5)}.md-typeset .critic.comment:before{padding-right:.125em;color:rgba(0,0,0,.26);content:"chat";vertical-align:-.125em}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:1.6rem;padding-left:1.6rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset .emojione{width:2rem;vertical-align:text-top}.md-typeset code.codehilite{margin:0 .29412em;padding:.07353em 0}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}.md-typeset .task-list-control .task-list-indicator:before{position:absolute;top:.05em;left:-1.25em;color:rgba(0,0,0,.26);font-size:1.5em;content:"check_box_outline_blank";vertical-align:-.25em}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator:before{content:"check_box"}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a:after{color:rgba(0,0,0,.54);content:" [" attr(href) "]"}.md-typeset code{box-shadow:none;-webkit-box-decoration-break:initial;box-decoration-break:slice}.md-content__edit,.md-footer,.md-header,.md-sidebar,.md-typeset .headerlink{display:none}}@media only screen and (max-width:44.9375em){.md-typeset pre{margin:1em -1.6rem;padding:1rem 1.6rem;border-radius:0}.codehilite .hll{margin:0 -1.6rem;padding:0 1.6rem}.md-typeset>.codehilite{padding:1rem 1.6rem .8rem}.md-typeset>.codehilite,.md-typeset>.codehilitetable{margin:1em -1.6rem;border-radius:0}.md-typeset>.codehilitetable .codehilite,.md-typeset>.codehilitetable .linenodiv{padding:1rem 1.6rem}.md-typeset>p>.MJXc-display{margin:.75em -1.6rem;padding:.25em 1.6rem}}@media only screen and (min-width:100em){html{font-size:68.75%}}@media only screen and (min-width:125em){html{font-size:75%}}@media only screen and (max-width:59.9375em){body[data-md-state=lock]{overflow:hidden}.ios body[data-md-state=lock] .md-container{display:none}.md-content__edit{margin-right:-.8rem}.md-nav--secondary{border-left:0}html .md-nav__link[for=toc]{display:block;padding-right:4.8rem}html .md-nav__link[for=toc]:after{color:inherit;content:"toc"}html .md-nav__link[for=toc]+.md-nav__link{display:none}html .md-nav__link[for=toc]~.md-nav{display:-webkit-box;display:-ms-flexbox;display:flex}.md-nav__source{display:block;padding:.4rem;background-color:rgba(50,64,144,.9675);color:#fff}.md-search__overlay{display:block;position:absolute;top:.4rem;left:.4rem;width:4rem;height:4rem;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:transform .3s .1s,opacity .2s .2s;transition:transform .3s .1s,opacity .2s .2s,-webkit-transform .3s .1s;border-radius:2rem;background-color:#fff;opacity:0;overflow:hidden;z-index:1}[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transition:opacity .1s,-webkit-transform .4s;transition:opacity .1s,-webkit-transform .4s;transition:transform .4s,opacity .1s;transition:transform .4s,opacity .1s,-webkit-transform .4s;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;height:100%;-webkit-transform:translateX(5%);transform:translateX(5%);-webkit-transition:left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;transition:left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;transition:left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;opacity:1}.md-search__input{width:100%;height:5.6rem;font-size:1.8rem}.md-search__icon{top:1.6rem;left:1.6rem}.md-search__icon:before{content:"arrow_back"}.md-search__output{top:5.6rem;bottom:0}}@media only screen and (max-width:76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;-webkit-transition:width 0s,height 0s,opacity .25s;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-header-nav__button.md-icon--home,.md-header-nav__button.md-logo{display:none}.md-nav--primary,.md-nav--primary .md-nav{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;top:0;right:0;left:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;z-index:1}.md-nav--primary{background-color:#fff}.md-nav--primary .md-nav__toggle~.md-nav{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.4);background-color:#fff}html .md-nav--primary .md-nav__title{position:relative;height:11.2rem;padding:6rem 1.6rem .4rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-weight:400;line-height:4.8rem;white-space:nowrap;cursor:pointer}html .md-nav--primary .md-nav__title:before{display:block;position:absolute;top:.4rem;left:.4rem;width:4rem;height:4rem;color:rgba(0,0,0,.54)}html .md-nav--primary .md-nav__title~.md-nav__list{background:-webkit-linear-gradient(top,#fff 10%,hsla(0,0%,100%,0)),-webkit-linear-gradient(top,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background:linear-gradient(180deg,#fff 10%,hsla(0,0%,100%,0)),linear-gradient(180deg,rgba(0,0,0,.26),rgba(0,0,0,.07) 35%,transparent 60%);background-attachment:local,scroll;background-color:#fff;background-repeat:no-repeat;background-size:100% 2rem,100% 1rem;box-shadow:inset 0 .1rem 0 rgba(0,0,0,.07)}html .md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}html .md-nav--primary .md-nav__title--site{position:relative;background-color:#3f51b5;color:#fff}html .md-nav--primary .md-nav__title--site .md-nav__button{display:block;position:absolute;top:.4rem;left:.4rem;width:6.4rem;height:6.4rem;font-size:4.8rem}html .md-nav--primary .md-nav__title--site:before{display:none}.md-nav--primary .md-nav__list{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.md-nav--primary .md-nav__item{padding:0;border-top:.1rem solid rgba(0,0,0,.07)}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:4.8rem}.md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"keyboard_arrow_right"}.md-nav--primary .md-nav__link{position:relative;padding:1.6rem}.md-nav--primary .md-nav__link:after{position:absolute;top:50%;right:1.2rem;margin-top:-1.2rem;color:rgba(0,0,0,.54);font-size:2.4rem}.md-nav--primary .md-nav__link:hover:after{color:inherit}.md-nav--primary .md-nav--secondary .md-nav{position:static}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:2.8rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:4rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:5.2rem}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:6.4rem}.md-nav__toggle~.md-nav{display:none}.csstransforms3d .md-nav__toggle~.md-nav{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s;transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);opacity:0}.csstransforms3d .md-nav__toggle~.md-nav,.md-nav__toggle:checked~.md-nav{display:-webkit-box;display:-ms-flexbox;display:flex}.csstransforms3d .md-nav__toggle:checked~.md-nav{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1}.md-nav .md-nav__item,.md-nav .md-nav__title{font-size:1.6rem;line-height:1.5}.md-sidebar--primary{position:fixed;top:0;left:-24.2rem;width:24.2rem;height:100%;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);background-color:#fff;z-index:2}.no-csstransforms3d .md-sidebar--primary{display:none}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);-webkit-transform:translateX(24.2rem);transform:translateX(24.2rem)}.no-csstransforms3d [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{display:block}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden;margin:0}}@media only screen and (min-width:60em){.md-content{margin-right:24.2rem}.md-header-nav__button.md-icon--search{display:none}.md-header-nav__source{display:block;width:23rem;max-width:23rem;padding-right:1.2rem}.md-search{margin-right:2.8rem;padding:.4rem}.md-search__inner{display:table;position:relative;clear:both}.md-search__form{width:23rem;float:right;-webkit-transition:width .25s cubic-bezier(.1,.7,.1,1);transition:width .25s cubic-bezier(.1,.7,.1,1);border-radius:.2rem}.md-search__input{width:100%;height:4rem;padding-left:4.8rem;-webkit-transition:background-color .25s,color .25s;transition:background-color .25s,color .25s;border-radius:.2rem;background-color:rgba(0,0,0,.26);color:#fff;font-size:1.6rem}.md-search__input+.md-search__icon,.md-search__input::-webkit-input-placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input+.md-search__icon,.md-search__input::-moz-placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input+.md-search__icon,.md-search__input:-ms-input-placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input+.md-search__icon,.md-search__input::placeholder{-webkit-transition:color .25s;transition:color .25s;color:#fff}.md-search__input:hover{background-color:hsla(0,0%,100%,.12)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.2rem .2rem 0 0;background-color:#fff;color:rgba(0,0,0,.87);text-overflow:none}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);top:4rem;-webkit-transition:opacity .4s;transition:opacity .4s;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.4rem;height:.4rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-search-result__link,.md-search-result__meta{padding-left:4.8rem}.md-sidebar--secondary{display:block;float:right}.md-sidebar--secondary[data-md-state=lock]{margin-left:100%;-webkit-transform:translate(-100%);transform:translate(-100%)}}@media only screen and (min-width:76.25em){.md-content{margin-left:24.2rem;overflow:auto}.md-content__inner{margin:2.4rem}.md-content__inner :last-child{margin-bottom:0}.md-header-nav__button.md-icon--menu{display:none}.md-nav[data-md-state=animate]{-webkit-transition:max-height .25s cubic-bezier(.86,0,.07,1);transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav__toggle~.md-nav{max-height:0;overflow:hidden}.md-nav[data-md-state=expand],.md-nav__toggle:checked~.md-nav{max-height:100%}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--nested>.md-nav__link:after{display:inline-block;-webkit-transform-origin:.45em .45em;transform-origin:.45em .45em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;vertical-align:-.125em}.js .md-nav__item--nested>.md-nav__link:after{-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link:after{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__form{width:68.8rem}.md-sidebar__inner{border-right:.1rem solid rgba(0,0,0,.07)}}@media only screen and (max-width:29.9375em){.md-footer-nav__link--prev .md-footer-nav__title,.md-header-nav__parent{display:none}[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(45);transform:scale(45)}}@media only screen and (min-width:30em){.md-footer-nav__link{width:50%}}@media only screen and (min-width:45em){.md-footer-copyright{max-width:75%;float:left}.md-footer-social{padding:1.2rem 0;float:right}}@media only screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(60);transform:scale(60)}}@media only screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(75);transform:scale(75)}}@media only screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__form{width:46.8rem}}@media only screen and (min-width:60em) and (min-width:76.25em){.md-sidebar--secondary[data-md-state=lock]{margin-left:122rem}} \ No newline at end of file diff --git a/site/assets/stylesheets/application-a422ff04cc.css b/site/assets/stylesheets/application-a422ff04cc.css deleted file mode 100644 index 965bbb3c8..000000000 --- a/site/assets/stylesheets/application-a422ff04cc.css +++ /dev/null @@ -1 +0,0 @@ -html{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}*,:after,:before{box-sizing:inherit;-moz-box-sizing:inherit;-webkit-box-sizing:inherit}html{font-size:62.5%;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0}main{display:block}ul{list-style:none}table{border-collapse:collapse;border-spacing:0}td{text-align:left;font-weight:400;vertical-align:middle}button{outline:0;padding:0;background:transparent;border:none;font-size:inherit}input{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;outline:none;border:none}a{text-decoration:none;color:inherit}a,button,input,label{-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-tap-highlight-color:transparent}h1,h2,h3,h4,h5,h6{font-weight:inherit}pre{background:rgba(0,0,0,.05)}pre,pre code{color:rgba(0,0,0,.87)}.c,.c1,.cm,.o{color:rgba(0,0,0,.54)}.k,.kn{color:#a71d5d}.kd,.kt{color:#0086b3}.n.f,.nf{color:#795da3}.nx{color:#0086b3}.s,.s1{color:#183691}.bp,.mi{color:#9575cd}.icon{font-family:Icon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-search:before{content:"\e600"}.icon-back:before{content:"\e601"}.icon-link:before{content:"\e602"}.icon-close:before{content:"\e603"}.icon-menu:before{content:"\e604"}.icon-forward:before{content:"\e605"}.icon-twitter:before{content:"\e606"}.icon-github:before{content:"\e607"}.icon-download:before{content:"\e608"}.icon-star:before{content:"\e609"}.icon-warning:before{content:"\e610"}.icon-note:before{content:"\e611"}a{-webkit-transition:color .25s;transition:color .25s}.overlay{-webkit-transition:opacity .25s,width 0s .25s,height 0s .25s;transition:opacity .25s,width 0s .25s,height 0s .25s}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{-webkit-transition:opacity .25s,width 0s,height 0s;transition:opacity .25s,width 0s,height 0s}.js .header{-webkit-transition:background .6s,color .6s;transition:background .6s,color .6s}.js .header:before{-webkit-transition:background .6s;transition:background .6s}.button .icon{-webkit-transition:background .25s;transition:background .25s}body{color:rgba(0,0,0,.87)}@supports (-webkit-appearance:none){body{background:#e84e40}}.ios body{background:#fff}hr{border:0;border-top:1px solid rgba(0,0,0,.12)}.toggle-button{cursor:pointer;color:inherit}.backdrop,.backdrop-paper:after{background:#fff}.overlay{background:rgba(0,0,0,.54);opacity:0}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{opacity:1}.header{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.ios.standalone .header:before{background:rgba(0,0,0,.12)}.bar .path{color:hsla(0,0%,100%,.7)}.button .icon{border-radius:100%}.button .icon:active{background:hsla(0,0%,100%,.12)}html{height:100%}body{position:relative;min-height:100%}hr{display:block;height:1px;padding:0;margin:0}.locked{height:100%;overflow:hidden}.scrollable{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.scrollable .wrapper{height:100%}.ios .scrollable .wrapper{margin-bottom:2px}.toggle{display:none}.toggle-button{display:block}.backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.backdrop-paper{max-width:1200px;height:100%;margin-left:auto;margin-right:auto}.backdrop-paper:after{content:" ";display:block;height:100%;margin-left:262px}.overlay{width:0;height:0;z-index:3}.header,.overlay{position:fixed;top:0}.header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;left:0;z-index:2;height:56px;padding:4px;overflow:hidden}.ios.standalone .header{position:absolute}.bar{display:table;max-width:1184px;margin-left:auto;margin-right:auto}.bar a{display:block}.no-js .bar .button-search{display:none}.bar .path .icon:before{vertical-align:-1.5px}.button{display:table-cell;vertical-align:top;width:1%}.button button{margin:0;padding:0}.button button:active:before{position:relative;top:0;left:0}.button .icon{display:inline-block;font-size:24px;padding:8px;margin:4px}.stretch{display:table;table-layout:fixed;width:100%}.header .stretch{padding:0 20px}.stretch .title{display:table-cell;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.header .stretch .title{font-size:18px;padding:13px 0}.main{max-width:1200px;margin-left:auto;margin-right:auto}body,input{font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.no-fontface body,.no-fontface input,body,input{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.no-fontface code,.no-fontface kbd,.no-fontface pre,code,kbd,pre{font-family:Courier New,Courier,monospace}#toggle-drawer:checked~.main .drawer,.toggle-drawer .drawer{-webkit-transform:translateZ(0);transform:translateZ(0)}.no-csstransforms3d #toggle-drawer:checked~.main .drawer,.no-csstransforms3d .toggle-drawer .drawer{display:block}.project{-webkit-transition:none;transition:none}.project .logo img{-webkit-transition:box-shadow .4s;transition:box-shadow .4s}.repo a{-webkit-transition:box-shadow .4s,opacity .4s;transition:box-shadow .4s,opacity .4s}.drawer .toc a.current,.drawer .toc a:focus,.drawer .toc a:hover{color:#e84e40}.drawer .anchor a{border-left:2px solid #e84e40}.drawer .section{color:rgba(0,0,0,.54)}.ios.standalone .project:before{background:rgba(0,0,0,.12)}.project .logo img{background:#fff;border-radius:100%}.project:focus .logo img,.project:hover .logo img{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05)}.repo a{background:#00bfa5;color:#fff;border-radius:3px}.repo a:focus,.repo a:hover{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);opacity:.8}.repo a .count{background:rgba(0,0,0,.26);color:#fff;border-radius:0 3px 3px 0}.repo a .count:before{border-width:15px 5px 15px 0;border-color:transparent rgba(0,0,0,.26);border-style:solid}.drawer{width:262px;font-size:13px;line-height:1em}.ios .drawer{overflow:scroll;-webkit-overflow-scrolling:touch}.drawer .toc li a{display:block;padding:14.5px 24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .toc li.anchor a{margin-left:12px;padding:10px 24px 10px 12px}.drawer .toc li ul{margin-left:12px}.drawer .current+ul{margin-bottom:9px}.drawer .section{display:block;padding:14.5px 24px}.drawer .scrollable{top:104px;z-index:-1}.drawer .scrollable .wrapper{height:auto;min-height:100%}.drawer .scrollable .wrapper hr{margin:12px 0;margin-right:auto}.drawer .scrollable .wrapper .toc{margin:12px 0}.project{display:block}.project .banner{display:table;width:100%;height:104px;padding:20px}.project .logo{display:table-cell;width:64px;padding-right:12px}.project .logo img{display:block;width:64px;height:64px}.project .name{display:table-cell;padding-left:4px;font-size:14px;line-height:1.25em;vertical-align:middle}.project .logo+.name{font-size:12px}.repo{margin:24px 0;text-align:center}.repo li{display:inline-block;padding-right:12px;white-space:nowrap}.repo li:last-child{padding-right:0}.repo a{display:inline-block;padding:0 10px 0 6px;font-size:12px;line-height:30px;height:30px}.repo a .icon{font-size:18px;vertical-align:-3px}.repo a .count{display:inline-block;position:relative;padding:0 8px 0 4px;margin:0 -10px 0 8px;font-size:12px}.repo a .count:before{content:" ";display:block;position:absolute;top:0;left:-5px}.no-js .repo a .count{display:none}.drawer .toc li a{font-weight:700}.drawer .toc li.anchor a{font-weight:400}.drawer .section,.repo a{font-weight:700}.repo a{text-transform:uppercase}.repo a .count{text-transform:none;font-weight:700}pre span{-webkit-transition:color .25s;transition:color .25s}.copyright a{-webkit-transition:color .25s;transition:color .25s}.ios.standalone .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.ios.standalone .article .wrapper{background:-webkit-linear-gradient(top,#fff 50%,#fff 0);background:linear-gradient(180deg,#fff 50%,#fff 0)}.article a,.article h1,.article h2{color:#e84e40}.article code{background:#eee}.article kbd{color:#555;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.article h1{border-bottom:1px solid rgba(0,0,0,.12)}.article a{border-bottom:1px dotted}.article a:focus,.article a:hover{color:#00bfa5}.article .headerlink{color:rgba(0,0,0,.26);border:none}.article table{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);border-radius:3px}.article table th{background:#ee7a70;color:#fff}.article table td{border-top:1px solid rgba(0,0,0,.05)}.article blockquote{border-left:2px solid rgba(0,0,0,.54);color:rgba(0,0,0,.54)}.footer{background:#e84e40;color:#fff}.footer a{border:none}.copyright{color:rgba(0,0,0,.54)}.pagination a .button,.pagination a .title{color:#fff}.pagination .direction{color:hsla(0,0%,100%,.7)}.admonition{background:#29b6f6;color:#fff}.admonition pre{background:hsla(0,0%,100%,.3)}.admonition.warning{background:#e84e40}.admonition a,.admonition a:hover{color:#fff}.article{font-size:14px;line-height:1.7em}.article:after{content:" ";display:block;clear:both}.article .wrapper{padding:116px 16px 92px}.ios.standalone .article{position:absolute;top:56px;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.ios.standalone .article .wrapper{position:relative;min-height:100%;padding-top:60px;margin-bottom:2px}.article h1{font-size:24px;line-height:1.333334em;padding:20px 0 42px}.article h2{font-size:20px;line-height:1.4em;padding-top:92px;margin-top:-56px}.ios.standalone .article h2{padding-top:36px;margin:0}.article h3,.article h4{font-size:14px;padding-top:76px;margin-top:-56px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article .headerlink{float:right;margin-left:20px;font-size:14px}h1 .article .headerlink{display:none}.article ol,.article p,.article ul{margin-top:1.5em}.article li,.article li ol,.article li ul{margin-top:.75em}.article li{margin-left:18px}.article li p{display:inline}.article ul>li:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/application.css b/site/assets/stylesheets/application.css deleted file mode 100644 index 965bbb3c8..000000000 --- a/site/assets/stylesheets/application.css +++ /dev/null @@ -1 +0,0 @@ -html{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}*,:after,:before{box-sizing:inherit;-moz-box-sizing:inherit;-webkit-box-sizing:inherit}html{font-size:62.5%;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0}main{display:block}ul{list-style:none}table{border-collapse:collapse;border-spacing:0}td{text-align:left;font-weight:400;vertical-align:middle}button{outline:0;padding:0;background:transparent;border:none;font-size:inherit}input{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;appearance:none;outline:none;border:none}a{text-decoration:none;color:inherit}a,button,input,label{-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-tap-highlight-color:transparent}h1,h2,h3,h4,h5,h6{font-weight:inherit}pre{background:rgba(0,0,0,.05)}pre,pre code{color:rgba(0,0,0,.87)}.c,.c1,.cm,.o{color:rgba(0,0,0,.54)}.k,.kn{color:#a71d5d}.kd,.kt{color:#0086b3}.n.f,.nf{color:#795da3}.nx{color:#0086b3}.s,.s1{color:#183691}.bp,.mi{color:#9575cd}.icon{font-family:Icon;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-search:before{content:"\e600"}.icon-back:before{content:"\e601"}.icon-link:before{content:"\e602"}.icon-close:before{content:"\e603"}.icon-menu:before{content:"\e604"}.icon-forward:before{content:"\e605"}.icon-twitter:before{content:"\e606"}.icon-github:before{content:"\e607"}.icon-download:before{content:"\e608"}.icon-star:before{content:"\e609"}.icon-warning:before{content:"\e610"}.icon-note:before{content:"\e611"}a{-webkit-transition:color .25s;transition:color .25s}.overlay{-webkit-transition:opacity .25s,width 0s .25s,height 0s .25s;transition:opacity .25s,width 0s .25s,height 0s .25s}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{-webkit-transition:opacity .25s,width 0s,height 0s;transition:opacity .25s,width 0s,height 0s}.js .header{-webkit-transition:background .6s,color .6s;transition:background .6s,color .6s}.js .header:before{-webkit-transition:background .6s;transition:background .6s}.button .icon{-webkit-transition:background .25s;transition:background .25s}body{color:rgba(0,0,0,.87)}@supports (-webkit-appearance:none){body{background:#e84e40}}.ios body{background:#fff}hr{border:0;border-top:1px solid rgba(0,0,0,.12)}.toggle-button{cursor:pointer;color:inherit}.backdrop,.backdrop-paper:after{background:#fff}.overlay{background:rgba(0,0,0,.54);opacity:0}#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{opacity:1}.header{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.ios.standalone .header:before{background:rgba(0,0,0,.12)}.bar .path{color:hsla(0,0%,100%,.7)}.button .icon{border-radius:100%}.button .icon:active{background:hsla(0,0%,100%,.12)}html{height:100%}body{position:relative;min-height:100%}hr{display:block;height:1px;padding:0;margin:0}.locked{height:100%;overflow:hidden}.scrollable{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.scrollable .wrapper{height:100%}.ios .scrollable .wrapper{margin-bottom:2px}.toggle{display:none}.toggle-button{display:block}.backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.backdrop-paper{max-width:1200px;height:100%;margin-left:auto;margin-right:auto}.backdrop-paper:after{content:" ";display:block;height:100%;margin-left:262px}.overlay{width:0;height:0;z-index:3}.header,.overlay{position:fixed;top:0}.header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;left:0;z-index:2;height:56px;padding:4px;overflow:hidden}.ios.standalone .header{position:absolute}.bar{display:table;max-width:1184px;margin-left:auto;margin-right:auto}.bar a{display:block}.no-js .bar .button-search{display:none}.bar .path .icon:before{vertical-align:-1.5px}.button{display:table-cell;vertical-align:top;width:1%}.button button{margin:0;padding:0}.button button:active:before{position:relative;top:0;left:0}.button .icon{display:inline-block;font-size:24px;padding:8px;margin:4px}.stretch{display:table;table-layout:fixed;width:100%}.header .stretch{padding:0 20px}.stretch .title{display:table-cell;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.header .stretch .title{font-size:18px;padding:13px 0}.main{max-width:1200px;margin-left:auto;margin-right:auto}body,input{font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.no-fontface body,.no-fontface input,body,input{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.no-fontface code,.no-fontface kbd,.no-fontface pre,code,kbd,pre{font-family:Courier New,Courier,monospace}#toggle-drawer:checked~.main .drawer,.toggle-drawer .drawer{-webkit-transform:translateZ(0);transform:translateZ(0)}.no-csstransforms3d #toggle-drawer:checked~.main .drawer,.no-csstransforms3d .toggle-drawer .drawer{display:block}.project{-webkit-transition:none;transition:none}.project .logo img{-webkit-transition:box-shadow .4s;transition:box-shadow .4s}.repo a{-webkit-transition:box-shadow .4s,opacity .4s;transition:box-shadow .4s,opacity .4s}.drawer .toc a.current,.drawer .toc a:focus,.drawer .toc a:hover{color:#e84e40}.drawer .anchor a{border-left:2px solid #e84e40}.drawer .section{color:rgba(0,0,0,.54)}.ios.standalone .project:before{background:rgba(0,0,0,.12)}.project .logo img{background:#fff;border-radius:100%}.project:focus .logo img,.project:hover .logo img{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05)}.repo a{background:#00bfa5;color:#fff;border-radius:3px}.repo a:focus,.repo a:hover{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);opacity:.8}.repo a .count{background:rgba(0,0,0,.26);color:#fff;border-radius:0 3px 3px 0}.repo a .count:before{border-width:15px 5px 15px 0;border-color:transparent rgba(0,0,0,.26);border-style:solid}.drawer{width:262px;font-size:13px;line-height:1em}.ios .drawer{overflow:scroll;-webkit-overflow-scrolling:touch}.drawer .toc li a{display:block;padding:14.5px 24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .toc li.anchor a{margin-left:12px;padding:10px 24px 10px 12px}.drawer .toc li ul{margin-left:12px}.drawer .current+ul{margin-bottom:9px}.drawer .section{display:block;padding:14.5px 24px}.drawer .scrollable{top:104px;z-index:-1}.drawer .scrollable .wrapper{height:auto;min-height:100%}.drawer .scrollable .wrapper hr{margin:12px 0;margin-right:auto}.drawer .scrollable .wrapper .toc{margin:12px 0}.project{display:block}.project .banner{display:table;width:100%;height:104px;padding:20px}.project .logo{display:table-cell;width:64px;padding-right:12px}.project .logo img{display:block;width:64px;height:64px}.project .name{display:table-cell;padding-left:4px;font-size:14px;line-height:1.25em;vertical-align:middle}.project .logo+.name{font-size:12px}.repo{margin:24px 0;text-align:center}.repo li{display:inline-block;padding-right:12px;white-space:nowrap}.repo li:last-child{padding-right:0}.repo a{display:inline-block;padding:0 10px 0 6px;font-size:12px;line-height:30px;height:30px}.repo a .icon{font-size:18px;vertical-align:-3px}.repo a .count{display:inline-block;position:relative;padding:0 8px 0 4px;margin:0 -10px 0 8px;font-size:12px}.repo a .count:before{content:" ";display:block;position:absolute;top:0;left:-5px}.no-js .repo a .count{display:none}.drawer .toc li a{font-weight:700}.drawer .toc li.anchor a{font-weight:400}.drawer .section,.repo a{font-weight:700}.repo a{text-transform:uppercase}.repo a .count{text-transform:none;font-weight:700}pre span{-webkit-transition:color .25s;transition:color .25s}.copyright a{-webkit-transition:color .25s;transition:color .25s}.ios.standalone .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.ios.standalone .article .wrapper{background:-webkit-linear-gradient(top,#fff 50%,#fff 0);background:linear-gradient(180deg,#fff 50%,#fff 0)}.article a,.article h1,.article h2{color:#e84e40}.article code{background:#eee}.article kbd{color:#555;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.article h1{border-bottom:1px solid rgba(0,0,0,.12)}.article a{border-bottom:1px dotted}.article a:focus,.article a:hover{color:#00bfa5}.article .headerlink{color:rgba(0,0,0,.26);border:none}.article table{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);border-radius:3px}.article table th{background:#ee7a70;color:#fff}.article table td{border-top:1px solid rgba(0,0,0,.05)}.article blockquote{border-left:2px solid rgba(0,0,0,.54);color:rgba(0,0,0,.54)}.footer{background:#e84e40;color:#fff}.footer a{border:none}.copyright{color:rgba(0,0,0,.54)}.pagination a .button,.pagination a .title{color:#fff}.pagination .direction{color:hsla(0,0%,100%,.7)}.admonition{background:#29b6f6;color:#fff}.admonition pre{background:hsla(0,0%,100%,.3)}.admonition.warning{background:#e84e40}.admonition a,.admonition a:hover{color:#fff}.article{font-size:14px;line-height:1.7em}.article:after{content:" ";display:block;clear:both}.article .wrapper{padding:116px 16px 92px}.ios.standalone .article{position:absolute;top:56px;right:0;bottom:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch}.ios.standalone .article .wrapper{position:relative;min-height:100%;padding-top:60px;margin-bottom:2px}.article h1{font-size:24px;line-height:1.333334em;padding:20px 0 42px}.article h2{font-size:20px;line-height:1.4em;padding-top:92px;margin-top:-56px}.ios.standalone .article h2{padding-top:36px;margin:0}.article h3,.article h4{font-size:14px;padding-top:76px;margin-top:-56px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article .headerlink{float:right;margin-left:20px;font-size:14px}h1 .article .headerlink{display:none}.article ol,.article p,.article ul{margin-top:1.5em}.article li,.article li ol,.article li ul{margin-top:.75em}.article li{margin-left:18px}.article li p{display:inline}.article ul>li:before{content:"\e602";display:block;float:left;font-family:Icon;font-size:16px;width:1.2em;margin-left:-1.2em;vertical-align:-.1em}.article p>code{white-space:nowrap;padding:2px 4px}.article kbd{display:inline-block;padding:3px 5px;line-height:10px}.article hr{margin-top:1.5em}.article img{max-width:100%}.article pre{padding:16px;margin:1.5em -16px 0;line-height:1.5em;overflow:auto;-webkit-overflow-scrolling:touch}.article table{margin:3em 0 1.5em;font-size:13px;overflow:hidden}.no-js .article table{display:inline-block;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch}.article table th{min-width:100px;font-size:12px;text-align:left}.article table td,.article table th{padding:12px 16px;vertical-align:top}.article blockquote{padding-left:16px}.article .data{margin:1.5em -16px;padding:1.5em 0;overflow:auto;-webkit-overflow-scrolling:touch;text-align:center}.article .data table{display:inline-block;margin:0 16px;text-align:left}.footer{position:absolute;bottom:0;left:0;right:0;padding:0 4px}.copyright{margin:1.5em 0}.pagination{max-width:1184px;height:92px;padding:4px 0;margin-left:auto;margin-right:auto;overflow:hidden}.pagination a{display:block;height:100%}.pagination .next,.pagination .previous{position:relative;float:left;height:100%}.pagination .previous{width:25%}.pagination .previous .direction,.pagination .previous .stretch{display:none}.pagination .next{width:75%;text-align:right}.pagination .page{display:table;position:absolute;bottom:4px}.pagination .direction{display:block;position:absolute;bottom:40px;width:100%;font-size:15px;line-height:20px;padding:0 52px}.pagination .stretch{padding:0 4px}.pagination .stretch .title{font-size:18px;padding:11px 0 13px}.admonition{margin:20px -16px 0;padding:20px 16px}.admonition>:first-child{margin-top:0}.admonition .admonition-title{font-size:20px}.admonition .admonition-title:before{content:"\e611";display:block;float:left;font-family:Icon;font-size:24px;vertical-align:-.1em;margin-right:5px}.admonition.warning .admonition-title:before{content:"\e610"}.article h3{font-weight:700}.article h4{font-weight:400;font-style:italic}.article h2 a,.article h3 a,.article h4 a,.article h5 a,.article h6 a{font-weight:400;font-style:normal}.bar{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1);transition:opacity .2s cubic-bezier(.75,0,.25,1),transform .4s cubic-bezier(.75,0,.25,1),-webkit-transform .4s cubic-bezier(.75,0,.25,1)}#toggle-search:checked~.header .bar,.toggle-search .bar{-webkit-transform:translate3d(0,-56px,0);transform:translate3d(0,-56px,0)}.bar.search .button-reset{-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .4s cubic-bezier(.1,.7,.1,1),transform .4s cubic-bezier(.1,.7,.1,1),-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:0}.bar.search.non-empty .button-reset{-webkit-transform:scale(1);transform:scale(1);opacity:1}.results{-webkit-transition:opacity .3s .1s,width 0s .4s,height 0s .4s;transition:opacity .3s .1s,width 0s .4s,height 0s .4s}#toggle-search:checked~.main .results,.toggle-search .results{-webkit-transition:opacity .4s,width 0s,height 0s;transition:opacity .4s,width 0s,height 0s}.results .list a{-webkit-transition:background .25s;transition:background .25s}.no-csstransforms3d .bar.default{display:table}.no-csstransforms3d .bar.search{display:none;margin-top:0}.no-csstransforms3d #toggle-search:checked~.header .bar.default,.no-csstransforms3d .toggle-search .bar.default{display:none}.no-csstransforms3d #toggle-search:checked~.header .bar.search,.no-csstransforms3d .toggle-search .bar.search{display:table}.bar.search{opacity:0}.bar.search .query{background:transparent;color:rgba(0,0,0,.87)}.bar.search .query::-webkit-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-moz-placeholder,.bar.search .query::-moz-placeholder{color:rgba(0,0,0,.26)}.bar.search .query:-ms-input-placeholder{color:rgba(0,0,0,.26)}.bar.search .button .icon:active{background:rgba(0,0,0,.12)}.results{box-shadow:0 4px 7px rgba(0,0,0,.23),0 8px 25px rgba(0,0,0,.05);background:#fff;color:rgba(0,0,0,.87);opacity:0}#toggle-search:checked~.main .results,.toggle-search .results{opacity:1}.results .meta{background:#e84e40;color:#fff}.results .list a{border-bottom:1px solid rgba(0,0,0,.12)}.results .list a:last-child{border-bottom:none}.results .list a:active{background:rgba(0,0,0,.12)}.result span{color:rgba(0,0,0,.54)}#toggle-search:checked~.header,.toggle-search .header{background:#fff;color:rgba(0,0,0,.54)}#toggle-search:checked~.header:before,.toggle-search .header:before{background:rgba(0,0,0,.54)}#toggle-search:checked~.header .bar.default,.toggle-search .header .bar.default{opacity:0}#toggle-search:checked~.header .bar.search,.toggle-search .header .bar.search{opacity:1}.bar.search{margin-top:8px}.bar.search .query{font-size:18px;padding:13px 0;margin:0;width:100%;height:48px}.bar.search .query::-ms-clear{display:none}.results{position:fixed;top:0;left:0;width:0;height:100%;z-index:1;overflow-y:scroll;-webkit-overflow-scrolling:touch}.results .scrollable{top:56px}#toggle-search:checked~.main .results,.toggle-search .results{width:100%;overflow-y:visible}.results .meta{font-weight:700}.results .meta strong{display:block;font-size:11px;max-width:1200px;margin-left:auto;margin-right:auto;padding:16px}.results .list a{display:block}.result{max-width:1200px;margin-left:auto;margin-right:auto;padding:12px 16px 16px}.result h1{line-height:24px}.result h1,.result span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.result span{font-size:12px}.no-csstransforms3d .results{display:none}.no-csstransforms3d #toggle-search:checked~.main .results,.no-csstransforms3d .toggle-search .results{display:block;overflow:auto}.meta{text-transform:uppercase;font-weight:700}@media only screen and (min-width:960px){.backdrop{background:#f2f2f2}.backdrop-paper:after{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05)}.button-menu{display:none}.drawer{float:left;height:auto;margin-bottom:96px;padding-top:80px}.drawer,.drawer .scrollable{position:static}.article{margin-left:262px}.footer{z-index:4}.copyright{margin-bottom:64px}.results{height:auto;top:64px}.results .scrollable{position:static;max-height:413px}}@media only screen and (max-width:959px){#toggle-drawer:checked~.overlay,.toggle-drawer .overlay{width:100%;height:100%}.drawer{-webkit-transform:translate3d(-262px,0,0);transform:translate3d(-262px,0,0);-webkit-transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),-webkit-transform .25s cubic-bezier(.4,0,.2,1)}.no-csstransforms3d .drawer{display:none}.drawer{background:#fff}.project{box-shadow:0 1.5px 3px rgba(0,0,0,.24),0 3px 8px rgba(0,0,0,.05);background:#e84e40;color:#fff}.drawer{position:fixed;z-index:4}#toggle-search:checked~.main .results,.drawer,.toggle-search .results{height:100%}}@media only screen and (min-width:720px){.header{height:64px;padding:8px}.header .stretch{padding:0 16px}.header .stretch .title{font-size:20px;padding:12px 0}.project .name{margin:26px 0 0 5px}.article .wrapper{padding:128px 24px 96px}.article .data{margin:1.5em -24px}.article .data table{margin:0 24px}.article h2{padding-top:100px;margin-top:-64px}.ios.standalone .article h2{padding-top:28px;margin-top:8px}.article h3,.article h4{padding-top:84px;margin-top:-64px}.ios.standalone .article h3,.ios.standalone .article h4{padding-top:20px;margin-top:0}.article pre{padding:1.5em 24px;margin:1.5em -24px 0}.footer{padding:0 8px}.pagination{height:96px;padding:8px 0}.pagination .direction{padding:0 56px;bottom:40px}.pagination .stretch{padding:0 8px}.admonition{margin:20px -24px 0;padding:20px 24px}.bar.search .query{font-size:20px;padding:12px 0}.results .scrollable{top:64px}.results .meta strong{padding:16px 24px}.result{padding:16px 24px 20px}}@media only screen and (min-width:1200px){.header{width:100%}.drawer .scrollable .wrapper hr{width:48px}}@media only screen and (orientation:portrait){.ios.standalone .header{height:76px;padding-top:24px}.ios.standalone .header:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .drawer .scrollable{top:124px}.ios.standalone .project{padding-top:20px}.ios.standalone .project:before{content:" ";position:absolute;top:0;left:0;z-index:3;width:100%;height:20px}.ios.standalone .article{position:absolute;top:76px;right:0;bottom:0;left:0}.ios.standalone .results .scrollable{top:76px}}@media only screen and (orientation:portrait) and (min-width:720px){.ios.standalone .header{height:84px;padding-top:28px}.ios.standalone .results .scrollable{top:84px}}@media only screen and (max-width:719px){.bar .path{display:none}}@media only screen and (max-width:479px){.button-github,.button-twitter{display:none}}@media only screen and (min-width:720px) and (max-width:959px){.header .stretch{padding:0 24px}}@media only screen and (min-width:480px){.pagination .next,.pagination .previous{width:50%}.pagination .previous .direction{display:block}.pagination .previous .stretch{display:table}}@media print{.drawer,.footer,.header,.headerlink{display:none}.article .wrapper{padding-top:0}.article pre,.article pre *{color:rgba(0,0,0,.87)!important}.article pre{border:1px solid rgba(0,0,0,.12)}.article table{border-radius:none;box-shadow:none}.article table th{color:#e84e40}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes-05ab2406df.css b/site/assets/stylesheets/palettes-05ab2406df.css deleted file mode 100644 index ead0d849b..000000000 --- a/site/assets/stylesheets/palettes-05ab2406df.css +++ /dev/null @@ -1 +0,0 @@ -@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/assets/stylesheets/palettes.css b/site/assets/stylesheets/palettes.css deleted file mode 100644 index ead0d849b..000000000 --- a/site/assets/stylesheets/palettes.css +++ /dev/null @@ -1 +0,0 @@ -@supports (-webkit-appearance:none){.palette-primary-red{background:#e84e40}}.palette-primary-red .footer,.palette-primary-red .header{background:#e84e40}.palette-primary-red .drawer .toc a.current,.palette-primary-red .drawer .toc a:focus,.palette-primary-red .drawer .toc a:hover{color:#e84e40}.palette-primary-red .drawer .anchor a{border-left:2px solid #e84e40}.ios.standalone .palette-primary-red .article{background:-webkit-linear-gradient(top,#fff 50%,#e84e40 0);background:linear-gradient(180deg,#fff 50%,#e84e40 0)}.palette-primary-red .article a,.palette-primary-red .article code,.palette-primary-red .article h1,.palette-primary-red .article h2{color:#e84e40}.palette-primary-red .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-red .article table th{background:#ee7a70}.palette-primary-red .results .meta{background:#e84e40}@supports (-webkit-appearance:none){.palette-primary-pink{background:#e91e63}}.palette-primary-pink .footer,.palette-primary-pink .header{background:#e91e63}.palette-primary-pink .drawer .toc a.current,.palette-primary-pink .drawer .toc a:focus,.palette-primary-pink .drawer .toc a:hover{color:#e91e63}.palette-primary-pink .drawer .anchor a{border-left:2px solid #e91e63}.ios.standalone .palette-primary-pink .article{background:-webkit-linear-gradient(top,#fff 50%,#e91e63 0);background:linear-gradient(180deg,#fff 50%,#e91e63 0)}.palette-primary-pink .article a,.palette-primary-pink .article code,.palette-primary-pink .article h1,.palette-primary-pink .article h2{color:#e91e63}.palette-primary-pink .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-pink .article table th{background:#ef568a}.palette-primary-pink .results .meta{background:#e91e63}@supports (-webkit-appearance:none){.palette-primary-purple{background:#ab47bc}}.palette-primary-purple .footer,.palette-primary-purple .header{background:#ab47bc}.palette-primary-purple .drawer .toc a.current,.palette-primary-purple .drawer .toc a:focus,.palette-primary-purple .drawer .toc a:hover{color:#ab47bc}.palette-primary-purple .drawer .anchor a{border-left:2px solid #ab47bc}.ios.standalone .palette-primary-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#ab47bc 0);background:linear-gradient(180deg,#fff 50%,#ab47bc 0)}.palette-primary-purple .article a,.palette-primary-purple .article code,.palette-primary-purple .article h1,.palette-primary-purple .article h2{color:#ab47bc}.palette-primary-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-purple .article table th{background:#c075cd}.palette-primary-purple .results .meta{background:#ab47bc}@supports (-webkit-appearance:none){.palette-primary-deep-purple{background:#7e57c2}}.palette-primary-deep-purple .footer,.palette-primary-deep-purple .header{background:#7e57c2}.palette-primary-deep-purple .drawer .toc a.current,.palette-primary-deep-purple .drawer .toc a:focus,.palette-primary-deep-purple .drawer .toc a:hover{color:#7e57c2}.palette-primary-deep-purple .drawer .anchor a{border-left:2px solid #7e57c2}.ios.standalone .palette-primary-deep-purple .article{background:-webkit-linear-gradient(top,#fff 50%,#7e57c2 0);background:linear-gradient(180deg,#fff 50%,#7e57c2 0)}.palette-primary-deep-purple .article a,.palette-primary-deep-purple .article code,.palette-primary-deep-purple .article h1,.palette-primary-deep-purple .article h2{color:#7e57c2}.palette-primary-deep-purple .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-purple .article table th{background:#9e81d1}.palette-primary-deep-purple .results .meta{background:#7e57c2}@supports (-webkit-appearance:none){.palette-primary-indigo{background:#3f51b5}}.palette-primary-indigo .footer,.palette-primary-indigo .header{background:#3f51b5}.palette-primary-indigo .drawer .toc a.current,.palette-primary-indigo .drawer .toc a:focus,.palette-primary-indigo .drawer .toc a:hover{color:#3f51b5}.palette-primary-indigo .drawer .anchor a{border-left:2px solid #3f51b5}.ios.standalone .palette-primary-indigo .article{background:-webkit-linear-gradient(top,#fff 50%,#3f51b5 0);background:linear-gradient(180deg,#fff 50%,#3f51b5 0)}.palette-primary-indigo .article a,.palette-primary-indigo .article code,.palette-primary-indigo .article h1,.palette-primary-indigo .article h2{color:#3f51b5}.palette-primary-indigo .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-indigo .article table th{background:#6f7dc8}.palette-primary-indigo .results .meta{background:#3f51b5}@supports (-webkit-appearance:none){.palette-primary-blue{background:#5677fc}}.palette-primary-blue .footer,.palette-primary-blue .header{background:#5677fc}.palette-primary-blue .drawer .toc a.current,.palette-primary-blue .drawer .toc a:focus,.palette-primary-blue .drawer .toc a:hover{color:#5677fc}.palette-primary-blue .drawer .anchor a{border-left:2px solid #5677fc}.ios.standalone .palette-primary-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#5677fc 0);background:linear-gradient(180deg,#fff 50%,#5677fc 0)}.palette-primary-blue .article a,.palette-primary-blue .article code,.palette-primary-blue .article h1,.palette-primary-blue .article h2{color:#5677fc}.palette-primary-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue .article table th{background:#8099fd}.palette-primary-blue .results .meta{background:#5677fc}@supports (-webkit-appearance:none){.palette-primary-light-blue{background:#03a9f4}}.palette-primary-light-blue .footer,.palette-primary-light-blue .header{background:#03a9f4}.palette-primary-light-blue .drawer .toc a.current,.palette-primary-light-blue .drawer .toc a:focus,.palette-primary-light-blue .drawer .toc a:hover{color:#03a9f4}.palette-primary-light-blue .drawer .anchor a{border-left:2px solid #03a9f4}.ios.standalone .palette-primary-light-blue .article{background:-webkit-linear-gradient(top,#fff 50%,#03a9f4 0);background:linear-gradient(180deg,#fff 50%,#03a9f4 0)}.palette-primary-light-blue .article a,.palette-primary-light-blue .article code,.palette-primary-light-blue .article h1,.palette-primary-light-blue .article h2{color:#03a9f4}.palette-primary-light-blue .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-blue .article table th{background:#42bff7}.palette-primary-light-blue .results .meta{background:#03a9f4}@supports (-webkit-appearance:none){.palette-primary-cyan{background:#00bcd4}}.palette-primary-cyan .footer,.palette-primary-cyan .header{background:#00bcd4}.palette-primary-cyan .drawer .toc a.current,.palette-primary-cyan .drawer .toc a:focus,.palette-primary-cyan .drawer .toc a:hover{color:#00bcd4}.palette-primary-cyan .drawer .anchor a{border-left:2px solid #00bcd4}.ios.standalone .palette-primary-cyan .article{background:-webkit-linear-gradient(top,#fff 50%,#00bcd4 0);background:linear-gradient(180deg,#fff 50%,#00bcd4 0)}.palette-primary-cyan .article a,.palette-primary-cyan .article code,.palette-primary-cyan .article h1,.palette-primary-cyan .article h2{color:#00bcd4}.palette-primary-cyan .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-cyan .article table th{background:#40cddf}.palette-primary-cyan .results .meta{background:#00bcd4}@supports (-webkit-appearance:none){.palette-primary-teal{background:#009688}}.palette-primary-teal .footer,.palette-primary-teal .header{background:#009688}.palette-primary-teal .drawer .toc a.current,.palette-primary-teal .drawer .toc a:focus,.palette-primary-teal .drawer .toc a:hover{color:#009688}.palette-primary-teal .drawer .anchor a{border-left:2px solid #009688}.ios.standalone .palette-primary-teal .article{background:-webkit-linear-gradient(top,#fff 50%,#009688 0);background:linear-gradient(180deg,#fff 50%,#009688 0)}.palette-primary-teal .article a,.palette-primary-teal .article code,.palette-primary-teal .article h1,.palette-primary-teal .article h2{color:#009688}.palette-primary-teal .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-teal .article table th{background:#40b0a6}.palette-primary-teal .results .meta{background:#009688}@supports (-webkit-appearance:none){.palette-primary-green{background:#259b24}}.palette-primary-green .footer,.palette-primary-green .header{background:#259b24}.palette-primary-green .drawer .toc a.current,.palette-primary-green .drawer .toc a:focus,.palette-primary-green .drawer .toc a:hover{color:#259b24}.palette-primary-green .drawer .anchor a{border-left:2px solid #259b24}.ios.standalone .palette-primary-green .article{background:-webkit-linear-gradient(top,#fff 50%,#259b24 0);background:linear-gradient(180deg,#fff 50%,#259b24 0)}.palette-primary-green .article a,.palette-primary-green .article code,.palette-primary-green .article h1,.palette-primary-green .article h2{color:#259b24}.palette-primary-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-green .article table th{background:#5cb45b}.palette-primary-green .results .meta{background:#259b24}@supports (-webkit-appearance:none){.palette-primary-light-green{background:#7cb342}}.palette-primary-light-green .footer,.palette-primary-light-green .header{background:#7cb342}.palette-primary-light-green .drawer .toc a.current,.palette-primary-light-green .drawer .toc a:focus,.palette-primary-light-green .drawer .toc a:hover{color:#7cb342}.palette-primary-light-green .drawer .anchor a{border-left:2px solid #7cb342}.ios.standalone .palette-primary-light-green .article{background:-webkit-linear-gradient(top,#fff 50%,#7cb342 0);background:linear-gradient(180deg,#fff 50%,#7cb342 0)}.palette-primary-light-green .article a,.palette-primary-light-green .article code,.palette-primary-light-green .article h1,.palette-primary-light-green .article h2{color:#7cb342}.palette-primary-light-green .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-light-green .article table th{background:#9dc671}.palette-primary-light-green .results .meta{background:#7cb342}@supports (-webkit-appearance:none){.palette-primary-lime{background:#c0ca33}}.palette-primary-lime .footer,.palette-primary-lime .header{background:#c0ca33}.palette-primary-lime .drawer .toc a.current,.palette-primary-lime .drawer .toc a:focus,.palette-primary-lime .drawer .toc a:hover{color:#c0ca33}.palette-primary-lime .drawer .anchor a{border-left:2px solid #c0ca33}.ios.standalone .palette-primary-lime .article{background:-webkit-linear-gradient(top,#fff 50%,#c0ca33 0);background:linear-gradient(180deg,#fff 50%,#c0ca33 0)}.palette-primary-lime .article a,.palette-primary-lime .article code,.palette-primary-lime .article h1,.palette-primary-lime .article h2{color:#c0ca33}.palette-primary-lime .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-lime .article table th{background:#d0d766}.palette-primary-lime .results .meta{background:#c0ca33}@supports (-webkit-appearance:none){.palette-primary-yellow{background:#f9a825}}.palette-primary-yellow .footer,.palette-primary-yellow .header{background:#f9a825}.palette-primary-yellow .drawer .toc a.current,.palette-primary-yellow .drawer .toc a:focus,.palette-primary-yellow .drawer .toc a:hover{color:#f9a825}.palette-primary-yellow .drawer .anchor a{border-left:2px solid #f9a825}.ios.standalone .palette-primary-yellow .article{background:-webkit-linear-gradient(top,#fff 50%,#f9a825 0);background:linear-gradient(180deg,#fff 50%,#f9a825 0)}.palette-primary-yellow .article a,.palette-primary-yellow .article code,.palette-primary-yellow .article h1,.palette-primary-yellow .article h2{color:#f9a825}.palette-primary-yellow .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-yellow .article table th{background:#fbbe5c}.palette-primary-yellow .results .meta{background:#f9a825}@supports (-webkit-appearance:none){.palette-primary-amber{background:#ffb300}}.palette-primary-amber .footer,.palette-primary-amber .header{background:#ffb300}.palette-primary-amber .drawer .toc a.current,.palette-primary-amber .drawer .toc a:focus,.palette-primary-amber .drawer .toc a:hover{color:#ffb300}.palette-primary-amber .drawer .anchor a{border-left:2px solid #ffb300}.ios.standalone .palette-primary-amber .article{background:-webkit-linear-gradient(top,#fff 50%,#ffb300 0);background:linear-gradient(180deg,#fff 50%,#ffb300 0)}.palette-primary-amber .article a,.palette-primary-amber .article code,.palette-primary-amber .article h1,.palette-primary-amber .article h2{color:#ffb300}.palette-primary-amber .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-amber .article table th{background:#ffc640}.palette-primary-amber .results .meta{background:#ffb300}@supports (-webkit-appearance:none){.palette-primary-orange{background:#fb8c00}}.palette-primary-orange .footer,.palette-primary-orange .header{background:#fb8c00}.palette-primary-orange .drawer .toc a.current,.palette-primary-orange .drawer .toc a:focus,.palette-primary-orange .drawer .toc a:hover{color:#fb8c00}.palette-primary-orange .drawer .anchor a{border-left:2px solid #fb8c00}.ios.standalone .palette-primary-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#fb8c00 0);background:linear-gradient(180deg,#fff 50%,#fb8c00 0)}.palette-primary-orange .article a,.palette-primary-orange .article code,.palette-primary-orange .article h1,.palette-primary-orange .article h2{color:#fb8c00}.palette-primary-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-orange .article table th{background:#fca940}.palette-primary-orange .results .meta{background:#fb8c00}@supports (-webkit-appearance:none){.palette-primary-deep-orange{background:#ff7043}}.palette-primary-deep-orange .footer,.palette-primary-deep-orange .header{background:#ff7043}.palette-primary-deep-orange .drawer .toc a.current,.palette-primary-deep-orange .drawer .toc a:focus,.palette-primary-deep-orange .drawer .toc a:hover{color:#ff7043}.palette-primary-deep-orange .drawer .anchor a{border-left:2px solid #ff7043}.ios.standalone .palette-primary-deep-orange .article{background:-webkit-linear-gradient(top,#fff 50%,#ff7043 0);background:linear-gradient(180deg,#fff 50%,#ff7043 0)}.palette-primary-deep-orange .article a,.palette-primary-deep-orange .article code,.palette-primary-deep-orange .article h1,.palette-primary-deep-orange .article h2{color:#ff7043}.palette-primary-deep-orange .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-deep-orange .article table th{background:#ff9472}.palette-primary-deep-orange .results .meta{background:#ff7043}@supports (-webkit-appearance:none){.palette-primary-brown{background:#795548}}.palette-primary-brown .footer,.palette-primary-brown .header{background:#795548}.palette-primary-brown .drawer .toc a.current,.palette-primary-brown .drawer .toc a:focus,.palette-primary-brown .drawer .toc a:hover{color:#795548}.palette-primary-brown .drawer .anchor a{border-left:2px solid #795548}.ios.standalone .palette-primary-brown .article{background:-webkit-linear-gradient(top,#fff 50%,#795548 0);background:linear-gradient(180deg,#fff 50%,#795548 0)}.palette-primary-brown .article a,.palette-primary-brown .article code,.palette-primary-brown .article h1,.palette-primary-brown .article h2{color:#795548}.palette-primary-brown .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-brown .article table th{background:#9b8076}.palette-primary-brown .results .meta{background:#795548}@supports (-webkit-appearance:none){.palette-primary-grey{background:#757575}}.palette-primary-grey .footer,.palette-primary-grey .header{background:#757575}.palette-primary-grey .drawer .toc a.current,.palette-primary-grey .drawer .toc a:focus,.palette-primary-grey .drawer .toc a:hover{color:#757575}.palette-primary-grey .drawer .anchor a{border-left:2px solid #757575}.ios.standalone .palette-primary-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#757575 0);background:linear-gradient(180deg,#fff 50%,#757575 0)}.palette-primary-grey .article a,.palette-primary-grey .article code,.palette-primary-grey .article h1,.palette-primary-grey .article h2{color:#757575}.palette-primary-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-grey .article table th{background:#989898}.palette-primary-grey .results .meta{background:#757575}@supports (-webkit-appearance:none){.palette-primary-blue-grey{background:#546e7a}}.palette-primary-blue-grey .footer,.palette-primary-blue-grey .header{background:#546e7a}.palette-primary-blue-grey .drawer .toc a.current,.palette-primary-blue-grey .drawer .toc a:focus,.palette-primary-blue-grey .drawer .toc a:hover{color:#546e7a}.palette-primary-blue-grey .drawer .anchor a{border-left:2px solid #546e7a}.ios.standalone .palette-primary-blue-grey .article{background:-webkit-linear-gradient(top,#fff 50%,#546e7a 0);background:linear-gradient(180deg,#fff 50%,#546e7a 0)}.palette-primary-blue-grey .article a,.palette-primary-blue-grey .article code,.palette-primary-blue-grey .article h1,.palette-primary-blue-grey .article h2{color:#546e7a}.palette-primary-blue-grey .article .headerlink{color:rgba(0,0,0,.26)}.palette-primary-blue-grey .article table th{background:#7f929b}.palette-primary-blue-grey .results .meta{background:#546e7a}.palette-accent-red .article a:focus,.palette-accent-red .article a:hover{color:#ff2d6f}.palette-accent-red .repo a{background:#ff2d6f}.palette-accent-pink .article a:focus,.palette-accent-pink .article a:hover{color:#f50057}.palette-accent-pink .repo a{background:#f50057}.palette-accent-purple .article a:focus,.palette-accent-purple .article a:hover{color:#e040fb}.palette-accent-purple .repo a{background:#e040fb}.palette-accent-deep-purple .article a:focus,.palette-accent-deep-purple .article a:hover{color:#7c4dff}.palette-accent-deep-purple .repo a{background:#7c4dff}.palette-accent-indigo .article a:focus,.palette-accent-indigo .article a:hover{color:#536dfe}.palette-accent-indigo .repo a{background:#536dfe}.palette-accent-blue .article a:focus,.palette-accent-blue .article a:hover{color:#6889ff}.palette-accent-blue .repo a{background:#6889ff}.palette-accent-light-blue .article a:focus,.palette-accent-light-blue .article a:hover{color:#0091ea}.palette-accent-light-blue .repo a{background:#0091ea}.palette-accent-cyan .article a:focus,.palette-accent-cyan .article a:hover{color:#00b8d4}.palette-accent-cyan .repo a{background:#00b8d4}.palette-accent-teal .article a:focus,.palette-accent-teal .article a:hover{color:#00bfa5}.palette-accent-teal .repo a{background:#00bfa5}.palette-accent-green .article a:focus,.palette-accent-green .article a:hover{color:#12c700}.palette-accent-green .repo a{background:#12c700}.palette-accent-light-green .article a:focus,.palette-accent-light-green .article a:hover{color:#64dd17}.palette-accent-light-green .repo a{background:#64dd17}.palette-accent-lime .article a:focus,.palette-accent-lime .article a:hover{color:#aeea00}.palette-accent-lime .repo a{background:#aeea00}.palette-accent-yellow .article a:focus,.palette-accent-yellow .article a:hover{color:#ffd600}.palette-accent-yellow .repo a{background:#ffd600}.palette-accent-amber .article a:focus,.palette-accent-amber .article a:hover{color:#ffab00}.palette-accent-amber .repo a{background:#ffab00}.palette-accent-orange .article a:focus,.palette-accent-orange .article a:hover{color:#ff9100}.palette-accent-orange .repo a{background:#ff9100}.palette-accent-deep-orange .article a:focus,.palette-accent-deep-orange .article a:hover{color:#ff6e40}.palette-accent-deep-orange .repo a{background:#ff6e40}@media only screen and (max-width:959px){.palette-primary-red .project{background:#e84e40}.palette-primary-pink .project{background:#e91e63}.palette-primary-purple .project{background:#ab47bc}.palette-primary-deep-purple .project{background:#7e57c2}.palette-primary-indigo .project{background:#3f51b5}.palette-primary-blue .project{background:#5677fc}.palette-primary-light-blue .project{background:#03a9f4}.palette-primary-cyan .project{background:#00bcd4}.palette-primary-teal .project{background:#009688}.palette-primary-green .project{background:#259b24}.palette-primary-light-green .project{background:#7cb342}.palette-primary-lime .project{background:#c0ca33}.palette-primary-yellow .project{background:#f9a825}.palette-primary-amber .project{background:#ffb300}.palette-primary-orange .project{background:#fb8c00}.palette-primary-deep-orange .project{background:#ff7043}.palette-primary-brown .project{background:#795548}.palette-primary-grey .project{background:#757575}.palette-primary-blue-grey .project{background:#546e7a}} \ No newline at end of file diff --git a/site/conn/index.html b/site/conn/index.html deleted file mode 100644 index d2e04263d..000000000 --- a/site/conn/index.html +++ /dev/null @@ -1,710 +0,0 @@ - - - - - - - - - - - - - - - - - - Connection Management - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - - - - -
    -
    - - edit - - - -

    Connection Management

    -

    trackservers.q is used to register and maintain handles to external -servers. It is a heavily modified version of trackservers.q from -code.kx. All the options are described in the default config file. All -connections are tracked in the .servers.SERVERS table. When the handle -is used the count and last query time are updated.

    -
    q).servers.SERVERS 
    -procname     proctype  hpup                            w  hits startp                        lastp                         endp                          attributes                   
    ----------------------------------------------------------------------------------
    -discovery1   discovery :aquaq:9996    0                                  2014.01.08D11:13:10.583056000                               ()!()                        
    -discovery2   discovery :aquaq:9995 6  0    2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000                               ()!()                        
    -rdb_europe_1 rdb       :aquaq:9998 12 0    2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk
    -rdb1         rdb       :aquaq:5011 7  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
    -rdb_europe_1 hdb       :aquaq:9997    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
    -hdb1         hdb       :aquaq:9999    0                                  2014.01.08D11:13:10.757801000                               ()!()                        
    -hdb2         hdb       :aquaq:5013 8  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
    -hdb1         hdb       :aquaq:5012 9  0    2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000                               `datacentre`country!`essex`uk
    -
    -q)last .servers.SERVERS 
    -procname  | `hdb2
    -proctype  | `hdb
    -hpup      | `:aquaq:5013
    -w         | 8i
    -hits      | 0i
    -startp    | 2014.01.08D11:51:01.928045000
    -lastp     | 2014.01.08D11:51:01.925078000
    -endp      | 0Np
    -attributes| `datacentre`country!`essex`uk
    -
    -

    Connections

    -

    Processes locate other processes based on their process type. The -location is done either statically using the process.csv file or -dynamically using a discovery service. It is recommended to use the -discovery service as it allows the process to be notified as new -processes become available.

    -

    The main configuration variable is .servers.CONNECTIONS, which dictates -which process type(s) to create connections to. .servers.startup[] -must be called to initialise the connections. When connections are -closed, the connection table is automatically updated. The process can -be set to periodically retry connections.

    -

    Process Attributes

    -

    Each process can report a set of attributes. When process A connects to -process B, process A will try to retrieve the attributes of process B. -The attributes are defined by the result of the .proc.getattributes -function, which is by default an empty dictionary. Attributes are used -to retrieve more detail about the capabilities of each process, rather -than relying on the broad brush process type and process name -categorization. Attributes can be used for intelligent query routing. -Potential fields for attributes include:

    -
      -
    • -

      range of data contained in the process;

      -
    • -
    • -

      available tables;

      -
    • -
    • -

      instrument universe;

      -
    • -
    • -

      physical location;

      -
    • -
    • -

      any other fields of relevance.

      -
    • -
    -

    Connection Passwords

    -

    The password used by a process to connect to external processes is -retrieved using the .servers.loadpassword function call. By default, -this will read the password from a txt file contained in -$KDBCONFIG/passwords. A default password can be used, which is -overridden by one for the process type, which is itself overridden by -one for the process name. For greater security, the -.servers.loadpassword function should be modified.

    -

    Retrieving and Using Handles

    -

    A function .servers.getservers is supplied to return a table of handle -information. .servers.getservers takes five parameters:

    -
      -
    • -

      type-or-name: whether the lookup is to be done by type or name (can - be either proctype or procname);

      -
    • -
    • -

      types-or-names: the types or names to retrieve e.g. hdb;

      -
    • -
    • -

      required-attributes: the dictionary of attributes to match on;

      -
    • -
    • -

      open-dead-connections: whether to re-open dead connections;

      -
    • -
    • -

      only-one: whether we only require one handle. So for example if 3 - services of the supplied type are registered, and we have an open - handle to 1 of them, the open handle will be returned and the others - left closed irrespective of the open-dead-connections parameter.

      -
    • -
    -

    .servers.getservers will compare the required parameters with the -available parameters for each handle. The resulting table will have an -extra column called attribmatch which can be used to determine how good -a match the service is with the required attributes. attribmatch is a -dictionary of (required attribute key) ! (Boolean full match; -intersection of attributes).

    -
    q).servers.SERVERS 
    -procname     proctype  hpup                            w hits startp                        lastp                         endp attributes                   
    ----------------------------------------------------------------------------------
    -discovery1   discovery :aquaq:9996   0                                  2014.01.08D11:51:01.922390000      ()!()                        
    -discovery2   discovery :aquaq:9995 6 0    2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000      ()!()                        
    -rdb_europe_1 rdb       :aquaq:9998   0                                  2014.01.08D11:51:38.347598000      ()!()                        
    -rdb_europe_2 rdb       :aquaq:9997   0                                  2014.01.08D11:51:38.347598000      ()!()                        
    -rdb1         rdb       :aquaq:5011 7 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
    -hdb3         hdb       :aquaq:5012 9 0    2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000      `datacentre`country!`essex`uk
    -hdb2         hdb       :aquaq:5013 8 0    2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000      `datacentre`country!`essex`uk
    -
    -/- pull back hdbs.  Leave the attributes empty
    -q).servers.getservers[`proctype;`hdb;()!();1b;f0b] 
    -procname proctype lastp                         w hpup        attributes                    attribmatch
    --------------------------------------------------------------------------------
    -hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!()      
    -hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()
    -
    -/- supply some attributes
    -q).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] 
    -procname proctype lastp                         w hpup        attributes                    attribmatch           
    --------------------------------------------------------------------------------
    -hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
    -hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)
    -q).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b]                                                                                                                                                                                                    
    -procname proctype lastp                         w hpup        attributes                    attribmatch                                    
    --------------------------------------------------------------------------------
    -hdb3     hdb      2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
    -hdb2     hdb      2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))
    -
    -

    .servers.getservers will try to automatically re-open connections if -required.

    -
    q).servers.getservers[`proctype;`rdb;()!();1b;0b] 
    -2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998
    -2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused
    -2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997
    -2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused
    -procname proctype lastp                         w hpup         attributes                    attribmatch
    --------------------------------------------------------------------------------
    -rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
    -
    -/- If we only require one connection, and we have one open,then it doesn't retry connections
    -q).servers.getservers[`proctype;`rdb;()!();1b;1b] 
    -procname proctype lastp                         w hpup        attributes                    attribmatch
    --------------------------------------------------------------------------------
    -rdb1     rdb      2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()
    -
    -

    There are two other functions supplied for retrieving server details, -both of which are based on .servers.getservers. .servers.gethandlebytype -returns a single handle value, .servers.gethpupbytype returns a single -host:port value. Both will re-open connections if there are not any -valid connections. Both take two parameters:

    -
      -
    • -

      types: the type to retrieve e.g. hdb;

      -
    • -
    • -

      selection-algorithm: can be one of any, last or roundrobin.

      -
    • -
    -

    Connecting To Non-TorQ Processes

    -

    Connections to non-torq (external) processes can also be established. -This is useful if you wish to integrate TorQ with an existing -infrastructure. Any process can connect to external processes, or it can -be managed by the discovery service only. Every external process should -have a type and name in the same way as TorQ processes, to enable them -to be located and used as required.

    -

    Non-TorQ processes need to be listed by default in -$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format -as the standard process.csv file. The location of the non-TorQ process -file can be adjusted using the .servers.NONTORQPROCESSFILE variable. To -enable connections, set .servers.TRACKNONTORQPROCESS to 1b.

    -

    Example of nontorqprocess.csv file:

    -
    host,port,proctype,procname
    -aquaq,5533,hdb,extproc01
    -aquaq,5577,hdb,extproc02
    -
    -

    Manually Adding And Using Connections

    -

    Connections can also be manually added and used. See .api.p“.servers.*” -for details.

    -

    IPC types

    -

    In version kdb+ v3.4, two new IPC connection types were added. These new -types are unix domain sockets and SSL/TLS (tcps). The incoming -connections to a proctype can be set by updating .servers.SOCKETTYPE.

    -

    In the settings example below, everything that connects to the -tickerplant will use unix domain sockets.

    -
    \d .servers 
    -SOCKETTYPE:enlist[`tickerplant]!enlist `unix
    -
    -

    Attempting to open a unix domain socket connection to a process which -has an older kdb+ version will fail. We allow for processes to fallback -to tcp if this happens by setting .servers.SOCKETFALLBACK to true. It -will not fallback if the connection error message returned is one of the -following : timeout, access. It will also not fallback for SSL/TLS -(tcps) due to security concerns.

    -

    At the time of writing, using unix domain sockets syntax on windows will -appear to work whilst it’s actually falling back to tcp in the -background. This can be misleading so we disabled using them on windows.

    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/gettingstarted/index.html b/site/gettingstarted/index.html deleted file mode 100644 index 4cb1d8337..000000000 --- a/site/gettingstarted/index.html +++ /dev/null @@ -1,895 +0,0 @@ - - - - - - - - - - - - - - - - - - Getting Started - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - - - - -
    -
    - - edit - - - -

    Getting Started

    -

    kdb+ is very customisable. Customisations are contained in q scripts (.q -files), which define functions and variables which modify the behaviour -of a process. Every q process can load a single q script, or a directory -containing q scripts and/or q data files. Hooks are provided to enable -the programmer to apply a custom function to each entry point of the -process (.z.p*), to be invoked on the timer (.z.ts) or when a variable -in the top level namespace is amended (.z.vs). By default none of these -hooks are implemented.

    -

    We provide a codebase and a single main script, torq.q. torq.q is -essentially a wrapper for bespoke functionality which can load other -scripts/directories, or can be sourced from other scripts. Whenever -possible, torq.q should be invoked directly and used to load other -scripts as required. torq.q will:

    -
      -
    • -

      ensure the environment is set up correctly;

      -
    • -
    • -

      define some common utility functions (such as logging);

      -
    • -
    • -

      execute process management tasks, such as discovering the name and - type of the process, and re-directing output to log files;

      -
    • -
    • -

      load configuration;

      -
    • -
    • -

      load the shared code based;

      -
    • -
    • -

      set up the message handlers;

      -
    • -
    • -

      load any required bespoke scripts.

      -
    • -
    -

    The behavior of torq.q is modified by both command line parameters and -configuration. We have tried to keep as much as possible in -configuration files, but if the parameter either has a global effect on -the process or if it is required to be known before the configuration is -read, then it is a command line parameter.

    -

    -

    Using torq.q

    -

    torq.q can be invoked directly from the command line and be set to -source a specified file or directory. torq.q requires the 5 environment -variables to be set (see section envvar). If using a unix -environment, this can be done with the setenv.sh script. To start a -process in the foreground without having to modify any other files (e.g. -process.csv) you need to specify the type and name of the process as -parameters. An example is below.

    -
    $ . setenv.sh
    -$ q torq.q -debug -proctype testproc -procname test1
    -
    -

    To load a file, do:

    -
    $ q torq.q -load myfile.q -debug -proctype testproc -procname test1
    -
    -

    It can also be sourced from another script. If this is the case, some of -the variables can be overridden, and the usage information can be -modified or extended. Any variable that has a definition like below can -be overridden from the loading script.

    -
    myvar:@[value;`myvar;1 2 3]
    -
    -

    The available command line parameters are:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Cmd Line ParamDescription
    -procname x -proctype yThe process name and process type
    -procfile xThe name of the file to get the process information from
    -load x [y..z]The files or database directory to load
    -loaddir x [y..z]Load all .q, .k files in specified directories
    -localtimeSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P
    -trapAny errors encountered during initialization when loading external files will be caught and logged, processing will continue
    -stopStop loading the file if an error is encountered but do not exit
    -noredirectDo not redirect std out/std err to a file (useful for debugging)
    -noredirectaliasDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)
    -noconfigDo not load configuration
    -nopiReset the definition of .z.pi to the initial value (useful for debugging)
    -debugEquivalent to [-nopi -noredirect]
    -usagePrint usage info and exit
    -

    In addition any process variable in a namespace (.*.*) can be -overridden from the command line. Any value supplied on the command line -will take priority over any other predefined value (.e.g. in a -configuration or wrapper). Variable names should be supplied with full -qualification e.g. -.servers.HOPENTIMEOUT 5000.

    -

    -

    Environment Variables

    -

    Five environment variables are required:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Environment VariableDescription
    KDBCONFIGThe base configuration directory
    KDBCODEThe base code directory
    KDBLOGSWhere standard out/error and usage logs are written
    KDBHTMLContains HTML files
    KDBLIBContains supporting library files
    -

    torq.q will check for these and exit if they are not set. If torq.q is -being sourced from another script, the required environment variables -can be extended by setting .proc.envvars before loading torq.q.

    -

    -

    Process Identification

    -

    At the crux of AquaQ TorQ is how processes identify themselves. This is -defined by two variables - .proc.proctype and .proc.procname which are -the type and name of the process respectively. These two values -determine the code base and configuration loaded, and how they are -connected to by other processes. If both of these are not defined, the -TorQ will attempt to use the port number a process was started on to -determine the code base and configuration loaded.

    -

    The most important of these is the proctype. It is up to the user to -define at what level to specify a process type. For example, in a -production environment it would be valid to specify processes of type -“hdb” (historic database) and “rdb” (real time database). It would also -be valid to segregate a little more granularly based on approximate -functionality, for example “hdbEMEA” and “hdbAmericas”. The actual -functionality of a process can be defined more specifically, but this -will be discussed later. The procname value is used solely for -identification purposes. A process can determine its type and name in a -number of ways:

    -
      -
    1. -

      From the process file in the default location of - $KDBCONFIG/process.csv;

      -
    2. -
    3. -

      From the process file defined using the command line parameter - -procfile;

      -
    4. -
    5. -

      From the port number it is started on, by referring to the process - file for further process details;

      -
    6. -
    7. -

      Using the command line parameters -proctype and -procname;

      -
    8. -
    9. -

      By defining .proc.proctype and .proc.procname in a script which - loads torq.q.

      -
    10. -
    -

    For options 4 and 5, both parameters must be defined using that method -or neither will be used (the values will be read from the process file).

    -

    For option 3, TorQ will check the process file for any entries where the -port matches the port number it has been started on, and deduce it’s -proctype and procname based on this port number and the corresponding -hostname entry.

    -

    The process file has format as below.

    -
    aquaq$ cat config/process.csv 
    -host,port,proctype,procname
    -aquaq,9997,rdb,rdb_europe_1
    -aquaq,9998,hdb,hdb_europe_1
    -aquaq,9999,hdb,hdb_europa_2
    -
    -

    The process will read the file and try to identify itself based on the -host and port it is started on. The host can either be the value -returned by .z.h, or the ip address of the server. If the process can -not automatically identify itself it will exit, unless proctype and -procname were both passed in as command line parameters. If both of -these parameters are passed in then default configuration settings will -be used.

    -

    -

    Logging

    -

    By default, each process will redirect output to a standard out log and -a standard error log, and create aliases for them. These will be rolled -at midnight on a daily basis. They are all written to the $KDBLOGS -directory. The log files created are:

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Log FileDescription
    out_[procname]_[date].logTimestamped out log
    err_[procname]_[date].logTimestamped error log
    out_[procname].logAlias to current log log
    err_[procname].logAlias to current error log
    -

    The date suffix can be overridden by modifying the .proc.logtimestamp -function and sourcing torq.q from another script. This could, for -example, change the suffixing to a full timestamp.

    -

    -

    Configuration Loading

    -

    Default Configuration Loading

    -

    Default process configuration is contained in q scripts, and stored in -the $KDBCONFIG /settings directory. Each process tries to load all the -configuration it can find and will attempt to load three configuration -files in the below order:-

    -
      -
    • -

      default.q: default configuration loaded by all processes. In a - standard installation this should contain the superset of - customisable configuration, including comments;

      -
    • -
    • -

      [[proctype]]{}.q: configuration for a specific process type;

      -
    • -
    • -

      [[procname]]{}.q: configuration for a specific named process.

      -
    • -
    -

    The only one which should always be present is default.q. Each of the -other scripts can contain a subset of the configuration variables, which -will override anything loaded previously.

    -

    Application Configuration Loading

    -

    Application specific configuration can be stored in a user defined -directory and made visible to TorQ by setting the $KDBAPPCONFIG -environment variable. If $KDBAPPCONFIG is set, then TorQ will search -the $KDBAPPCONFIG/settings directory and load all configuration it can -find. Application configuration will be loaded after all default -configuration in the following order:-

    -
      -
    • -

      default.q: Application default configuration loaded by all - processes.

      -
    • -
    • -

      [[proctype]]{}.q: Application specific configuration for a - specific process type.

      -
    • -
    • -

      [[procname]]{}.q: Appliction specific configuration for a specific - named process.

      -
    • -
    -

    All loaded configuration will override anything loaded previously. None -of the above scripts are required to be present and can contain a subset -of the default configuration variables from the default configuration -directory.

    -

    All configuration is loaded before code.

    -

    -

    Code Loading

    -

    Code is loaded from the $KDBCODE directory. There is also a common -codebase, a codebase for each process type, and a code base for each -process name, contained in the following directories and loaded in this -order:

    -
      -
    • -

      $KDBCODE/common: shared codebase loaded by all processes;

      -
    • -
    • -

      $KDBCODE/[proctype]: code for a specific process type;

      -
    • -
    • -

      $KDBCODE/[procname]: code for a specific process name;

      -
    • -
    -

    For any directory loaded, the load order can be specified by adding -order.txt to the directory. order.txt dictates the order that files in -the directory are loaded. If a file is not in order.txt, it will still -be loaded but after all the files listed in order.txt have been loaded.

    -

    Additional directories can be loaded using the -loaddir command line -parameter.

    -

    -

    Initialization Errors

    -

    Initialization errors can be handled in different ways. The default -action is any initialization error causes the process to exit. This is -to enable fail-fast type conditions, where it is better for a process to -fail entirely and immediately than to start up in an indeterminate -state. This can be overridden with the -trap or -stop command line -parameters. With -trap, the process will catch the error, log it, and -continue. This is useful if, for example, the error is encountered -loading a file of stored procedures which may not be invoked and can be -reloaded later. With -stop the process will halt at the point of the -error but will not exit. Both -stop and -trap are useful for debugging.

    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/graphics/AquaQ-TorQ-symbol.png b/site/graphics/AquaQ-TorQ-symbol.png deleted file mode 100755 index 312cfc403e2c0400dba7121adf42889e0700b83f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125149 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 z 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 diff --git a/site/graphics/TorQ-logo.png b/site/graphics/TorQ-logo.png deleted file mode 100755 index 4f3b30eaefcb4fe4d299d202a6a96d81e3d6e034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108699 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


    = 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 NB_=OgB5dIIKL7<74O{>K diff --git a/site/graphics/discovery2.png b/site/graphics/discovery2.png deleted file mode 100755 index 14d350884a83fe7f29b8477475596620e9210389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37928 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

    XO141LOhA7`%DN&ZVMlW++ptwu zi5RDJOQ^a2#DFOLo6-8+N19P93G#?fzk@SILOGZtdDdRWh{tEKRelnZC;oNRgIgFL z26=m^2g(Dz_eNJEuujwvH%XH^U2`bsH3`c6o8H7K2Sq;31b72j?|^_C$?}~cj6FyI zf7Dbj3oP7lxT#Al5Xid*1H)1u6ZglJ5bVrNdul6i3mv6%RLcb+E_{F5;=W%cfKz2a zy@o`hXPn;Kd7aym^Pm#Whum#$Yy=!z<4PX~3Nkq(ycW&2Z>rrPOn#xkV7oUan_3Oj zn~~>E`0y&U5dIc0!Vd`Jl>$PxY=H}Rc}VJ_9Rt*bLPL5g-ANIL;*@4%5ST>2{Qe=L z8INNfrh-vqRy;;)0rAzZ?MhM~PM$=Ik$$FrH9`P(jqt^Y3gTfthO?0}G-f$%Wo0}m z@)`q>kHn(Pq-D!nzn)Yn-32fd2lAm%5oJ1vK`}i3dNNehKxXYVy)`y^c3ITX!n~sF zAC=t@Sp#fg3A=F~89m~%CSf(rPRix0Qql79itR%%v8+$j;;A4q^=0mSreu=k*HW73@+mHg zv+D5!LK7Afy+2g-IfvZF6VZB^V#p$23;a=d$cbSGyxq>~6Ll7W1g#!C^ifAPuyDkg z2zs4n>NQ(=6b!lHhjiuXvVh+Ld5m$1s)1mTT05>tQIunHD9BjGM=?`UipoInA{hlh z83L}TJs>6|$93EISh%>7qZ)dqRO4gFwwd^xK|MYCxs6*K8w(c}8gCmFHzA=};O|<2 zrl8rig5XB1FCTY2Md|}d0PKM6 zg%v@)d@v_Ce1>7-kBOG1EU}aGoi-Xt6@;f6NgDZv(xN)j%=pJtaDWu`rGkwk5XlN* zOMx0Q?Q$~#5gKDDxt8%jf3YkKoK{4Ky;MHb9s~SSR(JveoHaXz?Y(-fwXNo@Bm9ea z)=iB#h(Hk=>q@XF*g1w}ZkNbNT2*K*#`;9&Gg96PRTg}0aJUm_Pv+0g^;mK2wmornI7dFL>%0A0A{Yp0asTU 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%0DEWUD@r+wI!!{^4)L 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 diff --git a/site/graphics/favicon.ico b/site/graphics/favicon.ico deleted file mode 100644 index 18949c3c8b683fdaaeeb3d2c6a863b401e074a9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmbW1+fUPH7{|M0ciV;A#V(fUV2ISw0y5D_G-Eo)aEM6dFp)wz7b=GpsV!%0*B07Z zeoziAP!wnx=YtauKw&0ko7u7@m>ptvFz~2P|*C&-=dL_xU^*&y&0o z$t&X8woM|&FiH8V63JTWG(Pi;dY*ocyJ45#NKkK_Ss} z3Dynf2ALPUF)otM_hT?6MpK&=LCaw&1-08Tr0vF-BtuoRgY#)o=oC_#k459y6GxB< z@i`|j$#-EoD5Ioo2UVxTQJ21p{=;yLJHs$VMbMrQNmM|)VRKFjle9^zM>;al$@cNb=vDJx{7S71Z1V-4Gmwn|FtnHVMu zl}uNbpw-FfR(>3+`TOckHW%h_CdATz05C6D_H|;Y9Pb5=UFUQ-c zWJ;&zLQNu*safZQ}L8#u&mSb_uWkZN8kG2Rl>{!@_;uwvw|WF__xJJO=bu8e@Z~F+5a;O>GVm7_aILk48)hTZ zrE2!8g6#EbAM^d8nAHtYT7ILH9ro6K6}fX)>|W*}+V8 z74vmkJiRIg`tup^6mZF0%1pV2nGy}YhH~8QLfm}?^t+WzHdQgJsbExample Architecture:\n

    TorQ Processes In Purple

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":558.5,"y":564,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2,1],[-2,31]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":595,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    File Drop

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":13,"y":693,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Discovery

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":452.5,"y":356,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[104,134],[104,46.90809452078793]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    On-Demand Write

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}}},"linkMap":[]},{"x":506.5,"y":490,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Data Loading

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":127,"y":603,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":121,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Housekeeping

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":10,"y":603,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":119,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Monitoring

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-2.5,-1],[-2.499999999999943,-106.14394894619477]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    Report Request

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":0}}},"linkMap":[]},{"x":113.5,"y":547,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-0.5,0.5],[140,0.5]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    Report Request

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":81,"px":0,"py":0.5}}},"linkMap":[]},{"x":13,"y":510,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Report Engine

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":176.5,"y":420,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":40,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Load Balanced Queries

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":331.5,"y":423,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Load Balanced Queries

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":283.5,"y":664,"rotation":0,"id":101,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":150,"height":14,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Client Queries

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":216.5,"y":653,"rotation":90,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":180,"height":50,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[],"linkMap":[]},{"x":253.5,"y":768,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Clients

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":325.5,"y":508,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":34,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.289321881345245,2],[219,-104]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[2.710678118654755,5],[161,-102]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-3.289321881345245,1],[189,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.7071067811865476,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":271.5,"y":543,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[11.289321881345245,-33],[-160,-148]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}}},"linkMap":[]},{"x":284.5,"y":509,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-1.710678118654755,1],[-224.5,-104.99999976158142]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0.2928932188134524,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":1}}},"linkMap":[]},{"x":253.5,"y":510,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Replicated Asynchronous Gateway

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[156,130.50000023841858]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    Periodic Write

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":25,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":146,"y":195.00000023841858,"rotation":0,"id":65,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[107.5,46.99999976158142],[-62.5,46.99999976158142],[-62.5,114]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":60,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":22,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     \n

    Write Database (WDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":136,"y":185.00000023841858,"rotation":0,"id":38,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":true,"interpolationType":"linear","cornerRadius":null,"controlPath":[[117.5,41.99999976158142],[-76,41.99999976158142],[-76,144]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0.5,"py":0}}},"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":0,"endArrowRotation":0,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[0,-3.5],[80,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":0,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[2,-3],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":433.5,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Log

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466.5,"y":329.0000002384186,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     \n

    Replicated HDB

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":10,"y":329.0000002384186,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     \n

    Replicated RDB

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Ticker Plant

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":59.5,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Feed Handler

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":486.5,"y":309.0000002384186,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     

    Historial

    Database

    (HDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":506.5,"y":291.5000002384186,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     

    Historial

    Database

    (HDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":33.5,"y":309.0000002384186,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     

    Real Time

    Database

    (RDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":273.5,"y":490,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Asynchronous Gateway

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":622,"height":843,"maxWidth":5000,"maxHeight":5000,"nodeIndex":149,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#010B14"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture.png b/site/graphics/fullarchitecture.png deleted file mode 100755 index b5a5148a7f80a6cafce106c39933d270dbf4e061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108103 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 diff --git a/site/graphics/fullarchitecture2.gliffy b/site/graphics/fullarchitecture2.gliffy deleted file mode 100755 index 602573102..000000000 --- a/site/graphics/fullarchitecture2.gliffy +++ /dev/null @@ -1 +0,0 @@ -{"contentType":"application/gliffy+json","version":"1.1","metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.uml.uml_v2.class","com.gliffy.libraries.uml.uml_v2.sequence","com.gliffy.libraries.uml.uml_v2.activity","com.gliffy.libraries.erd.erd_v1.default","com.gliffy.libraries.ui.ui_v3.containers_content","com.gliffy.libraries.ui.ui_v3.forms_controls","com.gliffy.libraries.images"],"autosaveDisabled":false},"embeddedResources":{"index":0,"resources":[]},"stage":{"objects":[{"x":150,"y":426.1250001192093,"rotation":0,"id":144,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":234.5,"height":40,"lockAspectRatio":false,"lockShape":false,"order":58,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Example Architecture:\n

    TorQ Processes In Purple

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":477.5,"y":388,"rotation":0,"id":124,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":51,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[62,16.00000023841858],[62,-50.62499988079071]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":125,"uid":null,"width":97,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    On-Demand Write

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":0.5,"py":0}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":0.5,"py":1}}},"linkMap":[]},{"x":65.5,"y":511,"rotation":0,"id":113,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":43,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[627.5,-431.8750001192093],[513.5,-386]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":116,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    Report Request

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0,"py":0.5}}},"linkMap":[]},{"x":793,"y":211.12499988079128,"rotation":0,"id":98,"uid":"com.gliffy.shape.basic.basic_v1.default.double_arrow","width":130,"height":50,"lockAspectRatio":false,"lockShape":false,"order":35,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.double_arrow.basic_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":156,"uid":null,"width":126,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Client Queries

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":923,"y":198.62499988079128,"rotation":0,"id":95,"uid":"com.gliffy.shape.basic.basic_v1.default.ellipse","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":33,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.ellipse.basic_v1","strokeWidth":2,"strokeColor":"#006800","fillColor":"#a4c2f4","gradient":false,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":97,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Clients

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":333.5,"y":446,"rotation":0,"id":92,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":32,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[339.5,-169.34199153021825],[256,-146.1249998807907]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":16,"px":1,"py":0.5}}},"linkMap":[]},{"x":321.5,"y":505,"rotation":0,"id":90,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":31,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[351.5,-228.34199153021825],[265.5,-221]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":327.5,"y":509,"rotation":0,"id":89,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":30,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[345.5,-232.34199153021825],[263.5,-190]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":0,"py":0.7071067811865475}}},"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":77,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":24,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,130.50000023841858],[163,43.87500011920929]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":80,"uid":null,"width":75,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    Periodic Write

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":51,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":56,"px":0,"py":0.5}}},"linkMap":[]},{"x":300.5,"y":226,"rotation":0,"id":73,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":23,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[3,38.5],[3,103.00000023841858]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":51,"px":0.5,"py":0}}},"linkMap":[]},{"x":253.5,"y":329.0000002384186,"rotation":0,"id":51,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":21,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":52,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     \n

    Persistance Database (PDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":353.5,"y":230.5,"rotation":0,"id":32,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":20,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":180,"endArrowRotation":180,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[-100,-3.5],[-143.5,-3.5]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":0,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":26,"px":1,"py":0.5}}},"linkMap":[]},{"x":301.5,"y":137.5,"rotation":0,"id":30,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":19,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":91.05118074954362,"endArrowRotation":91.05118074954362,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2.5],[2,52]],"lockSegments":{}}},"children":[],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":2,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":8,"px":0.5,"py":0}}},"linkMap":[]},{"x":300.5,"y":16.5,"rotation":0,"id":28,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":18,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":"1.0,1.0","startArrow":0,"endArrow":2,"startArrowRotation":90,"endArrowRotation":90,"ortho":false,"interpolationType":"quadratic","cornerRadius":0,"controlPath":[[3,-2],[3,43]],"lockSegments":{}}},"children":[],"linkMap":[]},{"x":110,"y":177,"rotation":0,"id":26,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":16,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":27,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Log

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":253.5,"y":189.5,"rotation":0,"id":8,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":10,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#b6d7a8","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":10,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Ticker Plant

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":254.5,"y":60,"rotation":0,"id":2,"uid":"com.gliffy.shape.basic.basic_v1.default.rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":8,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":5,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Feed Handler

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":533,"y":260.6249998807907,"rotation":0,"id":110,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":41,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[210,-144],[210,-57]],"lockSegments":{}}},"children":[{"x":0,"y":0,"rotation":0,"id":115,"uid":null,"width":84,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"both","vposition":"none","hposition":"none","html":"

    Report Request

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":108,"px":0.5,"py":1}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":93,"px":0.5,"py":0}}},"linkMap":[]},{"x":693,"y":41.62499988079071,"rotation":0,"id":108,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":39,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":109,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    REPORT ENGINE

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":529.5,"y":189.6249998807907,"rotation":0,"id":107,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":38,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Load Balanced Queries

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":624.5,"y":304.6250001192093,"rotation":0,"id":104,"uid":"com.gliffy.shape.basic.basic_v1.default.text","width":97,"height":28,"lockAspectRatio":false,"lockShape":false,"order":37,"graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Load Balanced Queries

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null,"linkMap":[]},{"x":737,"y":283.6249998807907,"rotation":0,"id":88,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":29,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[-64,-38.033008588991066],[-156,-158]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}}},"linkMap":[]},{"x":341.5,"y":387.6249998807907,"rotation":0,"id":87,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":28,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[331.5,-142.03300858899107],[239.5,-246]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":81,"px":1.1102230246251563e-16,"py":0.2928932188134525}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":1,"py":0.5}}},"linkMap":[]},{"x":673,"y":223.6249998807907,"rotation":0,"id":81,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":26,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":86,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Replicated Asynchronous GATEWAY

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":489.5,"y":262.3750001192093,"rotation":0,"id":16,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":14,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":17,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     \n

    Replicated HDB

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":481,"y":104.12499988079071,"rotation":0,"id":11,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":12,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":13,"uid":null,"width":96,"height":42,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     \n

    Replicated RDB

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":473.5,"y":242.3750001192093,"rotation":0,"id":56,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":6,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":57,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     

    Historial

    Database

    (HDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":466,"y":79.12499988079071,"rotation":0,"id":60,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":4,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":61,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     

    Real Time

    Database

    (RDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":693,"y":203.6249998807907,"rotation":0,"id":93,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":2,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":94,"uid":null,"width":96,"height":28,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    Asynchronous Gateway

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":458.5,"y":224.8750001192093,"rotation":0,"id":54,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.database","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":0,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.database.flowchart_v1","strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":55,"uid":null,"width":96,"height":56,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

     

    Historial

    Database

    (HDB)

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":544,"y":478.0000002384186,"rotation":0,"id":133,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":57,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":2,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[45.5,-36.5],[131,-36.5]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":122,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":131,"px":0,"py":0.5}}},"linkMap":[]},{"x":675,"y":391.5000002384186,"rotation":0,"id":131,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.multiple_documents","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":55,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.multiple_documents.flowchart_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#fff2cc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":132,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    File Drop

    ","paddingLeft":8,"paddingRight":8,"paddingBottom":8,"paddingTop":8}},"children":[]}],"linkMap":[]},{"x":489.5,"y":404.0000002384186,"rotation":0,"id":122,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":49,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2,"y":0,"rotation":0,"id":123,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    DATA LOADER

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":310.5,"y":236,"rotation":0,"id":157,"uid":"com.gliffy.shape.basic.basic_v1.default.line","width":100,"height":100,"lockAspectRatio":false,"lockShape":false,"order":59,"graphic":{"type":"Line","Line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","dashStyle":null,"startArrow":0,"endArrow":2,"startArrowRotation":"auto","endArrowRotation":"auto","ortho":false,"interpolationType":"linear","cornerRadius":null,"controlPath":[[43,-9],[170.5,-94.37500011920929]],"lockSegments":{}}},"children":null,"constraints":{"constraints":[],"startConstraint":{"type":"StartPositionConstraint","StartPositionConstraint":{"nodeId":8,"px":1,"py":0.5}},"endConstraint":{"type":"EndPositionConstraint","EndPositionConstraint":{"nodeId":11,"px":0,"py":0.5}}},"linkMap":[]},{"x":799,"y":408.6250001192093,"rotation":0,"id":126,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":100,"height":75,"lockAspectRatio":false,"lockShape":false,"order":53,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":1.9999999999999998,"y":0,"rotation":0,"id":127,"uid":null,"width":96,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    DISCOVERY

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":913,"y":318.6250001192093,"rotation":0,"id":120,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":110.00000000000001,"height":75,"lockAspectRatio":false,"lockShape":false,"order":47,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.2,"y":0,"rotation":0,"id":121,"uid":null,"width":105.60000000000001,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    HOUSEKEEPING

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]},{"x":796,"y":318.6250001192093,"rotation":0,"id":118,"uid":"com.gliffy.shape.basic.basic_v1.default.round_rectangle","width":103,"height":75,"lockAspectRatio":false,"lockShape":false,"order":45,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.round_rectangle.basic_v1","strokeWidth":2,"strokeColor":"#003068","fillColor":"#ead1dc","gradient":true,"dropShadow":false,"state":0,"shadowX":0,"shadowY":0,"opacity":1}},"children":[{"x":2.06,"y":0,"rotation":0,"id":119,"uid":null,"width":98.88,"height":14,"lockAspectRatio":false,"lockShape":false,"order":"auto","graphic":{"type":"Text","Text":{"tid":null,"valign":"middle","overflow":"none","vposition":"none","hposition":"none","html":"

    MONITORING

    ","paddingLeft":2,"paddingRight":2,"paddingBottom":2,"paddingTop":2}},"children":null}],"linkMap":[]}],"background":"#FFFFFF","width":1023,"height":492,"maxWidth":5000,"maxHeight":5000,"nodeIndex":159,"autoFit":true,"exportBorder":false,"gridOn":false,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":"LETTER","printShrinkToFit":false,"printPortrait":true,"shapeStyles":{"com.gliffy.shape.basic.basic_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true},"com.gliffy.shape.flowchart.flowchart_v1.default":{"fill":"#ead1dc","stroke":"#333333","strokeWidth":2,"gradient":true}},"lineStyles":{"global":{"fill":"none","stroke":"#003068","strokeWidth":2,"startArrow":2,"endArrow":2,"orthoMode":2}},"textStyles":{"global":{"bold":true,"face":"Verdana","size":"11px","color":"#1B1000"}},"themeData":{"uid":"com.gliffy.theme.blue_sweater","name":"Blue Sweater","shape":{"primary":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#CCD5E1","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#010B14"}},"secondary":{"strokeWidth":2,"strokeColor":"#006800","fillColor":"#CCE0CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#031C00"}},"tertiary":{"strokeWidth":2,"strokeColor":"#6A3C00","fillColor":"#E2D8CC","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#1B1000"}},"highlight":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"#003068","gradient":false,"dropShadow":false,"opacity":1,"text":{"color":"#FFFFFF"}}},"line":{"strokeWidth":2,"strokeColor":"#003068","fillColor":"none","arrowType":2,"interpolationType":"quadratic","cornerRadius":0,"text":{"color":"#010B14"}},"text":{"color":"#010B14"},"stage":{"color":"#FFFFFF"}}}} \ No newline at end of file diff --git a/site/graphics/fullarchitecture2.png b/site/graphics/fullarchitecture2.png deleted file mode 100755 index 7b6ac8067aa5624e9439ad89a3f8014d2e1b618e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113571 zcmbrmbySpV+deEX#LzQ?FbL8NEh*A5Gz{G!HApBRCEWwkDWD(-A|PENp>!i6r3lg` zAxKE~ch9qb&+ps&efMAAw-(E_oVf1mI`g>B^Ef9)M@xl__!jYv8#l<*R2B7Z+yKFD z+`zdeA^={&_f5yUaf9iGnxedcujSS&{6K>~>fW{`C{trolX;xEyN{1g12t!%To?=A zwpsR)POL&0(mkkW7DM>rp2KsCH`Q6?Gn%b_ZRgN;$3xktxny>&()(YG84d90z{xlM z<a#EF=Uh`X2i zZ*S|M76Sh5WUB25Tq>AzXHS;ezrD?g*p>b_S+QBeaALuti%Vbr_25*n69(X9Zj!i? z)y$|3fdKo?so6+a1?LWn4CELR^Kni*5$V}P;0Olb@kG)eR#AWdK)hNg z8Y8&hS^U5KNVUBh5FT9gE@?bSl}P~j_Ci4TKYZ%G2JmI4Q_m-We3&R-J0K}v??L{i zTpVaMEAV{ph)B0lYlRZOZ*%!7~_h*a-IVc^nhjTz~sOs30If z0eegM&A+|)UzdbG2Oi(`HZm*)P_HuZ?LgOmD%T0?5_}B@dWGVG<7$TjR5-=Y*PFCQoY3$iw*~60MfZZ}P z$7SPTpCuLEvnF^B)@Nom%g{|pRB&BMc_0bux_Qr7|wxpkSItpcZ7ZT>eA>}8dYjpM5~h-K{~NrWD)l# zhg#V%l}DTXQ_@8OPlj?E{nwbK@|Ai^t)||XS%9KtdzDfQSiR^OSw^p8)$fLlJILvr-LwP3yRY{0ds43)P6>BWuWKn>J zyAc4IA9_6~_;+)lSAV^6?8z(xPH+7bU#O5J_Jr4)K_F~u{!7nPOVRs~&TPgEyjE>h zrUKaO49YR#!PAsbI+#iGM)FzIqD*t(<@X8R75yR=?c6eL**ELja)I@#kj|2jZYssu zcYZUztE8{~WB={cxO(Zy?>gl!`+wh6NR!2FxI5W7Y+X___?Wl_|6<#0Ct+dU#iGP8AywwzaKiI$hR9{WGWL zlIgyly9I>v2v0pKaP~Q&u?_f+oFHJoPfOf~J-h&LcyfZlZNQT;S_?ln@4*F~gq4Tp zwyGqUUt1Qc=OqbE|C*|1V^JbvJP12w`;T#lnnQ}GT!@W!#3CQIIORilzTSV?bXrWcpdg z!WnIhwAL(zDymwm*+r{Ka{R|-j9@3+4w6ATaTTl;!IAeQ66IE&1wC0~OhkFlFl_<3 zy!|H-jT)u!NrBY2paBXr<_J9TJvVM;ur=&_!THAv>ncPaun~)=feIF%PNA%Tn}~%1 zx(|Nv1MX)5Mwzyf0C}s=rHbR~Op{Vlf}pM@ROU z#y-^K^i76!d7!{8s2dfatVEX2!GN;1w5*3-2C3_qP(Y{$H9-;bF5Isl{=|4QCfx>{ z18~(w!Z2-gC($vHScD2~p@EgOfTgx(4Rh4 zY%Fir1@WRgsez}Uoi*BY)%AhAO9SLxAFLKFg!>xRn9`uTrmvEjl>%E@^6m^%Q55bF zXk}q-8HE+t=Bxkg*jj{bffIa!bIA!rDpC*n2jffP^rGaFe`RGi3S4Tz#o@(mh#OIoka}jYeG17^T#O`(`BGeSM`!>TmI$o&| z_*V+R5^f?``633d)Y`4Fhv8*r?8?iq9&8ri2J~^vggu(y|5ir(Ye3b=ows%)MH>wS z2|@=EcRhyeFQnGAe_yr_M2w{R45b00Z3UK`eBt00ke@+$9}}1Znh6IY*l|BBpADx8 zvdf1^t1)le;&cQlb2Epbkt36PTv#g*fK^9>vqD&?@F=6tTtaT+OT$Q$Nh9TO$*~C` z%z_uKa?d0>oIi5I_U*=?byn-T}gVW*ij&9xQOa+j;>a zRc~iOh;ZQnAJu+F4O{id3f~m&Ai|0z6WEijT@o5o^QXfRYY&_Vu~^=7cARi5f+_C? zLXeRRoDA@S04R22jbA#5XyeVEPt(UI69R}L5drLKG~$OW7#a6{unh|4kpiDRHN?( z^xe(DW!H;F_oapYIlO2pE}__To`lpQZPV?&-QD&^NWM;yGGE}~xbfLq*+hj>_;XFZ zV}mjSeAWsNM@n}}Uc5a6RFQH2~vZxE5DS5;xDHo!FryP~PdV_6250LTw z*xc~c(0%X;70h23#C^S%6aH^*OAY23d~Ab17-VE83j)%XclYLQ%{ z+af0JJZ?B3Ek9#dNwql)guDTG1~XGkHZFJ)iM5?OWIukjubKhLOW+YhgLtDTNiW^( z=8>ILV~`Tz(b5mrXilczACh*y=$;48jtfIlnBPV1XiNWe(3QCwT-&UHvZ-u=xbEK; z>Z4!=Wium09)HD^mh@4oA2j9rR%zK5`R1qkVt)?a?jQfq#Fmff<=DG8dg(4C`07-> z+nVMOJ~NTe(y#oz6{bWU>g226Ef`L}N$9gRj>LQj(kWHwGWznKa(CG$e6LV!FrCnK zu35fAPbuA3aNKxsNL9QCcDlZpLSq@i=-I^NauZMEuK5i#~3EGJCfD~3b zGvys|7A^#RXQ87D@2E)zkzvjDRnIx?j8xgfq_YepW}2ULKDLNGv8JY9apGkc=+?@> zRU3P7%z>J8(eb8QA`(+TInK8T$I{%1oe}rg7>Fnu&RKjh-@APB2`1LK?>f`yj`!2a zsKeE^S6+%j5tRI#O&9&(OSVz~Q*_4e#7na14O;!S;HxG4v@%`VuOY9>TObnLHjBx> zKD!>a|2lLMbU!m-Hz-#wvYeHni~3#n^kz2&Ri7a&JRtQ-Xnr2i#WS zY?K4QRZ769lM9HqjES+UZTXUQ*1Pj5x6jH97y>JM;$KkJEU`~CM8lIg4Mjg6$E3?G z)GFx#S?=Ux{!&BzJRMEaa$&B^&3kFP)^m^C^;;faU3JXz`1&4CIW#>Vz=y!cR(b8u zUgj6qX2?J!QB3(=#69~UOK$0ys| z6R9aL>Q!~$IN`MOQgz3^K*bP#dhckxqmHXGIGhvoOP!EiNUAZw(8|7JvGbEO4moQl zGR#9WrN!;0(Va zCXLosq=DGUtR?ds?Af0D#5G?>ERYK3xlcb|AFB_aT20pPYW4kL5F_9<R7nk+ zDyg8%GOn!49$XOS@y}BD#4_2k$8VJbUJZCW^D*Y&L+xUcl7?=n3HWpVYHZ|L-LKc4 z(?=(I^i(k9@eZzoHtrBMYh}I{rv}4AvH4*%1C7BM%PWKS0)~m?#@q~dwlKMJx@Tob zWctTg?m6zw!<$p3WElK?VG50#U7s#DQ4?W@&n1;mj^9E=$!_1qpCdcF8wb|DZIU^n z7z2J46b;7MEgf*3xPK#}{}FU!Zn)*}AvuY|;CT03TS!$iMJM-l#Ib6YL_(zzXK{DL z@6CIx)yuSN{Fc#2vrX1Hf5bU03plrD+mei4O>L-0Uru{(thG|9U{3Z9Pgd25j13Tq zwssi0i|+!8P$C&1E_OKdGpM##5SesGC<6&MS&R=c=wOF|ctF0v6;sV zN@f`RG(@cr<#oc$PP3h3#2USry(=;!UJU21^HErEIIq>D8~q`9*kIZnaj0-xw9fvw zdA{wY_wxY|?fPjP&D0a!#5m{a=9?Z=1B?qNlJ}hD-;&ZEZV*pTxDXqllA~UfEhFrB zJ)I01WC)Ia#VLZJzZiiGmK$=SW~>~Yq0@|{MbQh-Z4ktdat9XK7CKh7}YqN*dGx$i(&dltWVJYr^cjX5hG^8l4mW@q0iF*1?P=O=$` zUV#5JxHhR8+3`tSpwn%L5|%BlEl#$S4#n$?AS=`Mb8Ao*?3fkm^;KhX1QrG*(B-n= zG_Wt|qt^5Of-BfU&cYNu$l>5r_U{J2_TgWgLOG9s${HJ z{#tt5OJ6l81pd9Itr}@`SiM1~t=Z#a4 zXrenM`dmB(Sn%?DsVZ0+#Nl`E#m9lRuq6)Zhwu2IZg{x%f_Y7)*wC^GL!dkPfr3mB z3kEJ9)oHcCp>n+^7A?Ii7yw;2y&JjxcxjvBXzO_pZG8Kw(=pS;r~P|1{(XY+D_J>WQ7yu_nYFCQuLq`Byjs%dLvag1tpbZWg zJRv#mb@#3s%9kpw?==1u_@MlknqbEeDq-xE0dsb%uSOivG(}EVPCkv>-kCI;1|>PC@g}QYYB=Yg0K|Bm^x|k1Co~kxb@&kU@~YX765<^>NMf(VGA&9V2Lo` zsQ&Og)PVisoiz_ZT}fz%3(rSUc;aJWoZ1YXMm=+bhk~7}Yp0=?MCCa@XqqOp0LUy` z5V`)z;b!Oa%c7dKetgAPN-Ywi4gGGFFy|7Tx7NyR{P*Pg&L32Ga>MRewnorDz094V zyr)Hf(X{NU7)wRV&K(pdV-fI1{Zu=op=!Drvj2j&bLZEIsyO$bp_V4Ns6X2(?@QOk z*{T5kCp#nfko0OM4k1-pm`akukhA#6=K0lGYi<IQcfOhC-bjkPDjx>{r)->MYZpL3@MN-4x_-1{IJ z%7r1H4tyD2+Z{pj;?5hhE(wzsM_QS{-IfZ3-5;uC^>7vd<(yT}oj7bhW>ZTu>HF|# z_SRs=Jvt|vs`l_Gij+138v{No@a&Wi@?d?`eQn#~{jV_`Qz84#h!or1voCZjJi0`l z9NG=hV10+-_ELNeop+AzvqeO7g=K~SJomURpMT5ZU2gJxa;~&AszB`-i${T~mYQ%6 zsK|PiiEY6Hi-2-)3FL5xun6emU4wM+qcXfKCvZP?R1M%`E>Mi%N4u=9QkBV85BmBF z`Z(TGo~2C>zGM;2O6!9`l{UqNsnf2LfMry+R5dw!sgJ_mFN@LITMgoYFf7~?Cp!fmE;`}2<*qf*NooB(j*G&PEZ zrg2Ave!OBskk)vtEX*R(!8bR*wO7d|bu{_x7~qGNv~|ZonVsGa`Uha5!EM9YasGTS zU;Dh+E;cQE$uF3vzr)a^)FO)w++!6@R zyt%`Krzc&mVH+AIf3n=2aEfF^CL;c($^I9#5v6&n=Fs-OC)ZtB`pkG zU-kT~B~0dZxl{1T47A}vrBaHrI)Agf(&2J3!jgYQtL-UpMaL#)NQCochy_vZo|y4k z8Wwv(1LlZ_hrd0fdnCBH=^AG{9NFf!(k+-)W_WXroS`daxlh2om#WTnal6Q@Si#y632wVw4E zOzGf+srvSu1arLmud{k0T*~eh6NkaqCz~XjTUvBm4;nI>d~v>Cwc_$gHYi-p_>I2J zRFk6&TlzE3Gv%6RyYraZy}b&%%!hYt?E_wAg4XNSs9VC8$9B{(#qP-ukA>g(DSG~( z3j=PiBc9e!H*O#_YV~~SP;Ea1@@u0Ep$sdw3=lYZE5Q_1JmM%I%FmGaCxIZ(t;gHQ zYyZ!wzVB=+QI(|e0s3sQ#p#iI5MC1F3?^{kjyZxwDdw%x)8bKER`vHL(MyXl{kqZ+ zu18N4W9e^0@_mb?e=tN-a&faL#$$FNtgL|%s%OMBGAx~ual3oORYwn^^y6}>iSm!_ zv+ggn&B!dYa4!a5U%le~8C;fF8IXTRymR~RT&v&HdsS91D~*i6{*=aZz!UXTjr{nuAmvW37z9)ls1Gg0;Lz^kf$;NL25z2D5 z+WiM3&g0v=TnOLZ-H3^B!v3N`>Ydp(3eWWR_aB4>AFe*RXn9B{B_+kHACwum%f&chH-Gs5o!zmoP z{Nt%jYWp5BS5j|ywD?9&{PI5>Fy~v!-Ne7ln(%1(MiTUaH!g%7 z)O^oM9e(nfnwjz22JEc{Qlx1#r101#q)O^E_RJ^vr)sg!=w9VDAiPv%GN*jTH8B{ zkqZ$(-eRZ{1*<1M*2~msahK-JkkF?%yt*We&_~Wn9-gO*8s55W+SmL6ojmI!@a>Jx z+exuyw%fC+G@#{uDMJX{5Ohl);kU4(ryA!Ez7v$7;4Y+g$WkiksO zY5I5h4+(!}j!YS3GHI65dQkI4H`Xkld<q3$4#Pe!xWmB3t>%s(X}A z`KCU@dgg-T*j6s+|Lt(ONno8ywKB6@Q+)XclRT#1iTW}(vrUy zdrLogIH4N@EvXyPd800ly6`KfhQ0K86qm?1ZPpF?5OOs(zxS12)^^_B3lk1yT)EN* zuosET!N{WHc%!MCuKA%<52%dIw&=-!xc~xt2&h{C07qtIo@U=7Tf&Xfq0KQ~gve$CQRbht!+X1hwdaQ{CR)tN15b+|eMUYr_>sbCN6n`C9K4rW zpu%hTefTJ*9k1^9^3b7YW6+_V-;iUkpJCat%x_Qwq*n<$T8vW>Ke{$I z69HAt_(^;@%E~1BH@l`2HvWsd8i}HJ)W33&a zQ2I5+Qx56|26TF-V@O`D-3yy;FM(?5!bhnLmG9_ImdBoMK?n?Wm?o z9B`@w@(q=#SD~V{X5#XF!Mdm;4`6G}J~3sbl(;YRlu#$O)%!Qx3gp1u#g7K?8pL-s zk+{rRK#w5#mDNxp=mH`T2ex>hp@WIIkCMB9_UfbD+^I1#&A{bdz&T&^I@N`=r_4v` zCGXRUZG&d=?!dj#%gwVV;e8b8r*F(0<8bn`ahcyfof~M@AtkLNlsEV(`?^&*o?g>p zAXL{vs8SoR*KM&UR1nkpzE6H~mobPU?K;etsrd6s+-owZLAkwxa@}wFbhL(ez4KGb zWu>4Pa6Vk1RhU+wHORL00xnSco2aV0Pu@y<57~UXSyP4r%|vT>#}2_&BovL4PlOOe zbHkLq{GU2xvrR?lHq(^5tZ8re9;Gk8Kh4ju)}q$|z<%8>#uuo|`c=)-G43AC26)AY zuMr;RoDtiMvlpH(c17y$NFFkfEWzddwo)^!C7vaJsRN-6?%o~+Ze4YLKt+1N5wKl) z&5X;`&<>&#C@k%@wMIbU(PN`BLpq1ySNn%1b5efQj&t|xtRXK>7V7FYzwxe7YZayX)>sA7hHBrrEbDa}Hm;kie<66CulRf3FliC!?l=+d3S2 z=>WL1@x47)(<5wiiYNX3iqA8RYvI02U`DN*<^w(x(~z;pNr=c;ewjOiR;5or@=j_J z!~!*?Jp#&;<_NK*6N;tH&kzb0dGL)z#em&car|upOQdSLyxU6y zkL<|?0u^umiJ(>fSrEQ@)>Z4eq44vo0T=QP=B=DzJ)i(N_n)gd(21c}0&dj#{qL-x z0-QLxXp8~Ji~wzy|8{#VJ%#z5S3Hg~l7N8*FIgsgkZy$M;4KV}-# z(xSn)CA@m4WQ|Utu(MM9kk!G=kz)CUpFitCtDYA_7EO6}ajWDvVT!5%YSD;{_o}iI z?4W-I$Ip>ygg7K!6v}RBzbZ_g+PS`~S1=qW2G*B+0zJ$4bUtwaXOY2{cMn=h$pu1O z$>rKA>n-7VG5wULh88EzF?#lfZ~7z+>)aI>#r@V^LWK<3l|DKvrIe|H@_q zgas^I31tGb{w5x@9~TRj)(CYF`B{_x(^NplsFQl65-L}U_Tkqv*+1KhT~ToHM{3cBzw`(ZR03lQD5ngmI+wCRJkQ*hI(G~IV zt`b}7wr`3z8ohq9G0fdPC5?tNnS&o&%9Qlr1>805Kew16Y;et8Qg%Ckw#MG7$n|c$ zf{{hp*;GQ$N78>;!Hd4INIKG*@i7wH_yO8*(eZwOEh#dYVBwKx z%My{g9r7kS$e_dkeEMhAu+O|@^xUr2{u3@mop05AagAAZk;=4D#oqB%(8*$-&1CCO zZLjU404iPsxGdT2*f&bVwqt1}C-WiKU6>D^HK)U}f{L^ET*la>LiXqrUW#@l@3g6e zpB)CKGDas!}kw=KyUIGjbJ*HWXbw+ z>FyOPU9qO|?pJKrs^u$Z+zlY#o@x7Jjdk^;H8v`yw8hKXZ z8tyD~{QhiaO*s#OeC-YtROYp7=Uj~g(uqt;$l(Q7v&d3X2hkk0Vz!ZLG2srOmo=l3T%g&yqLGM)tDo+~5c1jbdC z3gHM%UNiv!iM`-rWT`U|XD~!vD@Wp~9|?7FEO_3M z{QGJ&kQ@r){c-_MruMbN@TJ6Uyvg2m`!%ARE!nJ;d$Q0FvlB{m!#+<=D=b+<5ih_P zItgv!*&a_PSAUR9OlDEIr|Z_}=Aj+B7+tON`o8`H{`)$UQRc-Zti_f<63qtpKA%Q1-!L2ILA1qL)c+R(TMP@V^U~ixX0B+ zHn%%sry?lgSUfq@p^ov%j)?UWrU%}dxCGcX$PG1XBDMt-R_X;pK>7LPE_-wE<;P0W z-RTE;{JE1pTVvz%PAqp&x#AijXRh0>6;ncP$J-VmXpFOGG9MYq>d;=x7x}}g25}MR zXqV}Re6OaX=k6*{{hDB;U);Vk)Km2_#xgQH_54_OJIe ztW=U1zD^@BV?g2e=}Y&VnxYK1#c!5CiO+{#@5L};nylMX9u)D-l*DN<^!H~_!I-=h z%bn~=vJ$u5O`88UC6I0}qrsWN4!xy@Wt1FR^nCU*L1$Fq1Y}5{ODPa?6=)^H-$Bb$ z?XXtLT@_F|Rq8ODbM?5yxQbx~+Ohn5y5Y?1-2-rMJZ*l%E2TK{ zqS+U6NO!Mym5lD-IiczMTZ3trcR>{bJ|%w@9JQ7*nM%& zUm?ve^u{UZCMrkMDK7~~zXg;0@$|HMI}ni*mN;J+;B!;O^L}ff_{fRR_DrF6?k-(b z-F>?_0Kl1OeD*#5p@5(B?JpE~2X4;7XzX8e;4JSqC1NcZL5Jivkc_ga1T&}sZu41dZE1XQ2OwFO^N z@>@!k-~Rxe58O}KUS+JaD9bDzlL$H!d3nz@F*o>3%{Vv#E{KdP_&h#ec5{6G6%2tI zIUddsR5)I%9WT*WIew*J=#n{o^YHj#YvAd(`B4XmuszCRoCy=|M_=+F`XM2-*SBOM!A_n?!45OMp$`CD_Z0J_`e(`4EiHrTx<4(I;TE?QuDGduJ^iaqzEm zmSz1Ll=AH}KxUj6FsS)Bg{g6$HS3O}qxot-*v%^-9LyYSOigFvmGTnQ3VFeq+*uW;9*{q7$Su&H!(u<=#*-2=6j zV%aC_lv*Vfh87>6jFRk`{@NJ=LbuI)YtXLVn}^p|mvwz{!-yqhiC*D>iC#JrZkThM zn8!-=wuY453N39>wov(PQD?YTj#NyAdBYp0iOR+&8&Cw#SBn^JbSk`-Q_vKYc6om6 zB-qJY+@GuTguEEwLYdR1wA>Wt%)$QaRN zSkaeWEoK3j+@Q=%Dfg(_dsgC7ulB9xUc(uo_fC# zQx6aoFYOs?J|LL|hCwAP$x3ZR87%PV*E;pirkBTg2Gsp5meix~l+aHla8$SnS9VxU zM?Sx~?1`iCm&6!|^$WAyQN0UPW!^Oo7jVDxKUmL;xx6~xN&aoJDtivp`aB&j&Ni!B z`@dIO(AoASjw8F@*?k^qs6xM1#4S1d=($EdR-~N-EA=l|Pv<8SXFbQifmOE8>92{HEkAz>u4qi=AA&b_he{F#WxoZ?E4*F8c^hb z!DFs zZTGIM2wK`_^|ub9XpKM!cbmg7L${%!?)B9<|DTml`8<#ZPIA`haNcq|b7bZH54^d% zpW9j3`q7ruXEOM>8!C$6J(}d-utUQ`BX%$U`1emqXpksUJSgnJIkHIW)$ZYh)$;cW zbF-1;lLDxG1o;nc-OowBJVD#DO~$S@0>+H}!v$5_kIpC7xAY420vQhF=ZMC4IKLMZ7L5ME1Rj zH&mp^x}A0F@2IBsH2QKr*_s@++8WCp4(NHJ+j}?e_MdXzUxjbvUK%je3j zSY0U8L7#QNzMsH{9nVUGqsu?QEIiDSR1|w%->7P8_neUsbbE><>oQU=dhXHs- zh!bI=F(7^nP^kVxZLh?(Fve*YPS_S6;I?*y4F8V+fLH6piH6px1#Lb_XEkl;b5sV~ zA224l1V5*k%#|B16?{?z^9iXg*$?dooq{Y$33_DZNa1v)U+oJ%9f3|WooSM_Pwi~( zj1%1CHfXoDQw~^Y$N9~}6j}eS@%co-l6>m`u0_34bWGj})5%R(z03651}0Unh~ZUZ zRPsbOsUG#8cXu_ZkAA$f>stMirQ7W5-ttq9oBKgiIQ-r~P1{mF(=-DySH5|z1E!m8 zTI|-{M+FV2=z9@FcuO=8oe=bcEEXl=mO=$7Siv9p)|WjI?Mn@!w7_}9f$aTxFy*+X z{F4j$zaSD`#FO$eZWz$%j`3gU0w_XsJV5&{>NSBiqu`>hPSl#GH`_>UY0+#qXruo= z4pW?iX~8|6-uHT8Oq$&{fcP+)@{W^6p{r2i#jlAK5kg>=0#PIrz0Rbmei zt$lAiPdiLD8}lU)Us{j-mJ;Rz3ai$JbMsAV(44R1os>YywtP;-wjqU|j_~%>k|&f# zc4-@$?*Nx~lW3oCI7&S=pa<3wC=oHp{Q9Z@S3UyfDLj0LHS{Hbkt*lJxEMsvMp?U> z^wGy3Ax0_GguubWw(LXM1VB(X1P~vF3NC-va3TUTQ&M)SqyBG~x&JHaUQNYcP3F=4 z_jN)Y)MDs2oc6JQ9=3^i8iw7h0Wffl(@63DFGnmOS@Og?kzo7WKR z*ozm(1p_k^Js{QxSOzZ)3=lmedYHz+&Xw#;hTt~7JO_+ZE#<-JZ)U`UA#?H_*=CjW zRas`O&TsM*k=j$Jg{uk@6X~)xp%AigeL_t`yhJM41p#N=Bf)}nTS!kp`?}^Jon1gg zhWM=tfcs%r4ipa_qrU_FX~-X7N}+ueOKo^5aL$1f4$va4%On0n!gNmPWkK+gV;qpP zNjcy$2AlIz_sM!R@4J<%=&H|ka$_PNoXMUZPs{ylf7WcIUVKu(IkX{GEuVg$(-5re zx-^l@B#)bsfJmTnjs1h?_VYU)ebzU~r=^!3pH^?-8t+IWkB-`y{W?t=n{6_jFbl;1 z4O0ski|F9W5GMk|qW}>tuOL}~{y(-s^o2ukv9coRjrOeXS>~uZD*5PO)WS<@5lKJy z0d+g?*a%E=Gg=b(0^;ZYWlgQXSCn{5hYji zyv=&8?b;@|>Sb{r9ltzF^;NE?qsSxi*j25#+rl3SODJR%|HHrrI#wzS45Q;J688)0&aX7TSdMsS4zI4 z;$ASY(uBJH6h3{Dr=(2Qn>kHy+2$9w>BG1<^HWl6Z=TFq_CS_i(&zT*8)al^cTEbH z7Yo(kbKIVNd$}#Ru0rqTV)4@TTnKFK}Y$%2}!=9Zb)x(*|}z}ZRnygonP z+1;KsZw@$Dwx~KhJo>`Z>~}f#q{TmMqAF+kP{Xy^|CF>UN4D!TjrQ)?IoQ%ywsYU% zm;c#~Iqha97R;bUJwo-aO1ud;-S-(>a2YXMJF~Qadqn>XbRWwQ<0B8{afj3EFq=I#G+f1>Oi~j|3}Ah_exr(_$vqM1?AW4A|(QG-CZ6p zAxvv$#3`p7Co?hz!lIf1BKEq-gZ_VOI$ku{{!7zQSO>V6v2Ka`w#6O*p&}e8;ja>H!$N!5xA5p;tr9T>R-^e}=qHv%t5k=B%i#t}5cJ=iQGI2X9-l zFeS;v{N;kWv+uvZHst|>OW&n>1F#hP3?NS4(_&EI2zyNl^j3a**&#^xS7eR=Ca5Tb3*b^9r0!c*0qc{ z`ytB(DiE0e1aG;PPqa-N&Sa`AHZSyselV}TTDU%N`ajb}sY79(er#WybzSSp5P7E&|jel+Q+hD7-l6qUOGBc4*=)oNsEyN{! zB71xJAWt(xy18|`zY1qLhjmT2?V9&~(HQxJGgnd3)?YH-qGg7 z(|sr?#bSHE%FNO1gY}5yS}G8X9%CCC=7n(`&*XNo0|5mRVL+z{+kg1$&;ik4y?0jm zU*JI~8*5E&9H9OkW^SytJXBXZ6{+u`z7Q_D=w zzQ6sLR^xz9o&~}R^FX1H@mas?&2xtL$jh6=CO2Z7hy;5zt%5l^}9 z_G0>p*!m`yWpqP$!>2WQQnvho!a=s51_XlER2^)}D7(&Lt*YJlRK+ZT*kerH?~6~f z0N*WJG=vH^7=t$ew3if_)=xhZyQDcj*3+zZwd8-Gkp(J8RzH8gxdY?JheR?+2UUir z$kNqiJ}q zy7R%$VCiB_{L2#ZtN;iAc?BK;ZM}_4^Hom$_777h0uGBW`^~D~T@}nSXp-Kv3cR1u zWRj@l6s++~%YBXV9i<1w%kw#=KWGxbd$0!pG&Q}u{Nd)I!(DVo{ z=AXU^yyTRLCdwm&kC#va;-?dc)F+6C3?kxz|7bnad84cd5tWIhPf1$ z@C^H=4!V&atAR`iU8l#OtO0gphxSu6(2u1YX%MM=y2yGpq zKcxRNo(K$z^JoEsh`k&D)!GrDv;72T0q_45C(^o+NDaH_MaU5OjH6F0Gx$rjXBlT& z%kc^JG<~a3w|f58Cu(O^rvEL>l!K=$g=TpdRdj?({*4D=Q6d}qcKc{+^Tpf%hrASw zVY#OkU{r189R*TeM>!l(&@|T$G-5m1;;5CFb05ymNtRxAX0z4?3}s6#H3*pQ{YP`JwI_mw zAnwk=Q`UfY8<`8OegO5A1XKMbFYjSi*YIcDDqvzUp7&jDG|sZhzLKeLfb8KIiMwfX zn=isX5~0xbf-!;Iu7;i&{Vgd6KPCO1JX-_}Ki4Zqo$ zHu*Xe1-F~!BPV9mgr`^USpwv$Vay31C!X?8{5(xK5V`z>njx-{_XZ+#Pwz%MbZr{X zm8Mp`=X${Q;r)6ZDXTQvk-7UpCnrI?J1-)BG#w{D8gb;PS?16^Wc<{9r$rlQN&hZJ z+mk3)IsOQq6_gx`9l&d)!Quq$$hyw}wJkf2Bo-&QI8ldX2)qLrUqoR2=U+od>r9Ex z)|H_!=T}eZ?{Sg%)}AiW)mg~ZldgZI4g?qyG&l?SoV)V5Bd_CW(sit5K6I=#uEH1w zF(f_M*f#MDcOr4?{$!0~=$f_D&CG%Zdw6$CTv@gOp^ zD{p-K#vkV1^2k&Yw8M&1hW$+jVwfunFri3=%JaLZ;@lczJIoiHT^y3I5~ri(s1lOhRRv$gr1TpNEjfWHTJ+i!*(OJ~q1`c8 zJpq1rU=!>w0@M}wG6EJ2!A>n9so{8FG3=;g9v=@ZTUBNu?`^fvUqfjyt2&>{-_ zP7eCMEtyav+tBgFCr0N(aKMb;F34uwh+LfI&tX=>FaIb)?FV!OZs)CPj>)pxTgDW8 zWkI%4M3ea74B#mXl3~E8<}2*&s>oT;2wIJYyywSb^VDeJb)2AD+#i_5ObInV)OdWq^_$98NP@&v=PRQ=+Yyi+Y zoV+EuWiwQd}X-wL?H(t)vBc{gQ%7D4ad>u&_yW*MafhMN}q+7(rkkJ3M0#1VUl zJoqj2Vb`LJc;?Ky+~A{^2*75O2qMh^A#Vc;$h-41+s%;!pevg3Fz1o=fL^rSR#eSU z9tOQwV=l%4w!kgEEX{$&yzjC3SZ2$ZOUTJ|5-%aYwLbN_#vygAKba+L578Yx^9&G2 z1Bxyj5vGHsg%)c{b1;~J1EDZtfOgWJ)y{_4S{zL#=vUG~0u^>o*U1atYedYUFe}Yh z;SPIWa^Kh57Jy^&ei@z&ICzr_2{hu8b8%J0NZ9>(?RmL$wn8Wht)>BXe8lo87?654 z_Vy>t35-ezPy$0A)~}P{u`B`rTmg_^3hzvOXi#@V(__)iWZK8MANLNrEz`2&ev};t zWf!?%lfy%whzcSFHcpe|IB_v4*N4&mi8qm13!2MXuY9d`Q-0JvK60q(FGuam;g zzY7~84CsPx6;5mI-h7rlNy(#3b>aDk*k9yM;niFTQ4%L4fl}1=??3+13G9<-5xjZ; z{P+WK5K2AaP0RgvfSjF=QSgy(E1A~Xf{RN(HTreM+GL}{&&d^E)ZeBQb)ICxv268c z-~N9Xd#k88qo!*xcq74G8*4nc26qVV32wnPkl^kPf#B{CG(eEx?(VL^HMq^w-}k=% znwg7PbCcE0Mf&M;>eSg)wfF9o)=2bqNDe@U;h@ZpcO}&AAk?6m4N)ynx!8Fbs$oINHEm;I)o2u$k9C-HNwCK*Uro z3l8`d$sNCg4CLwJKOQAl0&|$6=a+eh7180blZj#*46YK*`8~c}|HASg+kp0Ff2LU| zCR5NKP?u5JXYlddUhkcd(2S>%1I&F1u2@Sg5nn)FG-J00^5n7m(wM^Lbc@vUZb_nF ztJz4}<)=DYuyfI*FS(EdYRLEsFs!38e#k+jR|kKe{jw2FWAqjXyE&CDApk8(LtBgV zsYay0>;GCR9fM(Suy9TnSOl>CM^EDVL2IkLs;%}PlgI}^(uWPVvTHpn&By%*+Z9CnT;!SgUMZSy&!Sf!U*=4oZmw8M3`$WD-@am*(mhAu z4knn+hlpI9u6laCPOFR<)(*^HVc*@XzE1*88I0#{{oZwaJSBS)Hm!u~4Z8DS#=<$g zO%FFiHqG@u$t$Cx{1Lo;m0UIHxgxJ%*o1UnThMb%8BM7RUXblD0O03BB+Vn`|I?}D zSP9t1)%e{#1MGnV2(SF(CTX;>}vQ{->0Q zt|;dD?Y;9~>0OU{h4J5KQJJ3Ka_4hk_}U&R+=RUR{?MXWu~WMaX;?0`;i*BCH+9%^ zU+CD4$K$UClGs1`^$Q!cKEGiJ9qIq^Y%y7>h4r+MTYIS5Yj&|yL2b?@#M#mhC zSu{vQIBK(X0VL2H1$wm(3REnDHqBY2Dued9fXm3^{haU$oxdhMCIW>uO{0i<^*VuJ6ry^y5Q$^3(A_ zake>%FL5u`X>EB5&`v+Bw+(3Lb(oJl-!0e9)tpCv7zeazQ>ZW4NyA$^snczavp@AT z?W71J#pNv*8a&_xP2CRX3ppt5%DBQPc(X**U?$g0*H<8KM?e;$W6y_>Y|e!CD~|Sj4bOq(8Ub} zC0+T*q-m61+te23nk-(ry`JjlBq8^IC7WmiZS|f(Se4OErkbd|7w zDMJbJZ8#ObJIAVn3U_{=uFNI9rQ(n^5A690$edk=B)CZVTrksrzXqq`K#ur&0&_ox z&Y=_Fym);?`MaJrg5S%O8^vKXl1j-?TlgVQ3ZeZ48IG>9uZQ-1Jgp+t$ZJh1KE;A8 zm=8Eh@S)_{fXkXA50Hh&AY&K6xIC526ek}ajWF4lvGr%A(sX&mL(DEKy&o?FDI$Ds9<^8%aZoS;i zq)}@4!INY_?yVG4;@mRjgX>YSgbYT$$tp2l+g}ROyW1Q&1`uuSt6fvjrA>`KcWTlD978RimiBe-w{i*h` z&Uyu{BE6x*$yHu*uxxi$D@0@?w?P6|wZ`_@G?2&TSh%{X%*-uHYWgqVPmWx}KzP1u z2+r3w#w}I~=QN3Tw2Zi8Nz$k&dv=(&v-m%X*2jAvR_Ro$^vIv)ir+os9N*ZZXOaOy zlIi~Ur(B0Vl!r1u!fuZZ>IGIZXlsYW_E2cpV=MU9)Xb(D-kadGJKuuUTasReGXgp9 zAWVAtRy2Wcvc^Qzd*pdcgUHB%9Z+bU>QpIxIX_^jw!f0*vRqYQ-8b!zsECbNsWnX} zZ+FUkAY`|s?+QUJ?hT4M;53>Qm~MzhnEsqQ^?UdFYq;(=2OHpjsj|0Rs}2|T-b`G2 zM=6YS`$s{S-)u#Y|I3l*j|ziQ-?9UeHZ^!`l95#?E=r$0>rO6 zuN)t??9k5i@K#BF6!->o`Y5k5kVYV%CbINFU4H&!dI&h{v3H)R;hVr^y{fApuk#Tw zaN_nfEsV08UbR#FwZ_MOQua1#HQ6^fAwjdvnmIKIV9CiA@vS5{iKmvCiw)22;x+$Z z)W4(%Di*}-VsfI)X#Q!XoGm0}wi~)}=S7UqkC}5Yt{FEn?60M{%14DCN8KQap?4 zPlec1nSHFY8FAFgyl;KWdOsgqssd#d>hbSUNftxEF z*itC(!5m#Db-oue_E4w>mvrI+yY zWe5J?zxho>EF792fG(P{^-}!YQy?&Kf~ZXQS4v#lvzE)f`^Psm_mw;hiPYQx9u6++ zRb1B0DmN7&K~D+RT#m_=uQ^VcC~jcwmX=Wb(fR-IxD$o?jo?H3;WEJUEf+FNB6h2;RSKn1Lt9(-2!1J(IP4et$UtKVYzYahjOEJNrk{2k;2 z6^;8B*zXPQn`7nsKOVccgboXvL&^|1!R8MEvMF3RKF5ht?ZRF#01@C%J;3lQVX2Dy zx9sC~zSD#<-0mQraF?Yc)R4(x!ln7+&d%3Xq>Pc|2O|Z7!_(4l^fc}JCD61fn!UK_ z%OiwEDsRCao4p(Gj|7cEv&G)=ms6UJA}E}(+7ee;xE#C!wEApcX4f%Qb5+J>EH&8M z-?_&EigIj%n7qM`k7a6`(OIqm)xTBwF9m|Sb$xL|#(A?+&Y#b72}SG@s&u}X59h|Z zjARH?zcXkG%INiCO(@qai4tplpait%4^5lf(xyFk>}?Nsb~~(=I^~r-K3t!U<_9!V zp@=>4gbgPBRrrcs@_P=ZkTuO8w|f-1t^Te*#-qT!4{MYE*RC^;;pmz@eptF*yp0(G z`Hzzu4Q2wgn3h}I(US!yLW^m6Y`YFCM2%<_4nxGcDs@~UwG_0ck&5lG-jqf&IzcL# zo}ISYceC6&_AdNL`K?l1}ne8tWzsK%X_6w;$I{53b z+7?|z_Q`Z=|AJosXV7Nt@;Xonn#@7|J-XJ@_UTOK=g1YpHu~IB0=9OQJ^qPz^~#x| ziuk=EVwWPG*TSw*X3`3Wh8R`}ecUSQr+oC5eV5862{ZTS0bbBR(uVk0u55PH<@wV>YqQ@&fDwB zgfs2}tWJ9`Uf zZXlb^$Su%dZPUnq>yRkhPm_fF7;9K}2MGhIIKIhJRH^8~1Jh40nAq2=prduOc ze06rbfIGn1F_({%AXFEGALbCi{PM{4h<`o2TOTGCI<7aH1){>PQ;`w(S#S2rDdsum zcP1Z29PJ+UjAgI2;jXJR0AY27KAJEC237!&fwqsJES_%z*rvd_JD1v+IAD@j&VtA#GufSZ7(VNQZz z{{)RC$p}yk$WB=8U=NqReNIn)TX*Y%OpN65LJY6apNfXZfjje|#EbscZ)aHye|mE#pkuy&B0!a-)X!ofUL$z0VvmltumB&R9&L0o62%Ou+n++O zNUsxp(Q}8EtTUFMDENPU?ho3`ccm3KGU=L{Wn%Z7^!lk=N2>pDJ0&h&E$hSTMhk)O@({UNaM{i3DS38pjyAwykCI zFeLOTBSoOPP2j%U%cVrUs83878xyeH*c;KQx5nG*3D5t%C;0#3`zP_lyy5+Js<+be z4MWKD=HI+`tH(7s8APszMKhm3`+@EA2w{eZFZpDi)E7xvp6mOjJG;X$s6BEJ2)F^n zC5icwu|fLKD6jN-@7WOZQ~I2rfI1R+RG?mpZr27($0yt3w#(s+_e%U-CR(DExV|0` z0#NcW8(8tDZjLVV-Zgy2)2PxRBGYY{t$M`6fx^!h!e9L|mcbu*bFvIjiOJ~oo4Fv09GRyHJa$W> z+rPgwFOUHhItg$cY#_>+gaNs-4Y-&$-gjZaXQ)PRaM}aS+uIQ8BAlPX>8@HP0od>( zCIK!y?l&%IB=3nsUzRHVVE)mp7l#|k=F-3&Y9nOlv3$!9qUwK`(=+2m=B7W2Xa zU>;TuYk+OE<<+)0V4Oo@>Mw1e#NFzA%)i=tB_;!;rhsOx+vOUKbAs- zTp|>`7f>fw`#gK-i>VaIVjVBle{kR($bA3XAnNu0Z#JLXIr!6W`{*x!$2ymnby;hH zjfnxG^HAzJS0dE$aE1X`L@CxDi_x^;|1#O0>`y3z#{!u> z_5$eF#W0p!Xli_bZ+9rEyV|(h@p4DbcC{G~;PUqZd`>p^OEa?U9tivA!2~H(dVpv& zZxZxTC0?Z6ldsHIZHwHkyQ2`ucE|-RsWLcBxKoTy6`Q+2?&hm_E=NY$O88 zKKmbRA%KDQ8(@1{I@aI;?n^ND`&iS%F2dk%oLA-9+;EU{7H;q7 zY}f9NRtEGE2qjfg8r_O3dG0b;yYix6bEd;+n-hI*Frrm!s@ZQkmyd+({`tUODa0|t ze*E{rK#~npEZ26iw)s$+5!DQfHPUjCs>Y-jMV}vxhgO@DEYJe*76M)&fzx=xj zA6c@e<-bIDI;EWdA4GUSaMFA!rl4VNGw^qd*W-lG^7f@@dOm!Kjpwkk3w?bP9`Y6Q$~OUeDL_ zjjl&O@VRJ&OC>RLB^u;s$~1>5URynH4_WZ{4&j=_9uC)9A1wg$z5k`VLrvFA+dOY8 z*Zxa*Z#f|e^oRPK1EbC$aQ=26kPa%T&V6qxVZmjE(d4>V7v(=z|H}oyBOz&l!|_$E zd9PB_A$lz7%>!DvS727@IX&&6`wIRV84(c?jG*)C_3Pcc>W+81-< zK5xnX@0rek!Q`<&s_W}_tpw?mGCBZR#of`R3(8@r;M)P)cr}8O$HX5UZKN4+c4|}&xhNvi$Ebs0 zO6lo+F69>hmF(0D2#E^I@_1rG<#??%{gE}!0Zt!B`$_I!1J*P)2n4?+CK`vlb%P1K zj6#PIgAlGJ$T1p8lwslehf(2Z$pb1(HPoVFqdr&V42u90H}+_Jx_>s|RQI+0X)u}* z`&=IUtSoX#U_B2WtQTYt9Sd_aSRsG9K(R{D*c;yY30dn;2V>p z=v-YT`#YAo-3E(6A-t1r;}MIC@h^$zDG^@`60#GB`CWnU>oK9S7}zz)BvKAC;c12_ zN8*0@IVak?$$8iDd_!!eR6VqqG%hb-ifo{9vZp8LkzQpfu)f|k(E_$t(ux#NA#DOn z@>Z%NA_OSaMw&+@8ZZ9xfc@_#^0|86Voi92VXLX8WR&l z6XgfS!S0jI$R&l5;_m9+m{*7}fLCgGoi61S*R#0@RRG}+)55^_xh5Bql-P6-a=LJQ zBIWc&QqFd&t?-w7)@9TrSFsxO`96Ook2$>Bl4DA}_}y{RCDf0D!(aM4(;Lexg>)BB zPtQux9BH#RcKf9+Gg~=Dd>M_{ z^8_TTO`AEMQCTrA`-8Xl{Urhq4^MS%?H0|Oq={r& zHTVpXBc(w4ZvtJw9|8DLv5&q5qTnsbwVf}~tUjw18T%i>U`!xc1}MZG4uv(s!@~OW zVF3%$$Uh?mE+VE(|LDP0%^3c2Vv}z&_;mQSIOz%@H3yHdelEOW03JoQ#u<(QBjf$N z<|mYdC=xo)vrzXrg$2Q11Rr9nCziY!6eXk|)11DWO)clshCV$H^yzON!uEluhoJ?5IK)=)55YMK(Gz7#{Qv6e=ROu9 zYHs0}1u)VdoRQikAmegt+B@q0K^iyo-6%!tCOzzxHwSO`k)M`VUu@7S*}J#!gWKKl zpA|nv6>z}TmGW?N@0w!`dWs%KkB~431&okN;Q%KF9=2H=I6lqdTK|}U*x5$|4$wZ@ z63uK4?kp(cjZ8eUFx99S3hx@9%t--1{aCN(BSVx)QPgJqx;vvpdNZC07Rt^qBVH4t zF+<;|P5qj+H(Gthi+m_s{;2fU&2@9>}I-Ka5Rr9WG( zaQLF}PE!=yDIAOz>o+qC8X5?a6IOnUkrDRhUCccnN*Xa+Ur>S?(Ey3@SX%xHiSfw{ z`N-WbN9G=j3W2E7VGPHq&f!t=w-xf?n)j$!^a~@w;}4T-a=x3#y@?3G&Y4O8pWWAB zLS^9ZC;Em2T`#DAN+?6p@n|_J$zYgL1q;+cI0KR&48jApyX)j=N`lu6c2w~+y83wm z?{lpVraIE^7%BP*e(I0%LGwJmJ~6Q}+J)w{g?>q4V&6bCzmEIgzv5NvdG38URg&M1Wi)bt^#&A!V>7H5mu^$io6K}sV9Yj~;i7c1M4s%#OX zyC}|q48TsehPjF=bkZraq!d$e7pyANog2 z`5@-kqql0cq$^)^;%o)MC>w}5dy+iXK3j~eh0>DOt#T{?T-)I@f^ui*{)TRunDAtQ z{>Ovgki0;1#g--*f^O;WPi7nB8!)CN=|P6dA?9I2MfE?q9~wAYr~midZzW`8s!2@` zdvQJO+1T)F<1k3?{zLwis6(#G#6u>wZ)kz6&hKhE1HqRNWyKOgM`l8iK{I$fO9f^)Wa+(ZQl01XI7B*SgZZ8nP zB7VZ^U%?KOD9t1qxfW$>Y(|HOmBNlEtGKPpIx-(Dz_0KG4j*l=z61n}bO3fiTjxf(3BG zkXQR3P0j|7_Gbz>@M8|?pK$72SY?|?#2~Wnu9CJu{D~?+KkyV82zSw1(8S)wb8*$( z%d<=!;crspjz9G>#+sFweb=^K*(-$#@p`panEqBVqH1c?J;8nHabVJQE&_kLZ;}jn z`zv)2qIf1ltGx=N;DFxpUuPdK<|QLZ{Lfj9-7fw?$XEHh|6q>Qo;mm#eCJi8N~~HW zc3pZ;UEUPjnWLd#p~Kb;w=`3MIZCm4SwXkIwbjj-6m*V)31mj(SNOn+A3liqW&u8q z`1#NsTY`q@Qm1NF>%i;8zUu^yKni^;%}H>p&ny4eJA|#y>G?_6*4KY{l`F`fxtBSe zwg3I$AITdC!e#jWE5SzU?kKR&p5lg#>4qm=j?+qIThjwC2-tMj2S$jXTT*E zxbIzJYvyEtOmG9n1OBO=ky4ft$!TbevHj#e5*=h__b2Y(Naq>4w;b>vikj$ z6Wc2L)s=beiGm!leUC;J7>!I!&k;kc)Iab#vdBnVVM;Qtm?F6|ue3Oe7h=hdg0usktQg9uec6_xNyID95i>YI?nRi(k0 z;W=kqh?*t^UvQtXPo!AFE>_%!q`mjeS|LXJ7mLrn5H zmtW*#D{AkeDu||BKq(GcppD|LZ_meQhW>I?X~g*8n)P_4ajAbGkq2jI zD_TJL!I5j=718{ckK`qv68C-UMc87zmjsoskVE`sf_Fmcb|I(bt+M!9K*p(Dw5ZiP z-*RFxlE|DpPJ*kyQ5xt&X=Pn%@6&*#4cRuM)!OnT*_2ybJ|A%N<>fi|}v`>=2srdx2?m`QN3Zzh| zKx%S=0erzxb|CCN6HbLt9}e!L-k2o{krm!(ZF-JMhxuIRpW!!Rek95j`PI8FoyVzCxw+g3}Yq4+jyJ8IW&h zS|mfCv>zHl=*U7(62DRdH(ORxw1x&4b8^n6i#Vw56^+C8c=FH}wvQ$RI1UL50TBlv z_yj&6H?nmh04IMh5;6ck%a-`pVt9APsT4Kw`Uk`tafexh@sQ<8yf7Z(ZHwd~Kv!Y) zH1^M-i>l_~9Oszto-}?PuNB9q=EWR4$T^s!v$PbUEOCJJY^O^kcym|c<4e6s}ZEWA9 zy!hBBS3>d+H<$BsN+(#uhGIrmD**88Y@An?WW~H&hFM)YsDj7dq0qQ;5?yGrM9~ zMEq}n<-SC~-9&|d;Q%fMqaf6GKyVNMImef+05`at?%UsClHS&s)^1w8x7{9Wz1ZsJbzil`-`2Wk6v!q%%7MO z$;G%&hG%WfCz@{%VPpq$*k?gIN)EdH*n#io@5>pvWzB^oNv9+_0JN%Lrb$X)Xx#jZ zg$`G(Se}8JJ+(dHIR#IUEH7K1MS*yNBh5q1;};fIX#@~B8dCBZbU<{=!T`}NYm7G& zB^HNl4O_J1A_nopL3-43+cSs$Fx zCFxg$z7WpG*zaz}kBcYQ2-6$>s>kh~l~Zsk#qww8&L@}Q)+B}Pdf>MbD9p`xauGG5ft^>LlFzMjna&BU=gkUp^X&zDG> z?k;QZ5I$1yGvTocS;Jd-N?L0Cs9bM1yr}MB$ktjDwcyH{dIO!iIB+7PHpg(;+Wx?XLx`v_~(E37<)`6@;zmS81pl|}F$kib0f zQ%xB?)-ct`!g*A^CSEUiUJ3|smqrEW3!uEhd$Y#j_XC$DekZOz6m<*80FNaQs`Cg} zA^{;aoWkKrLa`PJYtNBM7hY3Xy`YziN8X7QJ$QRRtReNc^eE~po?NEm#H;Y3HfvPK zoK%!_5+=^MtEs>*Ys|my&2abhG=-2Eken5FuU>)Qn|MSaA+7E6#pMjHl!+>H4ZP6d z-&r}4kr?*EXr0HKcI?%Giiy7ia7_ro3ty`KO;@pgW`hDOu82l2?B+KtB9KUy82`x`~=9*ngp$s0Q6cwU5Z$TR@g2HnMWGo}$57Axhowzl?sL z=k(h6R*>6IQLhXU774$J>bwI{8q&zl(WxKJROnu&LM{76Us6L36^07;LE+P|CaAJC zy{qZVYDry)@h{%)FWbntL+NBk#RC5Fl@Sm{cn@X0z}ReR6NKNJ8&WTy`lXXhTazih ziJ8B+#_a`3Y5+jG!!R6JwJ68MS!$dN$utS7d7aNDsdZDNHzarP#`*WlQZ7}YWYP-k^ZXF} zMYr|5{pMMvcMh3By?7F%+V_HfotoOw_|Z9It&VVZ=|;TPY%s;5OFW+zCy02HwJlXM zMZoUxL-M<5U<`2>q;Pk0LNb)dke{efqEU(sQOXF5z+>71Mi+d(FM`J>Cl`QC!_IIr z>)5`-dRsI)nE)6J?l3ZgIzl%TsWZO{@t}(P|Q#kBNLGTq#9wVf|j}(#8keF)FMvLgx>MMQT zyhKU^rniKr87rZ>uP0KAh$lvibvVwrj0lVv?w`A1G?Iul#G}FWc=4YF zk>im`cx>O;Wt1vr3M4t?s23|m1H;_T(b2c4_{uIe`~91D>9+%h8l=u< zKIS_zg|L?jasPO>$mafjSjbzFJiwj}Jlj20_+hfSUctxbbcG*{LYNd-+N~O;be^{# zYt1@m%eC*lfFDm9tV-wq0`Yy`?vHhJa_W4#zq&v2ygBX!-03u_jM{=^On@RS<<}nl z$gj^`OQk|a`nhbefd<)4mu$D{(4HX^gB9f{$u4Wm;dC-6vD&r&m-gAVl)nb@@82y~ z8u*jYn!w*L5en`SwIq6VUgD5XoeYep9d^&SLdl&xAb0v6K?2WOC46OkEW+^C+Keb7 zXT}Lga;K>(f22+8Ncnjg*J2&S9nX%j1pjP=%D}wPtF#GRCRGLq(lSwfyFigmg;ebP zg(SUcmkHXw&t!7@dc={n*67#oZ=o_VMI2nVkW-@RZ8l&{j(1o|B;oXT#wTA50^$zP zIORI%$D&BB25iM#PL}WhV;sqw)J*xb<} zMc}hU0B(_B?Ml5T*R*vY!8<)axRMHaB*s4PPf{yok@7jd0cN;648&zcA(*)n-QIXt za*bV}z~rpJ7O8^(Hc3oN z*xeH{KWcJ-`(!QPUM}d&Dc(n;eoU&}{CV{JYuMAnBK-h-u5{d3s|9m>j|^l2(guvP z_g7nZv(fE-T3sm`QV6z8e!$JHZ~>{^5CLFRx6P82l95F+r?Jn*AwDT0EMA2FUJk=$Qlk$3=+h_ zJ%gjVm*#j4ibi7XT&e|m2{z}+wjJlppGY%z-yg-Y|FQ9oI+^4vy9}&Zk&zQpQlryw zO$pJB6;D*EHxv7kVaWNZ1Uum&8oWn`$)@(dr9`nENAB0&fOFlYVNg7q*MLtld7hG? z10hMOO0^n`V2eBQ^<#_-L;8;kxIy8S5Mgh>-<=ruefO)8{dbtyBcpKL1|l*c%=|`a z+`yDi8|Rm;tiunygN41tAfoq0qedZhMMOkIVls#Y?CesPxV0F!YStpYUNSw&%2A-Z zff%+RUz7g++q~;?4-K$65yGvo*?6tP8VqVsZc<<2^Azt2^5wk3U)Gv4&@E?Bs z365i-_zsACg6@_S+x7Ws&0sGR%YtN*U%m^bVqz1ANLV6FkU?~if5(fdh9f!S{?fVkG#HRir9!<=B7xHp2U95WW=JH?yk}-oKDLgUl#UT?l z?ia6tru*Ao3OHeI1cq&1oAQ8hB(c%)Ld`;}C-0|*r>mA&H9TOGsYt>W;)-eM0shI` znfCT}5p5FS^$=|HkAXM64d%o63yX`rpUC8ca}tr$3<3Vc{o|naS=M)p@w`I%g1q!LRGuWSrWU$kMhhW zSTUmD11ija5K!#8u$EN-LM^VJloo2zm|__nGGG?0eS?v@fp77zmMgTMuWf<$2p* zqdY4V`)-j{w$w`L7w5_pm>1!86YXA-G|N9_d1KXQC^{N~!An*5AG14?>bXZ_LtbTqH5B7DXAgF+D= zhD;>oeo2|9pJJWr;#n8IjdSqocEC|Z0Jis)y-0R!cM5&9EYJ8_?NG@u<29KQOoxNZd+iJgQ>d;t5Ai2^f0?{vCT?T| zro#(CCmWi^9T^#ML+JsW=8UYZhX(zC-)nJp?VPVNY{Gzb$D+Sd2;+ZuE!R!~#7U1j z1^_vF)ahjzL|-8YFbs(FqyB0Hvi>>D=u|kk<+Ah%$OQ`ER|NTDaNulQ9Om8K9WV-+ zpHD6}KR48kDxihU74?TL`S=TRbGAPISG>agYHy`njLbZMRQuKMk&x3@1~-?@G>k=? zY6R$ds3%iwNJksk-&k7G`uG(7+a@Hxf6F8E+S_C!HrZ9CH5X8I3kb!uZ0l7gtvpH3ex&UX!Q-V>yo@I0wKe4=zfz#aJH=c{-Kv>BuuyMW2cSRN5m zs?p*KxvOW)w&)ta>l@zK6Up<65A<5CFesdGeF1njm(i{7h&8$Hl+xWAQvarV+&C=l z19#Z-@tqv}8#*|jjd^8hv?mD4g2-K{Ba#1k3s#M&{2MBgh0gHM9bm+Y9RNa>R+!k! zq_9jsNdSTq021%NofTtafnP!iEaMcNBs!QaI=zy*rD zScqmJve9brmibC+ur#;DZ+-KnqZ^0()UfC){41%k1I8#>Va*YvBDSYe2v`kvUJz!K z0mDj_dTUK3@(D<`20Y*>zDl7K& zUo=Qeyg;ns-+g>0Sy|nDb~ZSX?1Gz$U`OWu&#v*0F@>bc=si-Pf*e(2IL>5#yzqSz zpi4v!F%UMT#kowXKx_#Yp4{-fWe#)j%7)MCn?CxRYTFKWPA=*A^7;k;UG&cpR&&(}Kby*S;62Qio`1)x6FAA!=dcU9QqK7*t?W9X~pxes> z+<%5*n3oW=|5WDt7TT!a5$kYYke8Yl>nD^IT*cwau@|_j+Er*RVRR>Z*F)bhpnpX? z-RbF!=^(3lGmzcHOpS(;Bf95&Opp3q<1>BguOeyDRS$P;!?xD`?Qio7PIy%!B7HbF z-Xn9(UN%ba>KNA<9~(hAU_zimT(VvWhD;_G^YamX=8zUHi&D_BcgaFF z>(E(tf*<0E%IyB|K|BJ+z6}uP8VEH9PxOBiBiW7OzvO_EPQ5pQTzRclZahbz2q|6{u1%4`Xm1Ij% zIKrH?fPYGfG@r{JzBaXsrOrn;YMN`3Wxp$GRyb?3l9GijkIb=Lj#v$De?eR>E3*jM zT?oK%Yx$(;<oJz0 z!=}|60LGbVqNZ^^1$ug38CZ+|uAaA3RVKv`+{~-tmx9#)=X{`F85t_finzf~*-oG_7d4X$x zOPERl2}D9L*=S%3gwKVJB2ToxZopCFmZTO8g~{K4 za=grOUc+aTt021nS#gim*@rL9nY z{ay>`4O>h`B`H*!?D=Xg-}D6A4LiBtTI*>1^yj!p8<66<>%0OHzXZx`Y52mbu~YPI~YCt zom90<N#L4PvNQard4}=uzxFIY;pt&vS}8?o0{RVNEy+Pi zmpn*h^(g%NEa-}e4`-XidMIn%81B>@ofWC+lW`~k3KKi%Y!mfMbT}!x=h*RkaVfir z@yJY3??(Lxf)2^dLoDj<+r6DBPBR6{q*)D6kMqhh3uuqCwX&ek(YLpA;x&b+V9rB9QE7_R-+N8OO>lii;ytef!1WwN1 z9Y$Sks`FI}yOFyhm*N7Y5psQi065~ythAqOP;PptbRkC^O0HA5f62#ztVb}RDYb9# zcZ~V1j+0GnaPzgO;l7D z6jz$J&Dc**3#+LQMiAfLf}{D~mvf-U@OG<%OgYX(%z!pP79qP*IDy*+*DRo@+}`g9 zA=T*3#5N&EX*@D}vD{AAQO{HL1(ID4+UmwVHK@dUC|=RK*uK~?`qI3Yr(Y<~!aCP#GTn=lbKs%%t=$^FG zz&xGgVE((*fqP}b*f7(D+a~fCHKzgCHWAh1n>s>G?{78O_N3+Ehhx6;$8SuOaQsQV zD6o8x$oX3rt@GuaiVhc+Cn`|t^ydSKUR0tP7T8oOR){>s)An6!2CitAqWoJOuUQm;0O(XQf012L-1c|io7je5Y5`|;?r3} z21W=LLmoIe=>gnn*T&$w_4pff%HQ#fG-a`201sRv5$H|#R77l3>b)9PDakNboU()H z97blsNDK?#`^=d2#r9G~4^R?^z*mYnbs-`rzYSrp64TidV5r}lAx2R&jl*f$=QPsO`VU}H$xU$v%2BBS7ysVR zh~SZ+cm*1qY1t%4CFLQYK_WYX5^hrv@&j7HyAVS#U_QO>(V z#sDAu6E!X@ENmQ|GP%JIj#4fv3`E6skUSjWTD@@Jjb&6Y$urxcr^u~_j>zm_3GHEG zvzRb4i*;gOQTS@YP%Y7{;8M$j$!#ggiiq(pd<~*>y&E>#k1~#hcQpv5*d?lr63G#q z2~pUTlml|5)eo1lS+HW!Wg>SjSDS`~Qvg>cDM^JoM#L=OLx%R^Ki%i|qy9|+ed&7} zkMBowLy57%)OSGx1Mpe~ztmLk+%dijvH`OZ)9hFzfV-=aNmCWm!MjJXD4mH$xELbz z^hE;!fy1@{J5f@}%Oc&YtU;9IC0p_ho75XDSP@@rBGIA<4hbpwmW}%Ylq}>#B`~jf zqB{f=Myw5)fgek3FLIEGosybS?N_u2SyYD+Vw714J*SaEKchl5BM#(PRt7OD>d6R+ zh~u#KAQ0Nd*RRak*Iftw)NjEDe&3)20H^U0Sh1J**w_JjP0pJ@zm#6Lff;DohjQD@ zb&QOlZEkK(z5va8`#Rgj1VaIfF;X;Qt}vqdqKzH+Qt}4d#ehovmdo0hwJk9xSZ!-4nIVReWSD}fs9-G2&6D4>iz0d0Wc z{g3=WVHAyBGoM2Ja3Q`a?~(jl%$JuD^T~c|1{AY*7XKRQKErAlI3FwuyIr0Vx39D| zz2~(`6bGhmxLRVPgaAL&Jb{Bb_7NEir_&N_Tfk zcb9;4cQ*pkNOyNhN_WTmc+UC1-{u3%bv^U!z1Lp%`rT`()9ho8byQjsq*P0oW&&Bn z+5D=qjCVKi>{9m^JMOaLBXa;(zOb;64G1+)>2;>#lz{su9UA-kcraV`l>Sd61qNK0 zt+xvT+MK`7%YDeLjL{n`1bAeePC&fAKm76I#}na!A;9(Xe7mAUz#xqTrWtGieYx%I z?0mBTowUO{3iv8Vu>d4QdTs^`-nhglRDhG5&ahq-56a!=)#n5#%@JIb6R*@dhwou3 zS_Bqrj`O5F6Q2P_R{XtN6!u@V;4g@TKk-yL%6Z*DjxRLjpcBgnhw z)Tv8I&|`hj-hKc3k9|sCU`wzD%;E?OK2TpLAgJNRC1)-4lQz&5dv1FbVbCrgvQzz-0*+IlNkNp8gCYUY~?HD}d?W*>5N4qjJ z*3!YM2w~|`=n!Ed8br$NOLPWh?DM~cQzvT*UHiagUoafa>*eg9lrD|b?h2nt`>N_T zHK-?3KmC?7o&uowzEk4hOcMg=sMa&APX!@G<#Mzta(oQOt{NFr?H4_d^{$gTsYs!+LFWc^z^_2I{u$|CDa5y(foj!<)kxdsNMlwRmDrX(i!nG)=#pa zPQyVRqrn7H%c2`!=b&!oEGbn_qgH7h%)KAzqRo`eQ8Xv{`1`YuSIr<|( zC8YI#-`KuOF+87fp3OT0I7Yk_Ajnee#5@V6U<#zyd~yb@Mq*?+(AZ9EYAWy#i=%&g1zQt}<*$QzH-`F!h{LRt zk>_anCkCrds|X+i-7VxZkOxS~3jV7w2BQ*mKVwSMv)Qf*C?FiI{z|gFQcUOR0wGc2 zg*uTtbgr%G(5HwbQVnqX3E~H1e*Sze6dIb$ZisLzL*6S^s zOJU2K^N&$hWmdu5N+-NLKvxy3{VzZBoe?*G4G3%%xKlu4DovfQZ!(BAvI1N(!gO7E zQ^@4Wjp=X7XW6$U+^5(>b(c`#OCm;e6-hpdw7eGT#yb%!BE+vBG{K_db zoY?}%>_jPz(Hx6Mp<;$9VpQ+bjQQAq0VseqXALI1bpxQ7e-p+CX-#`9*<9r)r-*-R zxk_oGo{Nq01QjY|3}IO06Pr!tgZ@>J)ymZEVf>^6fRpm_c2FSh2|W~=?fAFle5?QR zmd?u$6_=TbNdzIfCm1b4nI=|P9B?GwcgQ%4Q1=1k{+%-l9?P}_T(1}@8V46=ctELi zEM<2xAr|ugbQgi~HmXZvyX%!+MxofOe?qu)217x95%sIp)lR4qfDz?D4=goOFyp27 z1sn)e#+-IlaLv)fzS{Gq02&(lp~=9xBl*Y^y?Rse#$o{R; zx0bHHQpq`LN|>X=CuHuq-m@QEC3(;|%^wnfAJXfSr@4}07}l%5N`t(vLN3W{?Iz$Jkucw4=q3Tj$T*yUY(7=3Tvh&b*kC#DCK=S? zY7Ave$bZ#f zL=9@5#W|6<)5yuno+@vZZO16d$N@LPf~yB!R*#rD&bAYU{T#9};_dHw$M5yH{ilqTfj_v2)Z^7f)+Xcr0H(l*R}k8@-K#9SVgFgL13mCwPl) z!*V{nq`)kmZ7j*WJbbwEzDug+DH5TEEy2Hdms8acH@hNMIxT-;U$N{%Y7=pLh7%&1 zVdWMS7*J%Js}et?$y1tV^b7{T>7IXv2YHJr5l0Ax5G6p6q*ggVA);A<{+A}EBm7*7 zs@4;p1bNrlnmhW^s}#wW+#17Fzfb;Avj3PSi8zpH-|xj{`PYVyY2p^@*xl;X#9*dQ zS#g(n?`$8@7zm_meqR6#oI_D*DkKomN-53uXAU7R5S|4bEGq>Tl7`~R?{j%a(e-|- zpkd8`GEnl7t^y9-cSHpAb-f;NGdV5sTASxc7^1N(A|?2s-c_nOwF0h2&v*7>%{$zK zCeRDLUwHMv@G@t(sdq?fjCAcCEdPS^lrZot2u+{<5GboaC@B8>WIrJgQL?~pKxD1f zHUNZG0`|(6w>SgkUd|c2`}npPG3(mB+f-5KJ74h|KZy6u?R-6Sf&ed{zP07A7U0I| z;$&|l{E#9N=x-J*>8lC?(F0UTSG6UMqmwcz@wx!UKW4s7(jtHoYAj;(77NjzL&;|} z)Tqg4HH(q>r0x_~4Ryz|Q3`NZe0o7SxMiu7Muh?YIPPt2=x;I=lS^}0$$Bq&v8{Qq zL|}dJg{Dw0Lx*YrE~C55WiK@rREh}#ECn7i2HKc-DcN#jep5uq(ToFL*x$Y~i&luC zrz%QZVWRlGl2&%r)_J)P4t$I!JFjZ70GcS5!cG|{0714|ku&y9JqBtg zO+KnW3P2k+d=cFAu1r*5P02`E$;~}MrnM3TL7#w}I<8ACSBw6(V8TdfvDLgB;1OwJ z4}&%}Ei(Qv6@zk$m5A*YYc#+;xE4oYzuUzQeL6)JJ?~*I!L(>N8pkla;AES_%}WS< zbz%O4Sb}?{-8iCYKdrtZL3d@R8+6=X*;y;$oiCFJ^QzrGKKv1AA5O5l2(hrFi+YUn z;d)>ifQzb`kwW|n7Nsc`rv{FSOEuY0=mb}eh)INMo8MBpI(MvK+l7T=>NxaD1gZ7q z318gx$F5#10aXg*AQuD?#VbB&8V7RKkrk=Wb$>ffewzC04+LgBMjQ5~S}(MlkbeL0 z*+|*CG!`U58H=qCc#kIa*jykK5K3&XFZKNqMdJp{wkfhd@VB`L<3pnRzGo1{3Ittv zY;5~cxjkRtE;+@|hR@Xt`dr`$5;la*$;T;MflnYX1x&+Twx^=4XkPLA=VoI?F~lE_ zY0zS!D7Ov3&PpN7k-N0eiqiYe)li5Tb_n+CTsXOUxJ`{fiSVU|>z zX{qd1*<}>*^Nb5unkW7FhKuEfeesTJ&!(p@AW5mj$Q!du{7gPG7MqrwGC zTnV39o&ZI82ygM~DJjcC?}zke1WG;h?{uz~{V`^&SjJVgBxi(LG*+qy^l8n}dNmgzLqunQ$L+$>B*?+hYDwX|X%^iWxyZY*iT# zBw#6$A>_F65-^sQlPr6^IbGOougGibt5HH6ClwBotLjSr)Apug!Dps2z1jEvWV-s| z41EQ)sdUm!LLEvhfE>|SB?-W49MSjPG*xuQV%LpSxoQ@`%_?ehRu)k;Mc)EL&S)$S zqh~J@Tf$#mNnVRqf^Nj6($BRj(_ke0O{FrXyf6}Gj-Idy{40stdMRAx3i@t-_rLl` z-t24ryTH?vI%u2gd)cm{hG@x;lbB}b9m-~(@;Hu&RA&Gs0k{`ZVAI(FH=IV#((fRS z@WTIuavUf60eQT=#uoVanHo6~OD-b&1_)enOTgvW_m#-=$^4Ji0~R^X*}$RUEbY9W zGdBn)SGqf)R_53LktXn?gkIlMqFq)a5&?9&$Mu}L-sVeEjL+*N_=@z;+YS{x_C;ql zop#h-U!4r4dL{3QzM_h;Cl+C;jF-u2;%(~gm4=V!FL{4da2I#q#afG@$?furHxycE|LkSb0>Wfqhi;j@SF7g@ zOc@@NWY-_bO+iP}A&s)gcBZuz_zOdcq%~kNE)8L$IcN`L$f-`N6b?)B{!3&Jf89a0 zESiHYpq5R{t(JTicF2lLWq!y>jHlx*B1lcuZF9UgOJ8Zz+;J#PjiLJ%OSM5}M`pNt zx)CVW`~BXIcK>~?38Z&7rA?_JGDu1!4!O%^0Xz1);@S}ISQNC-oby0Ki|fmkmI23inm{qv^^<>9nbe>oKy@iG z@rx*%71IL*7oK~&im{o0ambQ4-~Ix)2dk#P9h@T0{BuY72qyrZ%WcdY45Y{_(m&md zUubp_^3Up!0RQq{=x}E*uVDIA;cZ%Px%g(4uc7xJxw>FxcIV;nD zh1Mtpu#JXbNt+O`ch0@dGnMZKKsd~EPGU6z3O(Il1d1QcCYwnrwVOt^>z?oKKRX)r zBckY2cT6e|heiQ|7I1G7;AvyX{^`6+W!tM8JY#=9%l*~{^TYtKof(nPl@b8R|`;-2uaA%4ASB}#e^a|o7 z!?aUA@2F*e0v@j`xK>l<&fo7HV}EAvHhW7@TP@pR<}@#D9Q7aptRIC>YGMpCEx0`G zR_ZYGLjm4~?z>5J+ro`S@K5u%O>t@EIGiJ6^+NE|=>W;n2=~0OR$>bb9>Yt6hFYps5rHq-9;V?>3?O z+L5}0Y>vwZu>JC(aFP%|95r1hP4jPd%>IzegR62lX;LP*Pra)E6;4{Gys6Dv>>i*tgX6ivtPH{$k6l3xnPj zIkGY>|D+Fxx{Yz&#Ao#DZO*ABvrnPDPcaph^Wa|_&M4!K4X8}!0E;IIv3 z2{3A|bkwGyvTmv0XZIxcet8(=ev~VGinveH_(S%%W|zr<{(dMa3>T|+vd;dOW|gb! zNq=Yn%h|Fk{wY5D#6l%5=}Jq)cif>3ye&5!0kpn-n`ieY37}#V^pGxK#F5pHQrNk% zZu_+&ks~A`t&QFAT3kRuotR5aR;(DS-bK!$f{HgqDc_3uDx*ox@;N*jJERkP{ztjf zwvSj!EYDrNL*ng?O7e*#=D1GVNA(XXaCK;Z0Z$iu<3~fIL28x4k|pUdy+wNnEjBTs zS}?a<8m7Dt(p7pRmL1iy`Q;VVe65q$q_k!I#MdpM+4HYhhnOO|H%29?AHE>Bk`S)L3Xg|t4rs$qF**CI^g^GO? zXj(nS6Ht3>#bpg=Oe|DI`~TvAw){h94&OpQsFlApvJ`IDhD9kHdL}C#)HhK zj73oT!>TQcSB1Mgrk8bRZEec}*JJcBr>yi^pW#+H5lzWD8huAKi3g6=8NxZByw=WlK=g-zi$19z?7b+1R}X8Z+&Per5LBYMLgl z7o}E8S3J?0Qg8Bc7QTO_C!a?jP&Pl0NApLC}fekOg^TM?+sU<8Lk=`K4OI}$+!^@LfCeDMXm<^(5OK&o2)WvY!Rj~*OKr&&FV_d%*T&vP~$iZzki<8U~{ zc_J_JyDQ+UtLBpE*DJFH1aQ)*WG~@ta>|z5Zkkeb5uwr}&P`mAJPzF#{IO$T?CH1D zVtX9>!l+lRdHUp&U(zKGzVV=uv&m8$<|_+>5E-4zWP@C$4zOxIqt{hEH$ToD$=ga=<5}->4lpzF3@XXPIHPuU#_1C7NFubN+1LtNy_Hm#k zN^DfWMEnnYFs0bYgAaqso|54Knnt3VKeC#u=>oKW*9Hv z4!KFVqgAvvGZqdcVo-1(2%O+Pov60fg%b0>X&gQ5E)~UdI$nUuSmx~NHYQ>-j=r@W zhnp2j-*={1&|@EjBg{g@->Veti_T-0hX0Gtb`StX^1i~K4sN!C_)VeAF`fNMvxD#x zkI%qHEj37_I{m%dZI{0t<7xH6P=EOq3dY7$NcX>uyiaboV6WX90*!+{*q=TyKmF3@ z4PJ1LNrJ}OJ|)s40$k$k66eNB4k9f^tq(bj3hsBiFcBzhl;mB-)q z4$Xhc!Lye&z-%INBgTua>^dI)s8lEEGh@9KY4~+-W1`O-Fw3E4e`yc?|2)Ir=>n63 zKqSqYRu8h6O1kf?9{zcg>w`ebR(BOFdq((viU=DH8bW)Os_+**iLFiX!>)OL#sP6* zRR4J>E*d_3Ty~EnhtfO<3t7Xzs?(viK-!*d;(-pGQPCODpnQ?t8#K^lfP_y|%UPTa z0ir+uR=B>=HJYn|c(Hb4u9;*c?iDfBl{ggTE%)7{4b@}!PSzS!IWwII!gb1nq+z?# z+nGtSIoygZU*ziT*7tWQ>In(U;TeTYdahuQyeyH5UUe1?O zk0`4cmMBI!Gj$(bx-twciBp2KiPmp2R`{pcxNo3o613ne8S06ivd{sfLI?S%1SaiC zrKpkIjyfkf@&25{`~Ht~1JBs`%DtP*KarktIb|$!Ej6jTbGbB@jk$_jafGR_yIs-|`K3I|n9G()M%2%sc z!OM7!z``<5@fXEA9xfV}PGP`Rer-ooBME55A5avXmNM!#2GS|yJcX*Hco6SpVrQs( zO;nx^{Ce;6;p^sR)HG6ySLSM!aNN((_ZK)!AuI0+^fNoCYj?h^Ws(pukTjq#@j}V?U}KdYXHs$~B*83$NWAtsJdnJq_eG zgzKKe38kyUMWT~D?O36NMvys{l7$g*_x~Gb@o@sBqnr*vdTg2Js zZEOsFg*j&cax+4~3*Un{O=PH}QrcT0Zx0&jBxoqX6Obk>f)9n7-1jKH@zfjq_Qwdu z*!TZ?GR7oN+5GZG-H;l%7`wYlFiap;W_WAd%LTs&FOZQjGk|A&q3NZ*z5r86!6k*= z&bVy^V{H{izRzZcrJN7NHT^BYB7o5{#x=x!{=MX#j_|LLi9L*1b~zTK!Ow3}>h=OY zH?|HWaB@Rx<{@nF#S!X=*+vrt*Sxm^_V4p7kzTR;6y2rPeO@q+ul7Xe&p7)monYFe z<}H3 z;aJS+dbPc%kAeVZpV(;LvD$Qb$FeBJ{!R_Tiv}sV{6RvxswQU%f9kwydnQNfQ{BjX z-ZUqXmR1EW+|=x&w$0NJHt|voqPxSMXvhir{=yvk*fU~@U~oG0&cT6U7rioI!$U*U zB9ERgMk_e|-T)kAfq}W@Uv;!8{>ai6$7)L&Ny>!@7-9M{JTN9&0;p)3q9t4#<4%R0 zP#>=L{ih1TseIkJ)#x+`OBP^*ese4hV314@?F>sP_B{V4RjzM14HGN(yh`2-h>a?7 z2+$1Q&i2t#s&&H}$zcCv8Q6`s%WIrT#h+&RXQ-COWbIr#FH*^@wwzO8h2PKq`XX_y`f&`$|~9=aU69PHI43A3aibD7?+Aifl++u~G9ILw8}l*A{DY zKs&oh)~jD2>_z?BJTs=?Zq3lVtycN3viVP)%-`F2@=CwVtnbh+r@v?d_c+3YheNuO z@1Q_E2?^>k?Urcnkxv~;eyw!6Qjb1%_07saVtrx%%(Av43xC@_s;~07<1*ehlA-bN ztupPu>VR}2AY%4Zii+h8`^;lL*o z%i8Q&-b3;r@{c*yJ>R+vQOe{yKmN)Cg?^~RAWwN%2%$YSN)0jz!!=OP~>u^s%)*|EmN2b~vqCaUUXklb~-A zaIKP|6fStIKKHMbD5**fZpCAf@=9wF5c&3y$z$w~GDRKX`!(oI1{j31w+8!>&G`lf zn9~OWD4#Hx`PVCV0S~P1SrBY+)Q%AhJy@V{tZxBJTyMxTJ(~CxL+}A@YrZLpAov8G z#Qoqn*O*b?B9+vV+oq?2|CWb$B28Oy@0O6R48d8ipD%&oe6MchX7!PMd>ZBBjg{C? zf)7JltI3N}VmXoi?XH^VlaRQSfe_U@2p|y%KQg?e^%3%T5}&O4grZx2HCT~0O*S4H z*rJ&2Squ0$*{JqG9hVu_f_?fRR}y)X`EffI7 zqbtnW{T9D!*>tdbo0sX%u;Ay^6P}yf1svE_uTNd2SQ-$fv?V;_vYDP*^XI0auD@CL z#j17iTr4CptCp{l(JS!mlZVtF2s#EB60QvryLCQPv8flfCh@B*msVX(_SvEU(FL}b zdMe}_;7Em=BA$CyaGX$x*24DF+%f-0D`DmRqm_nVFlCx0X~Ey5d1pE(xhR2ZH~DeF z+VPG*Y#B|SXh@vdf<7wgnn2X_V_ORShQ4a;-%w=ErEI;D{r8IC4^+ya*vXCQ$0SUr zLnfaGQmmKH1(o~eLRgqHcejNmla<4HXYGH8Bs90_^S#`U>OwROOQ_7WQmN=^afk-9 zb`Fr76R@w026O9iFH5UM*K%={>S3q|4Mx7cKl?57MN$v&%i?o+pk!7<28A`<*BY;x zYV4doCYweu-zNI}xOb4C1J}18g&mFLw?k8^YZc!+oz6%2WC;>|pwnp}O=Qq4UA3Gu zp_*V=wK0+-Eme{97pPXV>Ur`d5cY_CRJq_anQ$KR*FS|#>vJuq7UuBK}>8-Dkf_L z2T5`=ik`xt(XXdJ_uK4{*?f!p%w2+ssFA-w=D>h$x>K^yB)qf5GX~0!@(pB^@Gh?l zCerb8`mMO6-s<2uVuu3wQ9tRZm$sIznZ--HG!8H=#_8`i#27ZCKoqWuFMXslZCkQv zlpF>O3^O_#ZY)aFIBO~SosBTU)!98ClJkE&XH1z=L5vS3cFR*2-l#K|mrUh^5yvuu zE7N&>F-~=I%tN{sHu=$Bk98w_On`xpK6EtbR!H+fAxgy(l1*3jCi!A;!3v9=sNLi2 zRHtFd%{0FE4)BI^1C9HKe|iO)kPYpY|2(BK@m}bSC8HNlR#T-qho8_Fu?n6N^Mn6I>> z52tji5zLGMGndmvPzxIEUVpKkE zb)orGYAMZaONegPa`Nhn{C>mv;HqqkQJJx=LJi{|itym-87Qvqh=OCh4MU5E zOo8fM^~Il|SFVp#;4xC8gRUeqz2!78!tu9g(}K~%y4G?dE&H<|tPPS!h3(U8f?o+( zD2bY~>)eqC>On;^u?N2GSxraO-D@4Ye{r9+T0i}G&|`K^bwW^~nYcqggt`+iF=5aT zz?na@XwVY^*n-GoVn8W=KB_+FsjjRgmLn{0sRjmEn?ma9LdI&pt#XiObz1nm0vjAW2aHOhJY%Z zk4^qP8!7&F&t!dg76CiBUoWT4czf8f(3dDW!R6=uR)S7-nwr(cO*$^K`UM-3_X|vK#JlJp zyW|=$Py9ago^w`_!7^OCqIRCI?;lsdS$?0{z5*FVW9=n>Avnv^P5eZa>;6#W1mU_t~p#p z9mpTw5j=5m(m(fGL|R@V2!R(;r2!1rN1|(QTBNySA(btmQB#bes!euI)*Oa1$_({H z93NwmTiysp3zg*d1R8s=`>fgre)JU2Oi!tCR<~7UHpFt41VDUEU>$0u@`OOl$*I6J z4QwI960R?T1-wTl$`4cTWlKp6y52oc@U616VIf~h_^`!a#)pVTA1&to(Qflb`BAAk znuyTT*YweyW&i*hQA<_JF$<{475yJE{F@&1&X6>`+tb;Us4@2+-?otu{KZ~sD*{nJ*8@&N=C{* zkGRS9ODBby4G%dE&%U!@El0-tO^xk>1Gjr~m*1V(!fTv1j1~oj!d$ zGtCSOscuLV3gX4Iw4Vr^Sj7)mO?2azKo;CnTI{#VEKfg&w?bBbrWU<#A=o3HpevFlp90;~gY&RDa@_YRQFt+lYw&`2XitB#)E z+c9{)EqSJ9yF&o9Vk|tOrrDxS7hB(kgbJs8oovR_Z#k3tC2l}i8aORYDqAh^A5YVu~}E5-hx z${kBuj7F9C<_7iSvtp_LJ=3bMGDd2nv#-j0wApkmL95riL2oHqI;tDi1v1)Km*1&7 zDCZp(i8YSnqNpUt!M@WW?k)bcZpd{*SW(ved0+Q#Mg(dFff;uJ>Le|fysJL=fxT<( zE3|$%;MGS|(TpWdCn*{_Y*2pXFP#b`^!64bC19ZNuIofc0X$*j@$fUUa-nS0)-QFo ztN@wh_5;cfaz+xPrxxfM-i+YXda}TvlUgU<{>@7_Ny-bIVx4vLQ9ksrcxbl6R{j_A zYq4*Iu|#`U!cc8@^n2t)6QgcO;lm;fp1MCI!CUObR3hAyw0b<_?391WRZT2hVHN$nCE;Im6kya7oktKhp_|XT zZ@*{`zFe=AbAZ*A7@d-20D+@Gjm`8;F_NhQ={O_rgo=TCsy`(_SuzMD zJ?Py$y?;u5y1&rt8R{KKqjjyXNBE}5KI&Hr5QqN5bbFdamx?1vosKCOr%8lyXj}~z zdgCuW$^2e0+-?GW(x?oqG8NxuWmo9p2H+q@D?WGl52%C$&c_$Mj(5D_ThnPA?c)6| zTD+pT@#XTuN}*5HJ@EPizP;WCEIXv8}baccI|}eGp6o+<%$=UDI%v zTujZ;#ZvV4`NIYR8NX^EkHd+xN(gMdQh=puzsF8qY6g(Oogt&%Rz7T=uSU>m*77lh zYlybzCTgx8Tu3MO!A(DWy}+0xL1g_C4mXJ!@P;0TYs6Fn-9wqf{*vm`y=crZ08Ooi z8uR!(vnS~)5>8;}kq|vofPoQfh8zaPO_*%vJi#5;_Tv&2z6m+akg1&08N3`3 zLn(+cyx_B<>30R=ysoOvO|1t7#ZxtF4uyl6k}ZLZHQEB0jQH=?BDU*oF#zwl>7%Z8 z#|faKJ>1H^bOiBhc~^)G@-h;krBMQu$~8q>32WI4X5KT!Ges<^5K6x%i1kkik) zSB+o%zXYM`^0GjlP!vgI;?=J&B2_k9Tz0 zeHzA-9;Y{0rxo<)6X@68bx2SK6RiNWGtfvgZvEE?WeCV|211(W^1+=S4m?nghBE^J zO@=CyhGI}p^fC&ncaL?UGY_MFJhg~Ov`|dXC%|~}Fr-uv`VxaX$Edd~;k82#51knK zW?nz5%cgJD`kWlYLp}|~WE0J^%o%6%^YyRZzJB8e_ZIx!6%G498y#Hk69bjrUlRXH zyVZTpEYOxC$-Sr|tUtKtr}Fsj%qiqu8%>Wvs2gGBaUze`&f5s31^?J_EV|!LV4a#! zc!+a19D}K5^W3TIU&q36|Kre442j&TSL1Js0^D9V1*OnPqQ?Y(8TcRb%v4gS+-b~4 zXYqx7Yd9olL^0Kv%M|hn-fYZEZrZ>~EM=fu7Ro3xPZse)%FZ4F@1lSDKNcW-zrWcB z2E+kd)vsgLn#(@4Qxao7s<7Xmue?uJL{b%z)b(@Id=GRvwQG@9;0v;FEVv=WW)t;j zS16`^3&y^Py?at51%8Cv)0q5DIBZKNN6kn=`ES{WW{cCj|DN@^EMzmapEOQA!Bftc z(?gKWy#b~B^Pu!pi76z~A_!FfxA9;Rtv^HCeSmMVZ2kqG&5DgCCav>g7>pOxygupI z6FAxP5n}wjOcyIGT;>$})mTw^zeOhHkK2JGnUvH}lC0G1HWHf$^og4~3-lmO&XC{FezSk-oog8hpbKTL=IDhP zk75!u)UV8vY+ZXB=rzqUF9o5la0kAiMTd8tR~@Idt@9jw0@DeC^}r+vzYYX-39}8N zb1%8wg3Q(-0=ZYg(cxJvB_#fmb~-G75LN%;X47;IzWXllDc5OG8DG!}F86cvL(3=; zyYmh7M~n@i1H6b1n~Z)24Oij!Wxi-IX^?){8{MqdJ8jH>-c`Q4A)`({^V99H8J6O( zp20VkOX@o0wq^6!6gXPzz?&T@)tf$Wrqd{7A{BIxWC!5AWciN@e^F z(+jN0dU&=WyHq6Jg}g|~*@J46Uy~FWykij{u+hQNQ0lT@ zuK*-RIwiGylvv36B@d2H5u2*bb# z=LSiBP3LpMnJrb7Y%|$~Hk~q}lktQSt^LGLt_~XSwd8SpDJQ16B3L0a436L>t@YG5@-)+P=<6WvPn-mM$e-9pYLX}Fz5hxS z?U~6e2;5{Mc6`u*mb4*OX2N`ySaJwvOXhWFNaZ%~%fkbPXogKF=9DL73YLCAsy01D zS2fA@ouX#?^)=7uv>mD@e8HWpm(YvJ%(T2YwsR<8>_CW#)oA2By5-5}OO!g8Wx}5A9 zQdhGZ&pD;*{UtKzP|XsG5P;}6e)+*~`S`h&M8=oBQYs!9=N)xeLyHQ3lsN+6pcvaw z(PV`rcQP2LGQwANY$@_jCYs9;QK`I35h+3M{yq;lls+sa^RI2s5;<^)a8 zMvn^Om+eNq@FE>?1I^o_i#6+*BOTMIIZ)4=zmp5TjAp6(eK7IE#FwHjbkyO!({CA_>@Us?m36#RMj2154t z?!#z~984+*(c6LsDLFPdaauQd;$vsvZ>FZys<^Je3+AuB#LJ>;Pgv)L7;;&yZ##$i64BN5a>_oeY2a#CfqXV7qoBQkwUg{wEl z#_b)SCz(!Hod=#f^XZfcl(+Q@O5-O>FqN(M@)K#3>v7Xv``-bQ9Qx!5N4*aGw3Blt z=Z&)(swVdn$YW)Jr2OT#h30!QRnA1~ZLen?N+u@M_nLg7*TK#kt^IEcWD_>BKFNwd zavd*tT|eIrz!e6G#DQE{*Ed>_@_VbTMrAq5=iiL-)dwGX)4t14ir0uO*7`+glin71 zMF6o&wmS(#Tx<8~uc95$Gcx-<{>$-{CB~u2;g~_8>6iZU!>A{5eitxl+!qG~{tkmf zom_pA{tbS|X`3n$<{FY6b^@nD|6BFTVNaV%wl3 z$F@eqikt!w@zqd&P~4QvpflS$z3pE3vQMs&;>O1XC1L%w@0JA-*j%c%g@SZ${dQ$lOhC{z8hZB zDF?@a!akd$gQX61Qv*-|@7G8|FQ>)T8_D-TRF(>{$foCoR;R``4Z!ukFV>oeiLq(U zlcDA3_?vFWhx6RSym1YNYxN56{0TG}U&HHqTO~sAMB!In|3lve0r%p3!mG!sc`**< zbEHFeCmlb8h>*(hht+_QNC+0hgiE3i8axm?NdCD@Mu{`1c)-px>dC(fOIO4(5*0&I z0-wJ83kKF!87r3*8SVhrO%$N80eY_|asC#tY6U;LX2}dJ${}TCE_eyIDx{c@dcgW zg6nP&uWB}D@c?ktYhD5A?k+CN=V?QKrdT~A%dvAXu7lfRz|Jj`KcFL-23E}v|AReo zDwV_Ogi4kz$^6(SNfu*h01W0n5x;n80TVmo~A1ax0}pCgKwO)xDu zPlw-#LYnr72@2Jraa*_a2*KAG_ui*HuYYL@(8tXYqqcXHGAc~WZ0egKRPRP*2Xuzy9Tk0JG_d?uaXn-#i z;WO_OIg){1GVJHtsknG?Y%0Fmy&XffSztA7hA*Q7wPSdI_JaSbzS8c5Wb=pz9Ac#( zIGx&Q^!ypb(NHkx7R zLkWC3d}NRyRFBZwyRm{xIxqk1fWlEFL_L_%Pq^8@E0{V757hJL6ZPj%mf_DaPTAbo zwzi+5A+LPNLwspt$D$>x2%*WtHhTj@vwt78|2#mp3!6lBB?pHHVzeg8u|0Hvp)oVp zzQ&`u3I=X+Eix|?QK&Rej9lD<9XRLFA|!0UV4~TH#8!;;kR?dWq2#B)vNg4@gGwco3k~$~7GMTL$SS=ID~L z^PL0mw1&_hTz_I(1<$r`2n0G@{X(ws=v82YWYzTv-xO-0bn<9Sl?f;<<5ZmW-J(C< zgKTwHHn+&p{1R-wOTmYLKiB@5xy`69p&?H;HNc>M=nXue3pA>pcfrX6nP~mZ$0PQ~eXCe}s<-g6 z9+-tf7(n9#zd+yWq~uwbcSp-5d;BEpNI<5vzVzNhjwMq_OKx*#nfzYUEfrSIFLb!o z=DrToi+(i6vNlGS43Rtl^mtv#VN?)}lQQv@Ogl5T5Bdq@3N$tIXJIYn)ANtB*U`zW zc2By~hx<#}>V49~_2_y&cPg~j@oj(;+W}YaPsDu$)yFl;fw*66^XTMgZ?O$VhLqn> zQ|XCp_-1$2{i@Bn%7oA?TMfUk_v_Xrz)CU}pEdt^6kzZTBP(5&4un9WYoe@!7*)(jryJOSc62hiKI;4>0TB zR$|kg(jlSJB}k)`w3LFhG<-MD^S$G|f6h2(++*;ALEL+-HRHPGHRt+vJ*jJ-7?RW0 zxy!N?zmFsi6)Ts7FbLPDT2p~oN7N)(zc(3=szF&vS*Kb-NdH+bHBVriD>{*je|N)xshvO6rRH}R>}+g zBLmc06|HaOaRgAmT)qcE1WpF0dPJd!V;&haL0I2W(182VZO@3tytiZUTMnZ5L#M`fNjPCh+PD zurfj$1~iV%UE{iD$02~PikeqgvqIK+K)e4yuU_}rQQBQvfSlZUL9zJyN{WEw0d2Sf zS7l-N647))8Y;mFy_71%Lri@hV{Wk;PM?+Zd|0rzeMLfAE&3P6iCfdoUc{+Ph_RdG z*7xOuip_J{loSRf5CJp0aia`Y!@O<_jPtM}!@Fwk7Zq@AR3VJMzxfmYtPHzXZwrit z(lnWHO#^p@m!qfdmn4d!;^956x1Ti7!n|hnYdsCLnOHi4>L9Gd z>H`e`2=_mOWJOPovMVD&Ek^`>`;v^ulxub8#a7Q@&nCGE2C=VpiIY~E)v+9SAHDjU zFiWobJ_#yGUB^*UDzAJhmSKq@W@X`yQbs?##5>(BtD1Jsb&`A%M?Lo49?-8A!j&9sIEP%Z*;mTaj(;xnVbu1fUgSa z^=oDO$4k*S^M}?OQ{$0!`UgtVVdlqv`wCpT&SzNFb?fzKB=UV9WtOMvHM<8y%Qw>j zK41?LEN&hSvM=)zEVN?bqo@)K$+8b;;=;`muns?3)~b=(;hLIE;j`Sh|AkV}b-9HP z;mV8d7ICoS|N2dBcZWrwY$kiOu2}|PDCye5ks{}{g2hzXXJ?4Y78#0()66dh3RDO- zPF|2ny~6myYcxabcaZFNKz%WANnfYmhB1c%X7ws0Sng5|+VEH(i~yvQdz5$iKjl^x z?B4o@2Pus*(FNuWmkQ-KvF&2~Nc@$lhl-2@kD^hgSIO`DonPm8RDr?nwQ;cFOU15@$q>1SpODw?Xyo_! zj3V<7BAY#(b(hL_7v-}fIV4=x|!9_5fbi&Em#$toPVNn6Rj zl{o!1k%%^ySs481W2I4@6kWmQk>|LidImS=noK7i*ioSohU^;h6>uPLJFd})pd+T0 zK22e$PILcdv6CJ-!@_^RuEHcTG^!7C1)F}SdeKLM%*x#Rwljz$J)sl}pLs}?%62#M zFmzT^H5SMmdW*cZ8t?a{#ig|E^0=uoP-#dHw9&cun4t8b1lkMY^>l6pvdnL^PSD47 z8cb*q`n4r-V*?#({ymR7ET6kPL6egmUnlF#){ukCUCHR>L60oE9NBPC$Iyt1ZKa|O*pAL=8Tb8pue={q3K8Dn5~gRk{$DaQ zj98M#Ml#v>CM-K+bil)#cc3?jw%1=pE>joUE-cNygy4E-a`%ikXL|hkh%e#O+^2)# zV8Phr=I!lb+D)-PQ>J*-d*A5y6-&R~1Q$gGFH)mkhWw}dvmwnqIFIDVSN*5o*==8i zGqELYz&}ypxhxOrGOZTdO!9iH20y#_Gp7_`sIhe*$}WaT7p(odELy)t;7vL?tU>2) zb|#gKR8v2#s8X11Ow#o%I2!L)_pI4g_9env;Hon2J{%-y(80axohUi60rb)XeAEyL zEd0D93>0fB0Aii`zLcaIBmIi72pCNPornQ~BCw-whv%Es3oJ}8lbqoE=C+|RBf3P; z17$)EzWMqy&=*o>$m4;N*fV#IPt)m~Mcv`14t7>neF+>R z2oCT=wg~oQuw_q6h=z;t7us=3;f<29Z!&@qh}<$S&2`jTlWQOjohL?*39=YBPjPZ45n3+pGp(*QWxr~_`XYZ+jui=YY{;IP zx$+gNrJ2;1#SJhDHvts*d6u}H$s1E|fS??GZTLh`4p-0QY35N~O^~%scJ}mJvxKjH zxpQ?{j3lc?Y>T)q4?c!yf=!= zBOiCtcRq~5Z-qRop*^U|w{hM(&=3D(5%@MhanQuoTF@?;(>&f=cpc`79kBj4{i$rH z(RGgow#}J<9~6YX>G4zhc0^ys_EXB6aL7eZqY5O#6m@LB7aUFV>3SzeA>^QlSM2 z{>*I`yRdY2_$q?`i?3fz|Kyy@sm!^I) zy{P6$pcx!um_o;AT&sC2Ivjx!H8Sk?Z|S8tiMb|x`y(!Q{l7=0|KMt^P9+GW0r+>8 zH>|EHx8pxyQ+$Nf%nN?C;m&qvh4=9O01)_d0cww1I+>%OmLYQ}-U7aBbO_BHxLC`| zdfV-dpT9>z>cwkQB(5REuxcnUn@RrUwVV}_k0dX&)d z)%O-uWV{pSvP2=N%jT&NxOS#|eSuY92FA|B7rq7uQtw&4%*={g=?>;}`CAZTqg(GaKwr1VV5VW5b4%5=|TI zXVGanbUp;&K4clJxNrEFlLVO^0ZfU~e1EImUShVD8qedTI z#g9s?Ew54SjE%ot909md4;nON?7ki(WEd(kmXa4SYz#t%$YOREh9H4;r}Or2SqVO> zQ~%OhIolTM`PAb<0X6y{n+o##@Wo#Zg+hsu;CaI#2li|IHbVWvktBmaDgRm2SD5VQ zuk~P$e+N-%^%QIs6hhvwD~QdS6wce~6EZd`mvL~6GVqSQ%aIw&Stt+vl++IkyY&31 zG8HDHRind#E}&)%vD%m{4dI?4Bl@GU@>$ar0xOfKbaumwmsd$-m7elFM>pUj+x@VJ za{Cg$UpQIX(MAy4^>+C~$Hm-yE-F~2gOxhVV|JIc=Jo=9*}(-7NRvKfTRxt&cUkPf zUCt_(4=z`d+h*iSfY;d43u`O(@-3R((!HA``+akrK@E(`u)Vm8_ z<=k{5JT|BAC!kXN*b@JKM|G_PGGeP|`O_UEm7tF?Vqg-a5HMX#hcW|{ad9DMJTd*= zRMi{NG;Tv`K{gE~pb948)7JMbRu6$`V>&Q@q%JEf{VBUD&ahux)hp+_#LkZLDR|KGkBv-<3HCq&zw$E%Sd& zRq8Y05hVyxvE90|SSd8|!Tw>$Ng%bzm(Qfy3Lva%?_re-Ol1N-xn78U#*u*$dt9e6 zdIi1m=oI6@41HN?kr)OiX_f-%Zv- z??)B@s37bWUd>SF0>x8iBv#uo z<7cyvU1K6j)vkCx^B-(v-|Jv+8FAbK<9Xlr^PV^z>{9ZdD@(bVV zf3yI;I8u{&z31Hr*TZQ$9{xx2c%&ojorS}NUF{nz>am3t4=1j_ahu6sO^@0c4V)8> z1em<(7cgwyKrDmuqY5#>{~AY$0v}glu#%{g7L;(1E#2bKTD3bqYoUMqqs*WiGHVjW zSPMn*)?sFaGqs;`Xrw-FMd)RJ%PSUIU=*jGq=k7nr^L@-kAi;GX0>vo=C_KU&kXIV zm=OdutcVnIb%=brc%1jeB#Qoi??cQNDYYU1D?4gS`R-%n1$I$szS&`-KVZ>%-Qey} ze-Vcp+Ubo7o$5YHUs9HO+bT%vDp^Jbft}MxXv%z3m(o>>7>l#^l2>XKe;yn4k*;f? zM3VgiHtP1SuxwmvM^Snns{QJ>vvi~`NBHW^&|*1bT1@?{^viCm$#lqhWjdO)Gv$M) zOB@0HzgY28G7=6(QBrI0Ehd?GD@^`rk~iPgy{XQF&= zuFwCjSl7UJ4FGcJukLC%Cq#acw_91M@kmXG%tF7#9OK{S@5Dc!?@F3Td*Q@i1spW* zP~s;oWtf6*aDaBTlBN~LE^%#?x%^kQQFD6*bvhqyfNJ1HnwZuy?J@3oR9H%gh1wh;0?v!F14a|%yqfRv8h>fm^o*wDp!}+uHT`6yW8nC%k zxZz60hW7|Y?o&Y-Rd|J=+p5n+xb-Sfu;toqsR)-==4}GkUk78~NCC<}>T6UJOBSRT zga?)RLeU3?OE0{q-gL*Ga2+8LIkfmTZ0lgzeuplV7-Vg5;BgX2iJdq~yIp-cefv%X zS&8ZV!>ra@2d5J#61Zj0#r%(2IOrUH|HE$uo1&NWav`>|2^K1G zsniJJ0FGGZShk8w#>~GQ-5dJ%J-eP+pJdC`7 zgNZFQ5m00W3$O7hdFByn(pf{pjDVQ)aOJN2=37lF7Y5G>7){5l`iHd;8+O*CmdUDW zGn75&97uXzn1;U0`mw>)`2%kB(`YxHdX|L%OJJ3hADvMgV6tSXv&xc!eH@Y{J1^k5}iP9*YfiMvFcX<-Y zab0Tm@uIBnaNrUlF<$vd%35o|ii-+#G5BK7GFp{!AQ*o=LmPMrz1e&u3R{N;;}t|9n8Klz#U zz~L*^a}-NqAT`|QxdYPlR^jc0=U-7g<osojy85jTm3YE`)vV6>6kxWi(=009a zrUMw6eY_bVC~(iYWS2nEU<3Ob!^uJogP$If8%p` z+9@=kq+18fjq*}?uj%JF^VTIC8%*(#<%%evUq94C?FxqVTy|mN`J-WN;Ddk@j<9#o zW}w4g5&f2tL(`Em$j*k7&~(PhqCd_29*IVI1hGg!AxOcf$Qof=%PRk!xR|m31mFk& zDhO$uUqFhOutpchAPMwHozO4|yCS+tr9qNn`K31{X=u&*ziWOLtex5aUp2pX1?mun z^OP^|Ub4TTj3sniJ;DFram*Fm2f#({Tw${7vz_>9%yf&N6KW6(u?@WHO}QP95fF;X z*r@D~i0Cep|LtFz8yu>uWry0F)}Di}v(}5BxYU&-*xcQvxhy+^R-Dc3?YO+R)1=84 zJ6~hWdm7n3k|l=}y?cLQBGQ{%B{}rWsW4}6N5{69)L$qga{8c(QCyaecH?^# z*&BSzwM)!0F>23X8f_)qgW4TNfWWgHLu(FB{>o?-3Bq?=La|8xBByOVyiLR3$@%V! zKm_(7;-i9M+89_gZT@_LHb`s|PCO~#?}5q};Xb@q=YH5lO^?VFnLmdJ&2)ui&oYWvO2*Q)A-%f)6?Vi_&5v}bZ&6#b;;!za_w zimnm)k19x5v^>)zyG&f@NCK4p$LLAldC6DomLp&J{WBlRGjV-aqUp7+P4DBtAbTpe zC7XVGUzBQ( z6cO`)QoAbBG`Cb%4U-UUAv8X_uOe!3RlxLJBtHV`!iqcDkf2N&?l0?-G}CMT+i{K( z3q~a+j3M();nl>CvOaQ&_lY#KoEUi z4!jBK+7EjMZA`Umg3RkoJ#S|i+7B(6t-`A(5_W?$df<+RUtuCQm$WkLEL0j;#BxUd zVj`}O7yvae9ERS)QNPwn5p-|yYE4#B9umgQEJREvgMRE7)%%fYy1^~@{O?j;=6miG zK03`@KcEv-hJ42T*(a@%?Pm1?8R_~K?NToaJUrEd6RJ-IrasP-YR?1uee0Rr2zE*U~&;}(y{k70)QG;V2@bJLj_I^*Mf$y`KR(?XL z1&lTsY;5gv64+^2I*2d4ugpMz9+IW}!&)6E8EbGXMe^9DCybFm6@x)UY9yP3N+R3X z%irp2$ZtJj1v5=R{K?a%IqLMh@tk3N^y6!iZ@(?oZA`FAW32=yaRF)VyXFI%QRBfh zSug;H9w`5e;%q~TY#3*$a{-zHvVv+bo(Mw?2chECMAiMuyp{Q!K;?i3fyuEEa~o1@ ze`tH9^)1J#tP{ocuanKB==DL0$O9@;NYLX@Qh`-iFA^U1uk|n_c)?I_pH`1tgM2u? z(~JOSsv$ZHvs^C>O;W5!6_r5y`RG~r zf#d38U*sAZXplp;JA4`jlu_odo29Cs&;+@|ZL4^p#{CtA9>3dwBe4j_fXe31Htb$A zX>aLkoD%=S*5(T>zsIsf{?Y08!zH@cSp1AAc%(JbpTaMKBWXnIPlI?A8@JZZJ}d2|3RbsoPHu=MEkqBv4wbzprl<{)<&zn(q(Hn+nA&#>m6t75X+Tw6B}V*Oi0)J4kApaR}JNCvqG2rCS~k)tANQ zu;~lecYa5&SjQci?zJ!sk?r^a)9>T2!=_4i9@u~xGYA@Gn{a;r*p&+$_pX{W(%}~j zxBpiWvihOXT3K9Qdmf^S4`U=OO+$}UZa7?g?f~c)U*{LojQh*=ppIV|wA_5cAhuS} zBM}Cx22GpeLW)%PDakw5Z4-KRT6&n=@ufO~(I=10*RAiBM(5;;-Wed!!#L)VArmas zQUhKTDR;LMYL)LZg2s64S!;Iac$nrJ10FeFhpMCu_&b< zl`K%WbtG)k+9Bj%@pB%GlavCSe6kmo|ATxr6!Ptl=<~9G@5aA+de_ucl5!m}X5-Rr zdQdY<>O92%#>tom(sTZ%I%3F1YIQC*@TVN)jSg-PIFm5sGr~f~4|%Acs(mlK1WX{A zp_|xRjkqNjvu~F|?%n-Mb50>cAS%UcB`djh_LIWJxI>e68ca?+5cW#Z$7LR=LTZKI z>6_U39=Cd=c7=Jv!q&C2ULO2Yn}7+^JgjRGv1R5wG>`t*Mzmt?eT3PmnRS373)${K0E_kezOD` z7)j-menxiqJ#)fLA+RybKu*y;1gme;Zz#>g(95EtT`}z4tF!i8QPZtSZG`}32kuic z-elxKRrqw;AC3VBHw@CVrrZL>Rcu6IdCm?QG$ox`Ke~3I0lk-j0U>CI?*6yq2wR`O ze$4VcYhP7Fw04opTUvhYHUqt%$5P2bZ%c+(eC<#6lam%y=u--N~Iuw6b&k6^SW4sUx# zm4DO-$f%*r>TRZ5q16NOsmz3B*ND|~2cR|jt6cxm8YBDM#wV8yfyCI-KDZK|L*vLs zuBxZ@aB+-C%WtG`99vY1J?$Y(@+tX@nIie12Ou(LNwTCDD3Z_}h|;DiqIpH5l2)EZ z=-(IVq=$QH5sDqZJxzVoMqeHE# z@T$pSsJ=aL^uwqV4TuwY%YjIwtn|wv)gVZWd{p6OhyarE$3{HdpnlQCf^b>LI2>Q9 zwI{_1ha7T`#@mC4L?v(b;t7XBGs95H_d(LK2sil~oU9Ieg@6pdl#D;D4RfgFIdTCY zGf~(dmK3+}aC_vC^q02IAg^&a9aM0myC56Xqz{^b(tmmSK@Jk&`WE8)6azmYV%6gv(~ z(Zym{3u{4R9nX*Tjn6#8ef+T^X)Wrio1n8Zkrj^=cE&%$v>6V{9a$U=<;_-CG)uVYe8$VB9R!n%>XD+9sf|j`IAEz zrbhp+E_~7^YY0|tZ|#OPHsphdRYf((W1Gkf1e~I$pyL=y=QD8jn=Cl#LAzG~+XUV6 zH<9b8%GGv^YN3YBVtB0Zj4(Ztau=b)I!t7{MSK@Ifw^l$ck3( z=|v;oPl4fvQ=>|%!c(y!0+TaVxrWPUyBy0vEcT?lVq8||FjIQ zKVD#C4z|#^i3J?;cl!W~7olVsf@ktf>ZzPmBoGDz-oPfPi8RDIh-ij7qv;%-0-AC#LGtov$FI1+`Q(0h zaw`bKcS+$7^ z#%uC|1YNByD0sP|_G@1gKjzPV9>JvamwhL#svVTq^5P+yz~Q!3xX43TJ{Qzn{)!H4 z__HMlx7tudaj!!Az}s(NH1YMuS6#xr+`9X~t@3##i(vVt#O06c?xf%4(#dBU*{Pb^ zt&p7r%)WTipcwsD%n%6;{H~WxK?|vh8yq5Z+#lu7FcOPM1w{Ir1y#q>XG-ItM@`I)ROeY z3C97~-USV*s{(7aC(E9MXZW#P+*w!{h{Ns0ARLaN+x28Q*RN~11of$)R-K?~%6*nx z8C8fiBL-GuA|r+)%H3u!3orfNas8;zk zV&Cu`ZM7cJ)bZ)G>kIQ*8P}N6;MudEGJMq0M|NTxNP-q7UL0tsGHcX zkOrD1`99Mk&4;AaTUDjE#hS;=iiPaOOIX5Ep;saiLE$AHjcjmn4>q zFF4Ckk;b1!2Gp#U{?=5e&JPN24BV~TTdrlBcP)Gfny`>hRp3wGIwTwK|I_9!M!>Kq z2kHGBjO|h=gn_HXstPclt(g-nF>*Q;jK0GBtKfM|{Jl0{xu=dUz$Ij~s_6i1`@e@6 z56nGW>?D;9nqCV%PSn*GN>{#1ek`ph_^Tqaxl`5Z=qel)52Jic!B-H;b&51{9s}nTTfyF=mjJ0coQ_6Pi1)vVI9uPvS442QS>F{@!BQ4JZw z{)UEj;GdEiq<3(Z%1@nUyXbyK80a4&zL%r&Yg(v6)6Ir43TgYAJKeq0@hRGT-8nDl z08M@udD_4>OW1yUjvEgR8ciDZzuKhvblKZ?R`rcd-P$^UBDH1{$%&=Zp<9b)fzsSW zUy;{Fkz6#TH-lg|s~S(M>a4q2x6E>pHJ1^%8)c$qPPpotc`M2L>YQX=MkZAC65g1K zl&oOzSw*)QfAA*|21=d|bK(cy9d4<@-6v2yNv53~#n%g0rWxw{+)w_IKW?X_VmuWU zZxuCUD5r4Jf8hDHOl0V`tZcN(#tt}CXv`l=vC~hD650S%!R3ub-=RM<5CTF$*41WU z*Tw^&fsQ`ax$8B-31lNf;z z1OMpA@g#JMLI0z%Z2-tvRS+gmsEDotgz}w2IHzF>CKCvvixyq#2=zd$)5k+Ahkw9z zDOFYWGG8naJZ@#n^*Us7eR?kCDmOzD!=Mti#pIQckivb-pmA^~oLb^QJD4hah6IWz5-cLuewV{!Ic5h80p1XFs1 z!0(8%Ql29U&m|f)LQrG*nlvO_e>lzZf~{~e;wDpIyw0lCl zJPPT1MoP&Rd39NP*bRc#H{;FVsRr;Ey|C10QOtcn+k};EN`w^#nU!riTcw6Z4l3A7 zC>!4DQ1Yt^`Q+jQVu!#|0=9Wuolu~Q{cV(ZGc$!XRiA{TYreWgLvEiczK+3zl#n7a zY@M(Dx(DCEO{RByneUelxjqNQzpL%*_c(NlT?1j5N~gQe|J9%$ ze6j390L)<%XSVE10G!<#ozqLD5CM#-f|{8DKidY3_%9Lwz^{=1Or2x0w!7rv*Fz(Y zg;HFT(p!AEO9P=_&STm;urwqIq2%?y(z`X8zM#HgE6*zAK@^^1>dm8lYUAypt{C>e z{}R?W08B}drdPz`tEfZ=5f5CNtmIeBMb@L@cZF=}5G7|7u5L^6wKoXF^6FM2_eMY| zW=iB}ZS=Wb#vs9Gs2R0wM>_8vJl5xMKi`vQ(?3rc;j_sHq*Zi59RIl_V(qYcCo0)3$KOi-5nbNvTU;@IaaZu}ao7x* zMJVP52R17Hp8s&69BZ7Em5O0T1~9-M2@l`-C1=zr3t|TytW)}$IYurOGi?S^{F*6$ zg5V{y!ok~7>%Lx!uN%nI4&3BNNUV9T|in@+Wg$=HIP)o?FkOl{aM$ zzd8mrE8zR8>}fsn&wsVaVzCj)75cIkwkby(s-AO~ zF+ot!4;0G)!guB}jaBO#u*$3}TuY?1s*O+KVUV{LfjE{My?6@QZ(My{?c*Rt94J`9 zSzeE+T*=3Z<;>)4(85Z%w>m~|o)Sw8FaybSdLTJ^fGqEydrwXuipNTUQq>)ID|z#v z<>hm)epI_iFb6UW4(3WP-iy$cLN0>8aI^iE!aFo4(^#1snrzk^Xa3g=43G-UG1~e2 zEZS7Ss8oZcUSwAGL(bYSVf{f-Zgd+(&9wu{a@&+7;%|J@!xOs@_wPz63S|v{Rz^fcn&(i*<-g zieBm&5_mwPkO!Z=53aTo;ko|PoY)%Khv`R0lQW*>BIH%Mq`vLwKjL(`e}FVfvH3YL z{Ke6p#VY*ck6W#K!11zk;Vypc{&J^Jrsa-DqWW5Hx&>%kA<`^uiTXw%=y8bhLM(M% zzT|h)UWBZ%OANss2adrQ$x!%ohAI>|lwBdc@cqt)&s8Bfi?t7%G6dP6ss}>?JOWzn zufQR!{Kf0p^mIOXpNJfDqsTda^l*^M$8jY=Y*UvI?PnG>LaUvGhbQM6^oC-V&xyH; z*s@;fhX+{qp%P{lqO|4UuySAHvZ^Yc*GjZgbB#JZXy5)0XU;{WaBW3kmd46$re1s7>2c&SbOD7%RY#VVTR_&fbkVk_;ZI)% zyb(OD>D?>ZK9s5v;9X0L2Q`PPbSJL6aGTdZ2ZB5O4q_YbY8%hadA|Lbr$+O#S1Mph z67wE@Dbp9Hbh>^pS&16({+vh(uU2k0=|v3GqkQD43I9YS9qtzeC>K*vq&>#QgzX=<)|5KnUD4)L6j?lP?nCKA z;h26}_5lNmw~vSaqXi)GCZbi{c(TbzJ`Vw{WRcgX7$J9;C>pm*TZ`D1IP8~5dJgxu z%OifxDgR1CrR5l97JAgRA;x1MkO01UDs z0(244aV*%(V#n^>=23umvn56j?_OVR7B!22;i(nS>lujg_i8SJ;s{`H5^o35U)h*x z6NP_O0l@}8U3>22(Hh9m(X=^1pr2&daRf!BUPi&4)JZ8k*CI6eyEb33F_1FA()OOh z-)423I0(Pg1F+SUJ~AtFtUg90V5IIa1amvJBW#MwN_pWL8)3^E9U3m(ch1zo+T<`o+wy4GFF zN+pzmomz|uhg1d+uIq7qvBa?BtL;GAw{khJk5nFTxS1`)bSU@+(Foaziqzws&A{?` z`#2|w(dR7o?hWFfMC)*bkNagS%aTvC z%0DyK(f5=HkRX7D?^7z+H9DRI<#yi5t-Al< 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 h_^48KcLYDxK>|G_09Nm#wX8QF5=@& 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 CS7BQK diff --git a/site/graphics/html5frontend.jpg b/site/graphics/html5frontend.jpg deleted file mode 100755 index a5370ac501dbaa6f0ab9f9b19223a975ab46a654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157632 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 z b?b9cr`A+1R9bC4)3H&yrZP>2|1?AD0*ahX{Q7vBfIQjBt1fuYP9*(WSkAwL?r zE^sOchMf^L14=C>6!Z~0^}_MzM*dG!OG@P2SFGTwAP=8Gq^2p-C)WLD^@#8b`|c}J zOl&y{_dnfatGn^!VZy!pOLjR36^TKVbdW{KfYmD8GEEHX(v*R-5tHnMPk$MgZYUAi zbB>}O9>3ItBl1zr2J*=Bv-0?p!15H(2CbmZo!V6itc|>A^AG{G)YzZA$zax9{EI~= zfo=5KgvE{HQ^m<}p1!AB6vNJ4wPB2;K{bx2DCCnKhdIZ;E>B>r6J(aqL6~r#-z++M zM7=e;`b z9p#7|Sqs=9LG4JvQyb)0aCp&bg`2fO7@&aP7=X*J`^NEfd2$#@Gug!rKl*gzhI4cn<>@OwF*U~p_eM&eG*x}YH;*A7NQ*p9dFc4;hE@rHL1C=F z;#%kW*Bg9@LCx1FklFZ9rEGY$yRk|u+gD|T_K z80I6YAMjwkkpyt|a%f!Gmw)KM0B$>BLc5X_1#4g5-`U%IkYubhgt(lJYQ{0Gq)iJn z#J2`s#t~zaVD)12zdH8SEh>dONIH^sq#R+PN4clZUjJaur}7PY(%%cj(pf-}Z}DZL z=q#q`*aQntU(VKSe%2Ym;U;% zkRdSQVMI-N^ABA)F2mU~DrzB)K$JazEk8GhXaE+D&>Mf~fL;&vr8wZWVnCG*K1oCU zq1$FaQ;mh=qN0{iv+m2Foxi^7ttcS*cKxS2{>bwG+iTv&L@nX|{_a1mmVVnt{FwY_AP~k&_BhBVbSPcuK5!{Be6xr%qp_}B@glOfI{IGy}!wvWzM{oe6t|i5b|+JjsdD1?>b6cg%r0NF?nz@#4+6xy?$u} zsss5q>mj$Qx*oQ@&c8MGpt|52`s4~ta8U7`Cjaci=NQ&iF#gakIncO%Vx_iWiZ;UV zSh-XAKop^HPrJZiDvB4UzLk=zVdj7+PS!h_903)bK@D`R24Py&stUCxF@xyo171g z8*J9RRqqc@T{f<)JM*#XWh7p0#v-0#eaJ}tYm@wD0#nk#|FmkVN3tf6Kr|NHmun6J zHk}=+?|2>2vh^y9jRKmj8K82`LRtKEZwI6=ls-4UCZIi@_vqwphe!**3&l(w_Zah@ zr~LT0w`yFo&ye_Qxv<>tAA`_8{k9wbe&5smf9#Sclnk;p#cAFcVK=-NAEC`KQVrtJ z5vZy33;JknqK)Bz^BV}XRypNcxMoY0-#)DITDNB)s=T6d z3g&+wi~P7eig%kz{;n$&#vNeS7qi44Uk3gApAeS+ZEy15zI(d=zTzMD>3=_ue~erI zWu8YKaf}>7wf4uhc3@mRG3 zeVKn7)^85!9m8oxn>Qvrwoq%-UlUueLM{x`#H{>(EVW?yzmmc;o<7}B8h`#B`k)$c zFfpCv++kzcKhUM$slAlmOYu3nPF11k%#|GbwLn>^Y_q`#3rnL7-P=FQo|a=cKWH$C zMRHDZ)5pzu=?9Kt{tjrsF_?KAVOWK5SVQnce529*4B_<;P(+_!PB)0yE&QG6STQ6s zUsY?6(DS`T_1pd4_1;ciu}IDIv43+W{g+vH|2yJi|Ci%TZ4fM7KjATa#^m(GFIT?z zqg4&ARW^9ORB>ZCBc`3=%zmn`i@th}cLf7iIfTWRO&3d}%5#Da| z6Y7)ovwdUc< z%7Apk4EjQl;nsVDP^2i=yshAsQ9*;bnd@Dxj6SFM1}SPFg&C2 zQ}#`Wy?Aga0H)VCt8gTa5P>hlx%CoRwkY?|Ipw(R%Ysi7deBo1QWcI@SN;u7FG{?p zi9t}D4(01O3dH1ma8!Pp%Mb8pdFn-t`^WJ#vDGYjl1iI2SYXY}H34uEj<`b%2Il5A zahq^ov+KI#Yw6fxwe+^`83)jkz30Am_TQyNCCQUzA?PJkU(Hdiw-QH&JBF(AyY%1V zDnkQ3J#XCKhbPAWLYJI|yumr6B7oxAd)U0O4N%JrRWjlErD)=gv0JvRT=nhaKCDQS z3Ad1>s(NTZbn=nlpUd%-l~6kv*K`3v2GI}D@` zrg`ak8TcPh$bUxm6=VG-Z#TD4=>EEb*?8uatTV)gxcKaqQFXw(<3{SJud?L|0uEz8 zUvkOwbR2YaoFR3Dzx`HN%|rwH(5-*JT7=Z4q%;2>7{2&_cS#AKNt=L(?XXC7 zb;FKJng*oX=LfxbBHi+NI{06men>NlXoES(hwgI%=HF6BgIH$Z)lZ@NuKl6=ilL1| zdPxz~C~4FL?$F$1q!D1AB#xc>L+1(J9nqbsm%Wi(vo>bDp7&Z6&(t)^^*7&O%cZ6VAOTvQq5 z^sKoT7Aa}1LEeb!UF_ITLUs`_L6dJ=+B3-2CF`X3rJGI!QC;4*=YC^E7FWI(mT5lD zC3HUd>6ZSyr)X2zStI$eUzJm1BM42$?)l+KCE0tr{}5;+p*%8XoF;DMqj}nk|EyLYth3Cjr|D@||*;JVbp?5OW+|0%OlTC6en zliVlSPoq@{J`7!OnJe4iYidvp5vL!z$}IH1=c7QKc#aTJS_j zZuxicCrdq`RLHp`Q+)f>i*Mq*eKtch5&s~|K{+30J3sxp&lP|=Ao?A~!5{vIj_~Xk zv~9$Q*;;P!)yfc-fYMc0t2tY0USt_<@*XBe)|SJ$U_A2sIQ5|yVL$EqJPyMWO%Moj zodaxG^Zw4!DDU@stiAp-Bhr}2EdDR`RiTIru5bGa^%LW zbsbJ?<=*ET?wlpu5Cm#h5Bwo8lCp1ixrPSq6R65eR zUV3eJ75j(YOeMCQz;@BBS}w^j6ed^ZZ3Wne>9Oh%=gq zn-@fr?h@Kh#eK;oz{0c#oQkcFvu4?vC62uGN1Hp<<_kowUsAGq;FH7MU5gqkJ{t3O ztE*v2mE++{VK32g5G)@9CJ(Q}%^@KgxQ5j~Z%=f-;b3`v(J<}(sdYrRP15w=XjbIv;<{2x8Wm8wO_!&GMd0vz# z?3~EC6nC94S{(<8PLsM%$xNLftFDqlOpMLF%gc-<4adjz);Ckq{ia+4WjPlE3pOl( zLz~6_mK&fF2Zpl4u3T-+Cs+kQ#^~V3bDa$*z-a#Q7vDw7>BlH}q%k9k1rS(09m?Fs zDsSu?Bl7Ua*+%{s!_##Vs_Ey|@{Zp}FW&#{=U1CqdsGfNoJcy796fAEV%dBQD z8%oJcDL)b@<4nt@j2V*Ht%Bq4SHG|3*TdCB_cF_TR#p(w4WIbV+sQDq^Dq^9Nf9_z zxGAp;;sVZPan~GKetO2C$i`wMA(Uu!<2QZhy^k+nKda8gn+Ce=PS}J53dY_goHV{^ zR>E(LS1+@xE5&V$^sSV4LiGSrKr1kpU6&G3+~X>Kdz#rui~wlxUfI;%GV zo@W*PK2hn6k@_YNsL}p?vG(=j93i4sZ1o7>mf)jQMP@EElHt4WSfTqh`CS^lz|Do1 z%V!qLvuq;MqhqwCC*V&XznLp7epOgJYBWCHqrcIc1gTg}4~f~emKOh(rSNKw_0{gN z+bDBG5d6+%MbpWThBvcbzqq|r*sRHBJ<|Dr{q=_{rK2(A&%dJlqZBZD)7Jo_3#I3@ z89-5W{y*V@{73u{;BQjsH$L$cgI(!{t%_;;<3uh%!5i35woQ+mH{m*U$)S^1 zZ57PEGq9g>|3&FH7`dEk1cw-ZjXT4&Y8kb1$>8D%%bPm0XCCMZvasgCHI-bI3%JUD zKbzfo$|bCja&{mwvA!y)9$>Y~8mmi71CBrupIpg@VVjkCR=@1wM_Rr6o}K58!e^_y z=quECw50Da4K8vds#u96=t@g|e-yv~y3;rG!2f@bHb2EwVT9gGSHS zN00exi!gdXckgw`5MCMVGQ^v>4XwJ;qi>qZerfg$13QaCy6>wwEpWTFf5VXc z`X2v-_FJQsr2~oTvE8@7mu9Nv^^QiEdzw2b-MbF)gV{liL6f^qc!}(flK^ete`x!p zr*Sjy2-`^QGk}5BAG%|qI?O2yK*0%hKy?u*A~XUpXC-v8Ni&V6uL$l09ZP~FJ5k%l z&fvYdT3SZJ;glW+WLJ^~JB0+;6Q=;SO}Y~RM4`tOm?r5N97T4FIwXG-1++?2ko`QU z@7cA-fRa1!*0D`9=s@-vbRUpR8=Hf#qTJ+JrroER2OVnxm#7kBdFyKIu;Q}tj$>2J zO}~#O^Q$b=6pZpuxoKu})J6ZG=BqIiEBCSl8!N1ob56@+NBHS$5^47zdB@L*LYgRB z-}nsL`dPa2+*1uvk3~w}jgOykQe(LG_S^B9nS`I|WyGaflL*>HSdz6r%Gg+&`Mu`& zjfCGYex8L7soze%{BRC!22GvWaWjAB5tHPFjb5Kfzc#Xi@+F+#o21qCtEzCv^^3&i zNwlO%KS&uWL|2v=d+80q#5Oo^k2UfwdX z%l8fU8=Jen^-p7pm&@b#vTCczjnTpNNX-U#g&p{Gz*fss{+3{~i5_?81{8l}u_fN; zbY-Nj+R|?kqV3xVObudXqH+_YFbbpjJl$#R&8r+(>LP(Fz) zX1SSAe@tWBE30Xl83c3VoG_|eh zU+q$oC__*hcDKFk6J5%TT1y2ahf>rl?wmb4L1i=Y^D7CH)F4=!ZuY;UF;Ufrsd^;s z?O;f2ZJ>TEW?99OU0+i}FzFmiAFnI9qxW{RhW!KH&z^$~=y5rK#AR;m2N}6gwosxo zyC9m>^fbvqRTRZvd2#G*0LE@u#?0(X`n2w~PIV3kj(+AB{s(qvoU~^`wcIdaRN2Qf zeeALt#;?{#-*QQ1jCaWxUFUjY6)Bo%D4GO`=@%4Eo||`(v&iqdLYUq)F@EZh=#RQo z$sJL0w%jv+)v&fPPqjnR2I{N5n_6$*<)a8}oP+t@xBn4t%zbv}(lgKIyzCd+CPRv> z6g@@4nU%n_*9b*`FtI z4vmfXDPXt8aotEMK0<`q$3yP)#H)a>J<=&c6~Z&;Qagt1M?TT|>=}uKn6Wl4YlaJ} zMb{@~u*lLk8y`|)zUU0kGjEe(9zndJP@Blhe8qV@I~p20u+pp=+rgn)k4PJ6J5ie( zQWTcTEns05^=!eMpft}gY`f59T<2C-g&g%mWK112w1b(enWG6&hsyD@B_*=D5H>*1 zO!`&oJH|EN1%nTIoL;&d_v7`eEI05AFw>T%9x(ICqjs!RX0s}wYJ3nN{MBE&7U>x$ z{PsQ1qYufdoBB7vcLr>sYn+J3Qc}|9)lurD@^K?n>O4bE!4W0au-oRbejgm(>ILiR z!Av6EZdSQVxlc8v-9x98?F9R%k+iuUmpm$dwD2ag*lR~iZao)Wa6M(JzFpjZ3d~5t zg?ormjy|q<0)7(XSot8WCxE$xLf50xUSOOK@iC*SnyH;%JW}Bqp-R5Bp+`&G!O2Yt z(vZc&n!?<5g3j^LRpv|cTE@Pq(`Sa@NE_v^ms9o(v$xL;P8tfuX)`?>cvt!;h2ix{ zQOCvVlBoQrTP%82V%&=h-2BuW$A;~!QT|sCV*N)`>ekGP_}yKHiq00R=aJ0KlBTBz za;K7jBdgJ2GxT4HrvC$6u%eM>a~iSk^J+tznw)bJh_fs8*;5jOyVn=iR6e~pGVU!v zY$m_ZSMlgr)TFySta%+{Q0x}MEGRJYYZa@&w;tGdmHts`*|od9+e^n!!bCi-JyZBW ze<%$2EoFI06q;E^+1ao58I2z8PdJtx^dVSB0xU9-Mjp8taDC~?M9&nZrkw5#uF|$&&#Yx7n&hF9zOHc3O;&O<)p;>{+Ql6IJ+WRaW5@yyQhH5y=dNGW|=U$U`S^V>W z&D|(A-ncon(14Gd-qpO%0yj%FGMU@|(DClEa<8ciqJw9zjL59-eudZ>R3$p<`+e9j z{*iNz-_2Hm-6sOq<<1qim zJg280A`ZOd`#v#Rat5i>o?u?X zB>|HQ7C)Xv8;g#VPNiVwqw_X`0(c+H@Nqm#_!NOLy~pnL`a_0k<0LS@5#_w^{=PGP ztkOnMi#xPBR{k6KT%&+i-cXBE*j|C&HN6uzvJgokG3BFgrS_W7-dMBa-q6jl_kT5G z-vE2;?j7WJt$m>xanVp@&Qbga3GJ~Yt}U-B_8_#~1KP@jw|Kidn(H*TtJf9HTAe*o zR0op-vOi#v-BJWObC>jIxeES~b1NgyiX;XNbJ5ayQWf|54Nz`FCfSz5+lX@%Gc#gm zYngPbueF0U<%j&agZpb{HjFi2yl%LjZwbHrN}&0M&<11r9MFww0MY@fOUZam%B<2jE&E(4G*xC%3d%*2kkfQ?k>ljrP9AHlF>|o zb^fx_@00ftE!`byknZtKv=K#49BKMHnEq_MJ2bhhtyK5<3vu3RReFy9+3(v|L;9Z- zY~7l82w#b<>(GC$twL2N`NdYrZ@?Mv4hj=@1wpP)ca3@i=CNO{>EFt-Ws40BE_f1p zo9Ej}aj=f5b^jYFO_R}NP8y<#7PvK`n-~#Jadk40%nVRfo*GHQrXI+dAJ`40)?10~ zAlfh|O$x^;UMN0_xE)E6v}_DxBkm?DDkp7;ooo$DczC6^LCtoPpXIvITri}ai>%E- z#6?ln=Fhw950zf78=1KC#eH-{j!_aJni0Bw_r#Jn*JEI~Ehg8sIR3(&0kizf@==Wb zRw*hiB=hOMzLKVLgp%PvTeqB>LR#JFC7$gmbC|fPwjN1KcuBxPIR<@_l7O_C4YJuC zQqmG|Vvx=HgdhjKx%tKRn&W)Ff!3KaHwnxMxS9&5V@Q0&>y^P6DWh~l(Wx@O=^l47 z5F-B({Ql2C_&@x&IKURaB>&A_V=a^4a&*t#rbNpGI=uANwcNpVA)Est#Y6md;e?RL z@pjOdj~*xXN^N!Fs`c2)_;aY}GpBc)uUcAJ035!tIpLR#&Vb|I0n-a!PXC9TNK=3p z34A!wbA5u~3zR3cZg>Ck!NsZhtKBaXZ|Zy#B8>^S-;65kYTpqSKl4M59b%%ph&hQ= z`->&sj6SzpLSS^W{Jav_nDa1v>#l<6kI#Tc&qRv??DW zQ;Ggw0&X@&Z%Rk0OJg~fG!SB1ZqYCqFe-aytP`p_ahF>WdfYsv}s z2MWwVTP)4ll8%#pxeB+x5x;Rs)$KjK6lBNgv$L9Vb*QCKG!GD>8#M*W<*Tx?eE#)x zFb*y?^kJo-0j4~;SK$VRuk?6~jxGRCivCdIf6nqDO{iuC+;0jJ=q4ck&>iY{+cVn( z)Nh84KXgg6M1x}-FtYPhUtoYdHO3Vc2R?kDZ59Vq)zf=XYwd_*6_LIAC<)B68FldN z0fKhc?C26@f()>-Udz)itTf7UlNl$l~v-jys|p!;Le}JPZ`<(9N2^_B2?tM?OvVq5Y4p%@6i*YtH>WD2g|_gK$8lSOEg- zBY+wT0cdF~-V|UFg3-)iA`0MFb{`(!&TeGgyDkZ^FM*pmk#>O2MYZ|PgAUKc)0hEL zo^Xf_P_z0#QwD}GF17SiK|r3njg9}8?;cy#<3JU?H=!P(C>*$6@SKKc{4s+8km>@> ztIUrX4p<~D{#YhNTG6rr+4C~H}hkR&1NVCs^+F=ZVLQ<8lNA;e@) zjD1WPGj>JD&RE8bEz2-N#$e3#{OEaw=RJ=8=twk<-|xG8zTeO1 zJU{12WF3*;GyK^yMbYqCQ zA?G!FNHXbK2t5~_(_-T!kcfJKY~;%rUPIeI&}i)lk?DNmK2xbY_~vexg56syGt0mN z-#nnkk9*7fzZ`<7#0i&K$ynSOJGdnH@PxsqWnn4WcQx@|^t74 zJjAZw-Oxu}w9fqFt4ZpZEtt|@=5FhQ69KB1BKN`3OS9+UXERPR!u1D)7u3%VWy~yV zKi%Y;w66d5g#g_=9^?FAc}qSHd>BD`4oe^bnIauY_h()Vku>4jK{#*XrfPfFM!)sW zj{`~?Aj}iog34y%qAhV%-3$JNtj+rqCvPm@KAL?)SoO!c#DH;6S-Pkj-|nN@v@<8( zPU(tW`}$z~(&MLQ1^1ss8BwlmLlE;aa1=$J;Xb^ELdr|(m6xxp0`dULI}YC_I_LJw zLsZJ6S=XT*Kh=|1|j2t_S*}EVRn*J-a@(O<$!=qp1xu?L>TJBRZc$m1*e z5gt3_v%YG7du?1EHHVHJH@Xx*?PM*UDQp+HA;6<|Afc~vuekmoULbM@#V}Uy!Q77Y}GHo z{JR?KYawdOE$7yu9Nj1K!`0uM5PRNs++dU2z&A;=sB4n4!Gt2TBT@;_kT*l_>uJsf z8-avr`}KL3x}K0uWNktlB#3mZ8D&5QhoSgd$uo&M=SdnZpcPh2>~*EOY?*i#*tFP)_Mi1$8=6Dr^$e zoJ&N1;3nSxT!!K?esL-OW`R?LGXX=@rgP9ZTZx>^8`RP05Ha}}tO&JKyd%ox^y~ff zU`=wf7}qynFU;vG-IG1?DHmSc=>|C7$x2R{pQz=lbz~o!WY`}xs{}xTo0k#bhhd3e zAaXEt`l3+)BsbXTVNjjklJ(--q>9@Px8mDoN;oSnBEg`Ijzk-@5IJBD9xx5@7vwr65gvOD8BursV}`f} z&<&$QHF|Sx8}&15upg@3(g`*+s}?B35U0e@1=ttR4WO^2dI+NRZO(JgioojIgiflg zZm2FvFzPQ=nO;EC|uOZoeESxdLWq zaWzc~enD5#jzwihT62R3sz2sx(i zBJB7!){3o)QID2ORsFyW1tBZD5)9gSF+dn!*4yJ}KBjfHgZY^DuRB(tZt@XK^CN}n zg?a*q^2WOhtf$0l;_)lu=IZCqr3!W*Q9l@6MAL0^P-j%{-DWhjIB?U3J71OpRC>=& zi%nUj2BXnoU-r)W>zzJwew&7zjGPIS&_A6VAr=CO-jA@jYV zv0I>rkauapl*LF0>JDGU?N=Q+FP>K$;ke1p4@owny<^FISkpbhX$AyOt+&8MknH(J^^#gP zt#K9`!`Yk0^1L5rD|`qcxIbUR=^PUA^sg z|BaLC{j0(q$J`W7*1RyhG9%Q!_Xi+6=UN_$q~b$_CtS4&;Bjr2QKc-GzCCSZ!>Zbw z#>F&@7XUqqI3@@Z_-1iX^h}p1bu!4>7BCo6P0_JzY2eMVsT#_s=lqUO;2lN zpr}0bN27wx0>8B6X?*F0MB*ePuS3DMRVC}}3#EnuLPxKZrxP1*yh5U6ce>a!2n-9E zE$3%GV5CrIn*=0d<*|H((Km8%3)G6OQ_6?kccDCPrykyx`{s;(Tud$ z%IimA)h5)%7_3l%aSm#vD7Utx$X&%e@>FHdvoyX9&rR8!L?KDD0_!u&ZB`oc6tTt9 zVB)?+?x2V51CH&@F>i+BH+&-k#}T|_EH`a$MSsX>AcJGHPx?$W+9+l2Q4}8y|Kjjs zNd%dw1Z&ZQl(Pkc%dTI49dsq-P7sydN7!`lI@6wpE1|LL42Os=69wS1&{_70Pd>qt zZMH7qr8R=z@_BkV!VFJo6KLOfvCnksuR~Q<4aJ8ACs`bD9^_1UD@Cx?FR*_|_M*oG z%6V;V6taf$_m!D6exAUSd&@S!$tzdo+~X3Ar^%%m<4wOhNm{eY^keRY;8?>9mnkFkohCAwA z?_fJHchd{Wi?yFk5Qamk(AHq>HVAcj*7OG;&gfwqA6839As1ljBUI2tBc-GjO_;;R z(&t}BO3$j7^i#BWg41S!H5ea4MAkAwCT{O>CT?qFMlEi_dnOlqCooV!@8l1s!DMI? zk{?#m7IKc}`D#{(^EPce0wS-}iLIlqrV;dWTzqI6iH6Q{v+oodv8UoO7sK_xI(ebv zl!mT+PV-yD`6Dcm{l5HpARoosFD?CfF!AlvHEj5`?7VFoj> z4CUlDBm=!^fllQU^5DC}{6-0@GzUFz=*iwy=jY!pJi>*BJZQiy^AO9*7Zh5(GA4)$> z^Gx%njx%Lx{5p4WBHf?d2Xx2@Ck#v4OFaCmzFj4h$fCF28$Rmu61{a&l3@4hZGmsf zhk!t$W#iMe204%nh>RXiew<Z-}}egowWcK#$2*%LdVmtP+7V2Us@ z$=czFn(|PMBcipD#F44@snD;`QF42Y^k(`*df%d%aQZi22y9c9orLrc}D;Hvf2 zn-D5bM^T$qD~ar`La(;9v1Q0K8 zk8CZ8FAf(WaQkP|zND_LZ#rZLLY6#?h@Wz!AO9^~tdsS_L4E`$!aPOuYan&oYi-)~ z*TiH_NI};Grl;oOC0;a++&q5he3R~n107!KC)*i`Bu<94_USFkA&SUT*2G{Lz);uj z-qb*It%MadtjEU2$%ea5HGGDGM zY)0*wbZ`0_p4}%V6(6=6;hZdA0e8}Z!bY!04ul(K(o~& z*EEXagjFB1i*>c}{*vy>EH*Qp$ebEn-2+5q#p`$MRd#+#e3I%T&szcJT}zmDPmb4j znu%xMB9He1wtV4)xx4gUd5g$N2Bu|Kh{%)(kww!yD}#IncT&|9mQ?tzQ!K0@Gn*3c zB)h+)7o~SMyzR<#ye|p?t>UGKqo8%C#+r(IyC6U;3yz!j@DJY2f}AzI`*$kdhvqoL zL~7(a!iQMOup&@3m0nT^gSIET3OJ;{AU7DR-lA?5lwJnKOf(b@axdQ)R!Npv$?a3o zc<-nyYe-#To#YRuZEzm7|Cy(Y<|FcyX$X}gT9iwh$;L9a;hHDcADX)a&2>E0*LJ?i z)wWEl7d|jGz|;Yz1OAQNt)4E6)gvvfceWWJBUPTmB3fpx2l#9t92Ma~CN*sXHK5qa zuBwji%Q+nfj&{D(ej?=98ltGis-|(E8y_rocF*n=i~h)~0oMqfs7aS4o5~!Hbb1<# zf8Uk(S^a){p(AI(jnA2%bPyBtqMjA{dPt+KJ3-6A4Lv-B$)iULBcGH&=3U^(*GQ^a z140xx~A#go7+*2 zkg7lIK5^VeFeESF&%*6L1F~6Xv8EqkMGuEGWc>l^x)SF}$q3)L+k_c?l=A+-3EFo3_C!Ig{rJ0es6U_kiOmG>8rn1YGPSR2MYAOkz?NgOTaA=CMObj`MkaJ+Kae6fNHk+ zCmYS@K!3m8B3%K|7YuOm4lM%Gi9cB#COhk&01g-&Akf*f`S@7f+>b?W5={YW+0LJA zjC$?LWLD6!HbX=kpnu*H65{PeI7%|NhY(aP1WPVq6<~#C?$R>{t3`HY9K}rKun4YfC=DTsnoNAc`Q|pzn!a6Ge|I>%L&nMqh-)F^YD&+-nAw zk54^jZ5~@Je?6*AEz^=)Apn-vkkV{ z`Nm-l3&gCZ38^Em+?9285bFtlLIR)7gvrh&TSpTXx9j1R>EC0HV2zwDA7;+C>1g7~ z!zkqH&YqTs8sZI0oKfbwrRjJp!lH4Ad4IQYJN%ja8U^K2A5EUm&pwhQqC7n3l~}tN zd(rIBoWG%O)lS`wm0=kap|KwNEYrwpaT^df4qPo?L9=plaWaf%k!Y>cuyV3VM2Ijf zxl>>`qLsp~N825`aQ zEP!RU3N+VKp&d{FNewicWRz{Tjv&V9mOQP{3;gs-W7$jxBFIQ8=`829B&pXNGm$Zi zRta0{Qe}JH8QuQp>Mnir!Uyec2N0(O?N>9agH3R*<vCbr$CCDUp!Cz7A)Pd zQS;);#fIaviC^vBe(L-vfg}-uR($y%C}m@b-M&YI%Ewd5BO3!w+3fGfoa}`REzNEo zz97IbCoLe0R<9}<&c#Yo+qpSqkKH8=+`UL6QdYY+CrG&EGLaV2O3YVZ*+x-N zvE(3w#qhDnWl?rJEeyHQl1M5npgG73z)(0*8>SJ0qd7OuZ*EEd5^DdIQgXquz3VPj zmraz~7w4HIiAhH-t2H7Dzu^f&EZtl2{XD#}>C%h(jxPr`=&n)qO5Q|zCnZpZT+RVE zp*1jrB4*kGF_BO}z#v<61Pcy+A-jrq9r58h{$&6)Z9Fj-x8{2evLkk5pwRpSmkpv4 zS4T5wqcO#3tm1Omy$Kf2z-f%~VmrhfNZZ2ROcQJ*(dd4;t7Zee3+EkW=WV~n9j{F} z|KZs8*69RQ0~a74glsE|i`RQN|B^1M^CbYPZ-24{R>zDN{n#rkS>A0ddsSdZ1W!(k zTaVuvoV2sMD;j-#h|k4O?8w6dV#zO$z-?x@N|<8%?{Vjto>&?t&X>PtNEV8HM!-Zt z%bt1qM7520sg6H=H_;}0hdRk0uk6eh+iUYp(w{8Z@&)0h&5*Q;hMUf2BF`*eDR&F( zi!J@tIb24eIEK3BXFdpZ<<{dCQ(5tZM;(ainVx6A5bI$vm#5ahCqt`3cw1F3lShL* z?jbd;%~>uCcib9U3RR{vwJSV}G~FZGRq**kZw;%m9lGKvrXXBrj2_YTD)2!c&qOl#qT&x_Ivpqe#IUWe8KL$#WNmE%;G>|g5?x#h9R=ABLwJY8_)K9 z(Kqh>C)?HK;xd=RtU;rB$+HDZ0oowhcY}JyH&Fw7l-%U%V2Y5{c*F1)CDw2~jpI#x zwHweh?s7UOB+1ajeN(!}tCF&L{!G?){=l`1FTS{ZDs*Q_0X9TIMHAp<6%{Li#^#!e zXtHnIx-%CxTXUHj_m=q4uODR^oU9F)_9U+XQSeOBrEGl_DMAZC6iu){}ke`*MMT$olFNm zV`e$9%1`&z`vyCV-Wn)_majopOP}Sst;xxWakU?IXIE_CKKO|($*}2Qm6jm$5w)|! zguM_$;^g|NCEfotG1pkvVCXUq?Qb4#Dt5o?uBJY$9I5>b8fA-&!<`2TIItKJFa_qhQBCJYw){iTRw}3_7^#ZaD&F%j)vEi zG(PEgO^N{lD46h~Ws;DC4K#0aO?I_^0U_OAI`>vOZNu!$4VedO%{|+0@OR+J9TW5s4IF3Q|LZ<>dKbm{u+RWIN<)y}SEvKA-U?Nb)D)#ZO@OQtQvDHs_myZj)OS#uv-ySChWqM$ zI_4G|<`$~kfW7>o?*q*8LBF!n8~O8H4HLKxBQV~x?3<=%kR(7ZBJ`2K%_3Z73A5T! z2u`MG36|ZfR&6x0bXCq);wqocg(?|{xb@MF6Xr`c)0g(^v`)edR<#Mlb6R{$NP=JD zG9SW&W*?^QQJbt~M_YRbjjQnc^7Y0Idm3=e-_UnjCibcSVmp8NJ? z%lNfXlY|F*4{~Sb)Vip*e?X625%0o0=Jen5|7q#KzyJQ1kg9P_ZN(tatjo{1M;IBI zzJ5W4Cecvz`La}#g#{bi4K~Zo{8`W#hCZZ4PoZo&)Oy^$BrcY*BDhpuh?ksrUZKo97VqYU{R=F|OD4OiSn zfvleFxR1-Kw6WGteI6dZN`Aex%t*2?|MA$IFt4?Q8{&p14b&f}uJ3`E+-gPRxL!P` zvU%Q4r^wPoO|yJj_9>+E=JkY3mn^1w$#GS+q{13B{#W`p;-746Ra>C=kU2+5)H>sa z{622|o8r$*j@ulTErKOBxplR5aZcf`A2hu3PL;@KFsniA}i#QU9?vhi>L5nAewvkj=EBWjY?JmF*_Mjdhfl zVGj9w)GwoPBM%mb+{l6_l(z@oY^4uh#(*%@Jn{r?K4*)!h5m=HmL76ETr5-~Lw0HJ zI|=6nwBq|>vBsqJ6Rs@xW;(^iG`wZv`!kA(f~Cde^XH1muN`El;2B&56+!<+%XAYp z&)x)6J&}lFqPuPE?wjFNq9^v2tzlMl?&mkwgU?)#ay@!sg*EzU%?P5eG3;Gn6!AFB zYo^YAG$C#dV=g%BU6k(kO;J$;>7w8$R*}%t*~Q^vSl7YnB8SlX*0-}^yFWd3Fl2QB zGe5rt?~9<~sZggvRD#X+W9zwCCEd36!n@dO*82OSSWqqRyd&YR&qN!=G42 ztks>6$I2`oxcxAke@_ACPlCSkQ*Fy~v>Mg8S?KWf)QDf=IJl2@t^VO>N=;nk^_Bys zS1Ujz3M_h=Rf8$9Xdar3o{sY9SIJ89OYT?6++6=T;5WVN>!w{C^1m16QM>b6Czu!d zaR-=+gBr3qVt{k{U`qO8-Mb#|V2${v84CfN3dUDUH`KFjvf_Mw&8qyOxF97J0Dyb% z{}F&I^?4T+K`%@5_E@w7?H5YK^t_@Q@y+PZd45-X8zk_6{=(q$2B>C6Q5m6gCRKkfq#G@*%5M<78Yn1!#n#k zuo3sMHhx^X>YRNo&+C_Cy&UjH&ehF)h5;#p;x>b1U;e>(z;Rn#(t1=mGm7s@QU8+w zPbk#c|3ir)k67t^Xp+v1CB9{yYi0V{J|^V+UE*nHhI@u;>%Li^+29<$qArp0o!~!y zTkyP7%&N!b?-l0-Zk~&(ZTVd4S|EN!oXE^)AvhY9gKUa?kI1k1;K9bSs5M;e|H?Vq zTrx{GCqT?M{>D(X;)NrJk_>+pjUL#ubbZK3qd#T5c6z>@*s2;)j!`a{tW7?3YgOeN zk4*VRms1J~oQI=Zd2I&r)Jhy45hvrG|JpCG9t^ex2mFAmGKxtFvDy5_&=z6QA8?D@ zZ=!cH!V^B}1-q{moyxtN{_bsHEX~#wmTZD-Q(QWMc)E*1WBt8tt}c6C4%hdIw@gqE zRW!J0DSEi0N#xyVleg_r#tD)LJHrzinWhL+C55M#yQg80eC1fl9GIuz7dfZBN0{dt zm~Ea^%;Q9(3$=*`$1Se0buGTsupkrTve^fGU9lcTZd$T5mlo{^ZwGg^_zHsbib7v8 zF*D|Rz`^qnr-mspnXAX04AT8L#>#fz-E{BG*i$gw+ZhOEwf{06FY(qq9jLJQvBW<* zZJJaxrL|&#N-g?n%nQIbrA$X!0X~eWPF=iLLGzE;5=2I_1M&$xOVd{waW_Gta!K12 z*5iz%VL9j>^RCN20WW;+XFs@PBdWJ+PM50zSTDc&_+3M!hT%7184_g`)??PN-j(*W zdI4punI>wUGK}RvwTJA{x#rK+n-}o#eY2bgx;B9t1JJ_KLK@rxljq&E@C&0XAjRO= z!qfujRruc_^WFr0fUL{N>$Jtc`PIh*LzvR!BZfsD4aoYQbH)u?G)cLmqLH?a9{3I>4p%fNj z_+u+8L_M4e?#%4D{1wS-2SX{j;z>O9=^t7B4e{zRug-3oAT@O_aR|RSmz#h;{%tGl zADNbyYxzX>RE>Y_n~l9etMMMh%*mkL4eex0T+vT^-krrlraj};o)Y{jO=-X$mT6C$ zE~2hH9Q`HFZ3CNPJ|W4U)2vb1&?*r^ceo7BSt0|QJx-3l%Y5t>875yD@@-c&9)5|I zth48dCf%VfM*E!DI&n3Vyih!AH04wLvi*}yd$1E{GWX6GZ%;C}oap}aZLWK&Y0@m5 z93A1b?oyjMaZ_CeaHImBH3?)7EgRka{I9s4#mnHGNdQc+KtHoNsAX}`Cw^)4O6w&R`V!=MDtXxX zR^-92vQ1&v=JZuupu9g2&x)8-0D?S-U|mk20CF1H0tqZO6TnvPVa@O{qYHhledCKw zBFE7XOMuWCa+Hb)mq*WLJy8bk@GEQMpyD!9nF|!k^L*`ULZD zbzr9=0WaPXY!cWl!#NS^<`Ot?F<$rT^^XQuqj_Tvy=Bul`4eAj&VspXGY$ZtD3<}f z3(?160NjKm0YvqR4JfSuwL$r*-auU3TyumgF>aDLLs{pO^{D=D;Ho4|VH;cjivF6f z&t$Xp*%aTCEzH`a4$q1mSkhZ>?mNB==Fldwf1#E~$Y}`CeQQ`P$@kyX^oie<;UDkX z2|93y9dqbV^f+tWWQX(*-1abl+vif9U?~unGnv_=($Z=aN|-SDu>QTGBbrZD>uI_Z8DV?H!UIbYZF(o0n!&&;ng0Q`{V$zAXsfxz7E$tQVgFa@-MG0_1A~uhfhxVGA)p# zk3N{K#y{BfrympS~F^L-%F`e`IXT zwyS6zrb3WW>vC~h9py)3AVSRTqc=qrl}LxefdC1>3H6$jP4uvASFbtVYRgi zsEbV*Vbk34H)?Lm`LG*;^zM!+$X2?33zK2Hb^q~8gL|upzZn9jPF$?dI6gjoBg4*93MKkBe}?~$V-gkcn|oR?_GTg%n)95S@NsH*8hOf2 zjkw|$sEiee`{{MQ4RbQoVA8^HvQu0?(8_SX3c1<(4<5n^fQJzMm$h+w&|)8q!2ZMa zr<0wAoVg4)VyLj#2E_ZZsw8_e#lmI!izU4_!qdoanrKYgRU?RK$>V#Lw?1OlzFmwb zue4?a1Nt`k11^;{NTZBNf}zV*X{zA~`*4-pD(_^P&8``oUH?m1G5zbqTrHjL2SVm( z-0AuGrc;^#)LBn5uLC*PQZ7ulHG}hw zkM*3Jxk>*oMk&N}Z2r9g_vcU(^LUTHiIj0@9o$@?)tg^a#~u!OuKKJ9s-yn!t;1)q z`^FoM-*G#WWXZ<=-cNkY@h%uW>UX1D%hx4>M85aOT(jeGsV5SkG z<;j_TA_dfqNC|Oj-Z3cf{LkymbfWv$*kLSnD?G1coH%Jc-WOaH5IV4M*P;-;$!4`N z8Cy2Pc0=@{_k9{aFr@rTD{dujBWhWnO?bOn{XMJotJ*JjpM7P`RVSwB>-o9sc=N&h zzn&O>J;w6BA6wqlE5jGqjS(k6(__|7=`1bUTK3??SY{h%syBlM2UwN8$ z@B0fpEh$*)mWvV8ExJ*AYvgzrSE^{jRPn>JZ<;P1AXG3fQ4cjCIkEnq8F@NXldu{S z9*_3kqLQUu%|OgTZA*V!o+r+W6(_uGqXm6|KrH2)^;gMd4E(_03}foc_o#-Ez#l8m{F z@29LiyZn~#(#SF0bI+$M6MUrS$p5<7MJ*u6FyaW$D*LQbho=8VFfhilQ!+H!mz zTZ;M&^XsMftoU|Z3Nt*<)p6}w$*U%E1LE(3Xix(ljC?+!x3r-Ua-JzhEougHARJ+; zfQdCVHDLkWIpzaV6J&>8udHK!NwIp-^sVE;5g+Bh*%_ITwG-l%p3#37aqqJGSeX3X zW3gfM9{t_2{P_D9ME<`YgX0vYd?CTXT@?UTubY&lc=}xEU2&6wyVB9+E*?acD z4@;32zdHW*@xeco!21ObN=0o@?{>~ zOa1xzZ=?5tzh5=C`2PR?`DG5H2bdA19g5sc`0~KAO1P`@E!y|kYh7J1X`PF&n~&!G z-J;JQaR1KZHg%yEzo*Jnr#V!UCR<0Z>MJcJ2*tMEo#_Pk2L|ULc^@Ma+pku?R3ItBEoHYjQEqjtumShN8}p{ z=2)e@+N_XmS}3G$H*+3g+_gnG!E{@8UB)EB$)l?okIw98SVM5%cnXIFZDjFY`CgUq z*X-?{f3p4O+`e&&e+z;G4*S=P_3f>j_z02e#h19#D{6&#B$30wZzqI*X-3PSMD#J0 znGY|eS1Yzf4+wqlT#!taY!m@7Nf+V)IPZ|MI{qj_v_+V^ek2|AFjK!DwJL^}wk}S| z)l)cQA361bPph#0Z_fz6%s_a1RCj&Q1=Uq$T3T+C^UQfAcb$bgG>)2i;SHu$xzgOC(7o zO^?u*P`0vaYSyG^la58HwlUAHlPL4oh`B!(>4nUtNM!JK;VeO2aJaI@Aq zM&~T?I3wTTr)1OU2;ZRlnXzeizC;~gC#V<3s#@3c$I_3ZS+m@BUn?<*qR<0&@;^>C z51r9D{FG}tE32+vAt+#37HFvW?_K8q;cv-CP>&5G4na(99PdLgrhy8MVr6vJxgdG z71uSDE@)t{`+e_3?cUuw9+9fx7?-StSRk#OGUfeF5s`0im+vs$TSt%EB~|+Y)z44} ziwoh4(JIcxR^p#Qk4(eG@wAXMfFq>Ua1!my4=QGt_o{JBAm2gjO0_Y{{ z@xQZ5*>@{iEc!-wf&7iI^MSwo41i|H@`Sw(EuLY0bTLywz@=4}90|XwtWNPXf}Tu3JOib{J?8Q)I&h-|wKyPw{mu zW)1s^u&)9RABJHgR-^p3`#rHEfzP}_=X7c@0T0`Hvt$$*ekpRlp%qTGGBYO<=&r0b9Oq9k=(B&tSkA&!M@=zaL+kcQ=yq-l3PUB+sQ1m#8+$kuK?VBt(^RmUS&;KueNJY@5<;!5yK>;^UM# zPrFvaUfZh%F4FJmLS??c)p3VMg>8EUXM0tCeG+-teo&6|MzSk8HL8S}forT;-$_WB zDkCmJzth!Z7T06JXh2>@hN@2_N4#c=&m^2-YSvM=aE-hpmE?&j8FOUsEn2fszJUFh ze=tq@fZSq$3grTi`K$}YfcAQ3v{jxHmW>Ew9d_Mv9=HlEmBU@M)AcWO7kD$If-_kA zRqU8_qaaK5p4j1+bCPVzH_&qW==y}72GBY<&DSSuz~eK1o`o1r|K-F>MhGC>_Z{hO z`^Ys7lUeW);~;Wd=(4MZ=FHOC)|ktg;^02mh~EnI%zdR~lM62jpR?Eg7{y%<>EES< z7tfS)G89|fAj3H*e@7|`#cp9D9uwNJ=Wxr%=hd7>TSmROrG{S@t31u2X z+>>gan`phOJ$Z?nMTtgteigS%BFb6-B~q7BaO(?){)M1t!CZO)oItsRu-rKd?j-WS z6z@|PqpkvMgVRfXyJ3MN#f~aSzOtto)|sn6zQ>5R6v|098J*bw z4`$oDNyKxo)OnOA;L)+FWQ4A-yH@O?2#sXFYjxhOOyzRuHS4MpC+Qz?+Rum$UW)Lgc zPac4W%Up_gRoX*mU+nLK56*{1#~$F=STf)CUmTcVY0u-@%-wTi!m(W|yZfq|_0gN) zanV`lhCMy_$pN@yIm1l;mCAPmNUi#*vI`RiCkUNkaZ?UdIY7 z?#aogg2JBWmxcZ-uJJ$btvbv0e}CT@*4J*CeS{iPf+FJ69P`F|f&rS1xX??T8(J%;iClcu0Uje7PB^+(cz_6eq*mIQuKPHY}hehGAr z`zYI8&UNrY?91aj5e=3}F)`JOu|p|j02MRT`Aa-L`|z*vnYS12z({kUdXW6^FNXZL-B@9hld^&3q1Fg%)Pfh_vq4<35HdQUEJA17&^@Y^j~*@5dTDmf2v_imU_*hKCz#_~<`628>0~*bv+H z#(B443x%VUf(NF_F;lMlzJsF%o5o!HJ*RzZ0daRgZyzJysF~oLi|y#6w=sf)sN}_V z_Rq^6PHz9;RQEW_z4@e9T0pY^5RmV#N4B&3tG-qS2oh9m*rar=%&FyM`YT#dtI20r z$TAsrF$*R4xS=w;WuwEl+0|3FjQi$H@+nl+BTK^1F+x*%^=S9*zSXpP0e)-WChLEF zUDzoi^)b&T>(g9fv@Rh$ehSpSA|Z}4UTIt}vR6qfo%9gCgqNwyef>b-xxyJf{c-5k zjnWr8Ne0|!I?HPIzrZEQIi&MgC6{4YxGs4Kd+F1D{q&+i19ktqZSe3a(iL6*M#6yo zS>Dr_^D+uw#2jB7E#j409Y9EWs7{bU+x8vg!FOOIB5SH4q_%pZx{`9%Dh;l(U(FI^ zS~WDp7>+K!k@XoJNt%5$0QJcP?Q0(A40h9;ysqc(-jFA&*5dr1wi%xv?2a^bDTY}fT%HPZ8Y!PU2nbVvm%a-Xq~=}87}{p$iGToa`Own ze_gO*!=PopuJ?u*e1FdvevXlo2Up$C(>PC(k1&I+v-nL2zOs@Q2^JOA=*pyE1@!4pQVxcwobTRpg#`7qkh^2K4#*hjaL z4KEq$#2rfoY}ICvrx7h8Gd-e)o6{?Ma$SPjnw>qWsnMAUbsY$Sq1-IW<~*2j(k*xt zfym*s;2n_eUi8>!maGjl>zy?Nn)jvtZC&MfF-uZyUn%FEgv~Lf zH_ACXBAKok>?;`v0@47?UY6~oaN@r9v(2OZeEZpc$1>;sWXrdjcxPb_ly;#zLH%iq zM;IwRd6rX3`vOVKe4z8QQ`>3%04#d61I!KgCTnt=oU~)=4x`FYK3CQ*erXt_P)c)Z z^y^^4cTa7cOOK2;urRsepLALU?+AdL%S3jBv&j)gkbTYG>B{`2VyHiKAs=TR>ZN)~ zI*=}AmEUjf6jb&txNT(!u!s5EM*ROy1%RW9mPO9sE;14JV6sRvB62rA^P@*Rj<=?2 z2!4ZbI+^=sysYhGLhj_Gy#kMft;nRz;b{5mwr;Mr@WZrmYGXq4j>dTfn2QPHC7{-H zjWvvB^(Nmpc3t6Wsn`kMq-4@T@2*8w25aQ{8rr4069{ox=pfLt!@ZfjXr z$VfJ%((CJuv!XRqm{!iy=TXm|q}Y(-Nc!1^XZg)`n%$d*LJq=j?dSRe`Wsh*EEvZA zvqGx+R7zGvq%3J0$=_EwGEmt->HrTBG(nfY~T21r>$_xF#_7yrFE39@*MhTvoMu# zM{lxCs{7h`u>;x00SR#$>||oN2)C9HY)_Bsmosb750~^N*}Lcu%9qXz{jr(R>$(^= zWz10%on%|Dmi~@x;WSlKyn8gdnyPXo!GhYYFsCecjL&hspiameJPT_eO#Z=6q=oh_7syo>H33MWau76K5W` zeLX8u=vsou_be3|tL)*0F~^nFo;~f+C6Km&~1RN89@^{-T74NeTROWz%E@( zz0sc~<{D16%3>S{zq=^3&l~nr-$z(zbtsK>cmffd6?bLmIf^o}4e*MZ%#5hfTCV#! zxD(6udvKLZ5CbCL!FklRUToL1dItTa;<dH;poT@L3Z~!NIa9aGF8f4JjQRAInVwQC1b5vcKYO^I@@N{rs|) z8ubg%7$rg$IcyhYd#P|m(b~xCtRrWpOlG9t2dYNTQF>G~{hG@mGXTM~{t?{fxXy~4<;eTQ8y`!4? z-gI#kEQpBo4k{o>6{V<@s0fG{klu-k)Cdu2K_IaK(xod1C{?=BLQSMM5$QsJkRTu> zkWfM(#d|*Uo$t(iXJ*a4zq;<4>tE-bELK+7XYY5v`+1-Dd02TP?>x55`1Pwm#(&5x zIW{F-uN5uwYgV3`MP6!imcvky<#d%{Z7w`R&k!npi)Q+I#oS3JG47NxN9il(;K`cD zw`Uy=4td{(bvF;`I{*Ms1ramwI<*EMI_BT|ud-Fg?yf;DXL!@xU`$Pxu4D~l<%!Zl zL5;(h_T+``*Fn9|sf;)6+AjCd@9v^1^(3ou991XAKJ$U$qM|H@nN%QO8KLfy% zkmHyKNMSg1?pvHIp)x|#S(e#Hb(+iJGR?Q6W{YdkXokkXQmn4rN(nSF{Mi5@%w;Z@u7}E&AON8S zK00&`#Od{92h#x%fjkih$Wf!)rpH%iFVv0Dz5I*SCKU@HL~o5nxeWibpfr#MG2^D5 z^n_^sY28RhJc3`PoygUZ5k<0zZszqRDCxVywZZca34Bn&D86$%#(s+Fnr3adb5`-9 zZ*BT*dtL9ln7Zaxn@sE>GWJm3FhF(g(-?69us13YmZPu|Z7jfw!?#eP_Y*aZYd&+=e9G-X z;B%uPP0`WILhTC@#>i!M`b_!bhOD2o2F$y?4Zza4riFjQWv=BSP+- z!AR2~u$C5314V@SFF!~{H5>UU1mia8#MP$1?4I@huhDsde$jug(e!`%vukHZ;Om;C zMnjR<>dRjwElkU>JG|7iF4+TlC&A~Gzf(|u^X88sr9vCCQajP&3fX>b_)sSrvAeH@YVFK(300B^BDEH|_3|?gz z`RiN}a_$x~PLhk8e_Z&m%w7G==(B{^1u222!4SX+wZZh~qiM@9qeEMwya?KiUH>X#n6 zyd`Hv4_8GzJoxDHmx`nkC}xwb8Q5XCfVZ6St!(<#VxyO(pjwKFAHIlqU=9=~sQHMh z)iujaelUKl(oZ6;%mG*1`1!Q)tE}kf*Sem}P3RH0csyr$M>y9@k*J5Z3sPlOTr0^dc4K)AT}%jfR;?ky=sX+v(wTk&065fa>u?!`Yis%*sw?(W?{7V* zcYNfEA$Q`t)5%{AtlZ>&;cemW9bDW{5lDotI$W<~YI{~>q{cIp>tjnbAfeZp1a~%$ za}3^8U)a8XbJ~#af*Ket{pIe>*AuskndFfKqsL5npl;IYx<-R87~0N*zh0gG)>m>R?d}n2t3GP`e5^S@xIjjS z^5(BTVWRLMp4!4?#scMKj;lP&Hk;IFp}v@y^rX9IBQD|kRBA(8`brnYMoB7By0TQt zKCO#bN_El4d?I&tB`AF>CaaiL*H%aC+`yjAJR3#PsM?Z#asRZ+(#;V=`5q2A;a0!= z3G0bz0!DM!tG0@r_W5y`616*XlO9?zSXZhAh|6xCTglm3R$)Gc8dNt!0DHjf;@>RJ zNxxZs9eypM2H0}CP$vi{UXZXx4#4gRePZzJ{^n8ZCG+O^@w1QFk4aoVOgM1q8(cRf z1K9y)wI14@xjx}IwEj@N_=ZT>SDVkxnw#Q3ZoU({iIXDb=cMe5Y;~pqW_jLG2313m zNRAG)Ft3Dg^IjY^MmsoDzhW&E%R+P%>~a!pMFW=BaYb-@!e;NfuAD={NpRtyniR3C z3wFs+IWRx`U|9r@ux-+<-YuI_JysK+^Fd8UGv01QhAxxXm>m%6h#!=J8mtTk?ge8C zu(KGw@nHzZvFgk)xG<}UpYtMUd z@EEIoyX<4fK1kmL)wSOpiX#TrC0LwWjJ~koJ9b%iRU%}&wx!$KV$8DzT@6UlBTHhtZV2*o&@Dd)N-2q7?-HC^=uCE~GIM>s*54vskBPQJ*BgbI7P}vWHfq z9soymKhgiZ?Hpi&|EKNf|4l!4cLe+=CtZQ5o-VmB#-C?50ov5CLrxTQGb0bNc#J%_ zCeMFY*!J%83rCC04EE2TUuOzYfx7k=5Gi^PPdowRU}Qb~&GPx@r>HXR@U9=t&(Y4U z&%&|Ko^`tZ$^k0cp%?SZBeLd@M?ER$#O{>W*2Tg2ZY6%3Q2nTX^?Y*mtvn$f)q7h! z&`-JXC?=*{uOQx`U6M7Ff3ETvIy?^!YMU~Nl9_^_b6oRV50yGf<>hxtUyacBn7{j@ zN3Q7d!K9@**mD>{+Hn3{vn1X#6ms;Sj_>vxQS(?fIn_rNUnNf~>^1`2-;!wMjYrFO z%Qggof4HawIgyXqKLEsdGLjzsq=@mv7zorNEJFbJ#VXl_;o6prx^n9WJm$u*I*sr3 zZ9wVtU67f=)2nxr4r;R8{C2T-Cx3(~;UQv@P`FHKlt}Qtm)j>hLd>m-JN@akPkYDH z`x<+=R2F*o==cD?SJ`N=MIdfbujq(!U@8T`-g73Hyi|wICt<|GVthHPdClm$HDyz@ z{EBd1Q1{OH_1q;2E)FVAC>@Sy9}4nYyNF9o;_&cIzZb6wkF z`4WDb>#mT_Un-wENArq$T&(p3$N|%*CHlms$8CW6>D$-Ti-st&W8?M{lZ=d?6vD8R zzV{uc-lL~qf|WH>*jQ`cJpix^xsQ)wkCTk=0to4GAYJ@hW&Qu)>$$@74>+IIA3V@~ zO3Zzat1s(s=FEQw`S@Z#j6OfWcK5|>+TZdyy}$A~XCR+@+RNlaww?YfpHulOpL+n1 zWdD}WodohZK_H*IfDD%;z48QYa{&3AFsSWs`P>b)oc%+~IO=i0*PVVw#FTMxdxL)1 zlvFMv$EwBT=9FbVdlJNCm8AkK@}m(zMtQXb$S4ma(-rN*Xiod zJoqyPf9AoTo$1fs_@Czo{4zz6YBY}UG!BkSu8u_boYlSTOQ)=+{$BZ|VwoIUzggry zQh`Ln$sfbGJoUXc#bu^ow+3TzOO25~s+IF#=#D35^TZ2gL**v_7K{j-iw|*PsMp9% zrc^UhJ3hOXoJpviiKKLn$G8@^=1+Q1ginEk!p?gT+@+3&o2*~3thv{#mY+8UXapmZ zyeS5jIBlIGW7%Eoj^~q{+d~i?X165jJtMCc0H*=41i>+;%L}O6$d`9D;loTewL0R* zuZNa4LF?PP{d~S0Z+yxhB^FmP3(iNjI?$nH?G=PF)tjb4T_qf86&KkIv7@_tmfK;S zSJ-_zePl{V5wftL%jM)_rGG>7F-A(Axg?)4|7253AxQzIJh?=^fh6iOV5bm~z2Q z=Qi5GA^5ImA46@)f?ZMCm24g&VWZZZCHx5kZtLNhn3a85O=*y8O0{w>g25e)&4A#`_x_3)5R)0g{|tvRnq%d#C; z5Lp^1?+V+MsYi+TJ?}R^l@BhJIyvOsBczpZI<(so;H@^nw>q9Ux6CI*=2Ro2=piJ- zcFpwj&hT$4d_U}_XY@Q4RFu8dCJsBi8iA&?CtUP7(IzDCt)Q`89kl#l4I84MBTjk3 zd3M8fOhv2KKWS#ht9-;_-AiE!77rl-i8)88DkF=|I-kJl(YTbbBN^j1%f$vq-qw%b zaA>H1Iv}E@ie>Y{tUh?Srw3BtjwT@Zkgdj{A+9t-xE{V6C_+Dd(%srL_$tC9RP|#g zArr(s37Kw-Fgle=9J|4Z67{S9eD8~-x;c2%zp)6GRSDDdiE*-dES3~mvkav-?Wt%M zCRFQUa?zHI_n^7F?6coN9$_|kn^xG1CxcxZ!c_Bbq8q$>_B$0X3O&wU`l_lkjZds_ zy!Y}F+XrcZA9#00EYOEt$juywi0Yn(%ibX!ZU8#?sqTe#PEg;~33-%8y7}81pK9)D z1m8S!BDpNKs#{)z_foMr7&1mr^2X?UQ(98jhXX);LCjyA<}g}X zKR@TB=f3~cOkIO(sb`yhR6+DQOYve^te!sV)ZKOM@csK)HKst%w-&;)Xi;Hh0!Bsl z{wc3eCzu=*EOIUd#}hTju2y9P7$EX0*wf@cBTfPSZo8e8>`opM^56YoydE}K#7L3X zxT^D%qxaoa^f~^-Pkm(F$YxHCcfWD81>mQ4TeOPEj()rveA;w3qQ8!2) z+#=7p;{0bX0kHbmR$2miz76tugD${D0N~q>mLL;S-7|7&yNJy0%TWDNM!!*2Esce!tizJ!D;?S~GC*n z+n`rN1aFyLC-TqhC(;U$t(bx zvk7Ao{))9BlaB30{rP&nge-*R=d{zjlL}rIiM*%qw^(Z`AKp)A9-H{hA|pz<1FXdn z0516zlR*Kb6gSpB2hcKFI%b}m^gkRc(K;Z za={2Wh%)tt_4bEo;?fP6ZssjFtuR&BGC(jAfw5lmL0m{r-mkEFzq z>k5L|X9geC`|M0R2p zsaxEljm0dx#r}hl`zK-u4ATw)z@Evo66)K2BClA_T`VYl`REy$j60e=Codj4e$(-t zi+W7az%{dUx5|aS5B!_a5KZN!+g|ln0rwcd@WRd&_hQJPRw?ob#h3)3QNI8_s?&wv zEM2&|NTM*Qsl%CTBnM0ueAeAjGraB}(xgABUS60%63#ep!=3NNNZwG8qkx1%wHWWT zFVk3=1BjF4D!MO8@TGc~wUb_}v(C73**4L=RkKntJyB<28oYoF#wVnN7F~@l>(Yq5 ziFq%f!bkyn8m?2r1!DpLaZWVLgtiT9r}UHY5BOE%tm_&v5*F;U7f+pgRY+{xkC&J zth~KCzPjg4sZ}kKFi3hLJ&|3~-*18$Kvp4qnH@M`x;x2_vQJ8HgB?Q*KVptSIGari zS4HXyA0%;_-XS@vhK>(|i@OyI-GYxl!q3<&^+ajP1V?*<4xN6{DS1+t9WjPhW+c(U zt^}~*oe6|EwaBU#sue=D%B$DQ)t(RO`xSc>n$o>Ke%?|VSt7}fbl*4-da$MiMUs84 zEj9O1UC>T>{=0ujn7Z=YYsZF5ikI`>@I9VIiFvvVi6w-KW0cg(Eex_*deLtp}hprc=YbfxT;h zzQ)UX_Q#lnfhf!IYzu-C%yE;;3LrzN+Fgt0^g~iTb`$0+Z#eT zb2Dv~3vS%~Rc$1-C-X+x(q7>?$L;2Ck!D%2*RNNg! z3)jruSFEAk*-#TW4e1RHSuqMeTeG=ZTlu5U*C(MW!S+(iZs^o*NI75^p z=BDv8XCO5>&j4nBvK~pIbY7CDdp_%k<-~@0Tff7I?DI>{JAD<7_P3w8Ak=%@gz@3I z?yMAEHbE@`>rVN~sFlQ*#reSqut)(Bf%KA2_6Q}npAODgjyGb&t@~R?(yCt6zO=Je zc;TE%bB6QI4~K?KAaEo>d^gdZlxGRw&{oY~)yyzR4W5filQtU4*gR~PX02!yv3uZ= zodJInjw*{<^I0NJ4w|u`W%%s`?aq=-U#j2 z+@<}=LN2gwY(D&ub&8Y{-`)91`iYE@z0|SYnCes}pZ~3z;?a~3O-bni2>1YTXtE`2 zA>X@6_b@PJL8L379}~ARWEAlO%^*~nEcjx3X(UvC&X=sD)|4f&J`@OsdKNYxc8lfj z@D#y3p!N0XBy>Se04*F`ClFtLvs6P~YCpt?g&x9lLafq(=$H@?Q>vq7M*^?*%ltGA z4&n_CoQ1nANS^zCrc^a9k4NR#5rEw0$`y_|i9W4Qm_gzzpQ;b?e<2%5)P96N8D6>* zm)o7v78Kia?5?*K+VQvx{}>$iB}2Aj@Yt+}v-D6+=%ee~#9PB!O%4TY=k3nC z=KGt#l9NU8xwBJa^-cc68zwD2m^2*JLf-eMr)(}bc%`hlW|clclUE0K1xb>{(jWyK~uuDA>#IEqbr-j&C~kFuSy^Ei_KVF?lWprT`NcI zqo`-oLsXJ(X(XpjEHi>|#wwjv(Q+T<{!~-`RFnQ!=fD!;EZvs0)LMC>6OiMutsZ)) ztfI6{b*+CGynC_dv)-`-N#EAL9J*s_@txP&A1O8oMJtV~+1?xH+0r|i`BqsirYXco zdrT3n|245pP>6ML(}`aFlxB1gEe#Mho-?_rDqT5M2``(?=E2I)fs3uP7l$+US2Phal8{?i+gkb;-(=n*d0Ifq?^)+BBgc!>WW)TeldGB%J9u9!w0=b zpC#rq=I#lbbI`xcYcIyi2NcLrQto4jONW90UeogIAk=HsKI^h&h}>nyFyPyofu3-f zW|Zb)c#vKjKcKCWM{72)r?oGuL~plf&2@H1XzR~4@sX9^lYV8?PM_=z_$U{Q{aT-V zAhcKW!n4i9aO?{JV{#a!Ukjjxz#~jw?PH#*z2S^V*KE(y>rx?*Wun#d-5la%X`J@l z@-xrBxtq`4?|yo<(^RvqvB`6lZ`f%8o#By*xxN7I)EuEV1g*6!R5UI_?JzU96v7#A zl$wp)X`0j%DneeMDW-hP)he((tv7==*#Fcu=>pmKbC%T)Qj^pk8BLcwJ`&(y6)8Qf z5~3w!k)zGm1kefW(*C792oOg8@7+T(aU@@r2sN-N5O_J%Rd}g+ZBsrk3RX}t%25QG zBo8Pu;BEf18!*NFGr}$nFBRS-P6m}FpL`Tw&YPpuJOk)A(Fe}yW!3(~O;;dZ4?$jM zU!s04p`T_v)jdo{kT#z0aB(B!V`g}I3eqX>8T3ep7WUDOQ8zW~kz|7t zyZF(()h5u8C`@C6>*y-Nm%cD%>RMW2@Pca%p27F{(I3>yWG$+beie+yaGXjhi(cd3 zd>bfZ)TLIuep$B0!5OjUu2~dtv~_ZA$!#n%xPA6f^sF`ARY)Z{Imxsne0(3#YX*4> zA(=p42IAO|bMGaOSE?}_I@0%ZIw4QL!_&J2pJaayK%T`E$7J47Ubxt^1hEH4 zr}N*BX5JZSE1hHUsY7gerv_i1=hI8)gxTPXoD1gLT-HG1)b(8AFT10xF8u zx&cFL2{CH#`)RLifpNv18IAG%d6T4-Ayhl%m9*;D=owLHvAK=ZsksS#NDhbuOMl4} z57nk>k~Q1Wf;Gt|d~t$Mj+xE+dQ-u~*g# z^+Q9=OrdB7?jv;I5~li`N+UQpa1D5)@Bb|!_{eGU{5)Xn=mrTFsf?q;N&sP7IOGPm zC>B=@_WKznb2EAOQC`nv@X62;-*?#u)WAyu%`K#sT$6r4GCBs#8>Wt(3`tB1scTMeFAWoDY@!!2T|OMp1)OPwyAcEkecK^=86kdar!1T*saT6dXF9k8F}7b!|K(@D%+mZaMZWl(`|Bz4I} z*L`vc+a%_GY0zuNoSHc%D^rMCpyb5iLjqF*M*Gq+==1~)%-kZa5z?6S3(;%_d5Zhg zO9rqM;{4p_5CV*aik!#MWo~IZ`$&;%W>rUtN%NY4K`}r3^Y@f|@?Hz5$DM&)&?$%< z`OPAsE8xXE0QM`^acBDvD=6r9 zkv{IncWNtj%C>#TlRF6tDGlYhFGlX&8cG?N65Ta+&KdAeiraZ?|7&opWIktp<7M(Z zA@uwe6y4^6hhay5VOW}vKlu{s;$D+>>5m3 zZMQ$0>RPBrs)O+ZZx|v;(XX=aDg=vpczrKRoGyfXGY`tQWjk&&l~e76ic$p7&r;z1 z6UY&Hj7q{sj9cl0vC8JRA2ieTtX~(Q2t!+uKY2G6J^ySbD z-&@9cfnXr`@yjR;n{K2?ZCNKTgn5T3C15;qqo4f;TA2&nuv^1f!~2e1dzl_15qUNX zgx!v50ewx=_VGXri3F3y+aC_Wq8g@_j)sKZ56qn-wB2bqoqnwQh|v#|WTV(#vdDY%&VEvI^k=W%EJL7s@6p(d|o(!Du7pARZ&dj<(cg`2^!Gm41k8(^{%W z6E?qQvT0$rtahwYN2g>c$S0)+V~Lm=g2W)JY+i0O-vfg47e;}%T22(=6b{r z?o9=cF-;B)o#+~`-I{t)Lw5Z2y)AG4)pVCu%E*``%HK@i&GtV`KmGr_Iq84>?*I>t4nUtk7D%aZSxrox4_g{8;=w|z z-QNMl7ybccTYm!cDbQZVJcy)N{^Qeu;UUKfx+1_j|HWAe#2-L;*VXXfJzo`9`tv1! z#^isOdGa+hjFDc0nbLD2y~{p5p?yOQbj)jfA4iv>RC-Hfl{#U2WKbcw_n;BnH(6gA zB?>)jaXfBQXrm6KRmz}!R$w2XvIFe#ze=Y6_W4eYV<{B3NMss4k>;}bO8ciq)q>oH zN~)bNK&TW2i1}YknSBZW`1tgSy+Q_%r=?3W4gkp;o$WWv8j#BU<1_1@ulfIcZ2FPV zgdYYtO5KD%c9;5@+>LLywQqS>$2?5-Th?fdzUXrpe#=Po%EHsTB^??Evm;r{Wp|GQc6iuT#p zK?e!iLc)z_lTuLj2*}U)wCF_)-nAQG%X%XLwk(Jy52Q^0_K{`TqXNnla71n&2I?gw zUZ5D2_m7Y7PyG3k|NdjrfCPvS9C_3cQjFYa07V z%A>2=&+}dF?2OET0QO&nq-3K~)xwcR?F5P;P~8ZCyHjpbUsS?dv|Y(s1jCpenvj2k z`k*)v2eE?Vb-qnEm2#8&!Jh@aJ5C0(ve|rB|F1FzD--afZq5W<(#go|7BPT{sg(Mk z2DjJW{>)g>1Lq@N&d!{ z^HKdb$)_CAhHv#~(AAv#^(1=s;c5`yJ+eJj$N#4KmU5y@zimanGN?xPtF%D>1ME!P z`@{zpLQ!bzd(aSnfO>_|h#0xG0c0_6w`KU}Gq{MsoTzpcZZEV9sjI<-06My|foGUr z{qDUuv6Mm87bBN{h&Z)nsCc3COb@xU7INWLUEOTt9FBO%m8?L44xy!2C^@9)A6_Dc zl$M2-fiLMajq?TXw4+(P-;2Fg?H0}lgo$J~y;eyRLlwWAf&mCB8MRb|`>`#rFaR6^ zAXB_d5kI^hyoh#~)^0ntqolGXSarA|VJ$t`!RIxLhE}jcwBM)CP6M&onuG*mYAIZ_ zLsz|NB$Owk`x#mYd|X0l{J}V)KiFr0E$E`Cf(3_6AGTG^{FXDEOYx($>y+2vTf<7a zMrGBQ7cCNbc4EMPYjQ1Q43O`u;@9wAmK z>3C1bwBN5xh*~l-gN_mb*Q8r~0H~D!)?EXMuT9_u;}cGXf`+uU<~fbqH>ol0X*r}6 zow4{2Vlc7C*8(0XjvIRtf{7i^PG_;a;R`-`_d+u#?PjPw*|f`)mnuJxFKXXLlg6VY z@^pv^2{7e{_nY1(OqLY}4WD@s%E2irif|2+L=K|a^T3|C(A8Sjb6;0xbnR` z+^@>RRBoC+-GW+9hITL|0rZo~sz1`qTiTruwHeR8(u97aHF+(t62{?qzO1y4Afxs3 z)eB6;VPa)?PAxNw3NVQERmqb98;4BGsN&i>cuBz0 z6Rv0BntFy;)>_}JOA#ET&Yj;vaVdLNwOj+aV zu37m`afGVZmV=@6N2xTR{^Zz&y;eZeU}80MYKl5a2ULs_@M0NG9~x8VK2sxL%|@_? zK+VR~x1jv#Np_@vhkDnYTNl&zJZnZ4LMEF6M#4bg&H(842>HjpK=d93N6Dt<;`EeYJWO498>}mHYIcyX5!}e;8F-^~F(N2=flVrP|5*B@IY6!f zgLHH(oP=hRd{=-f?`zx0R0z>uYUrC-xW|*eNFDU?dq3k(T=GzZO3rKjXOmqC}Zo%?sKi8P_xwxbxK^&{VL^O zZ?I17d}~$Pu_fG62S3_9<8!h@<4B+ZuGC50rH^LLw?RH!5s%=awq(xrCS>jpIAU|S z+al8Tdo8Cj%`|EKM)Z$QK2(3@C27!?P;(U~9Mc}koI2w?J5N$8f z&z)`$#_Ko_)MWO?8nfB7Iatxy-wX)7n%=wagggCEOkGg6U;H-<9y1WO+MsNt(1NMl zMEVjfZQdEv?BG0-Q9y5PT`7|BfihGmidlos=PNDG*^3+Z(oWV-Uk^SDyBN%l^5w7z znoZ|8D(-rS)#h=jOePQ37;uZ|KL``R z-oM`4q8Ca%<^Aii!t*-U$UL)=to2k})7hlzCpBet8-BkYGX=h?*6YW;|IqVuuAyZ3 zWr0k8fRKsryYfNF2qmwOa{evD=NKQ1(2SS!!3IG34JmL(7V{U!uV=h7<^lQo@jc5s>(p&A(4$0d4PgzJvpEjC2-^IgG~vQ ziwtK;j;4wO(l*-FU!`3JWR)@ZgRHB)D;)Au(#mCui7K3ayEc=LEp{l|mwkTX`v-}^ zmm5+WR0a?kc`Nn`3SVYbYN+7={0jNBr61qma`?kT8K;UfY3hlZ$KQ#a?-}r#s0h`! zw$jvPFikUZyIk)M`9vbYlzZBv zF)lXEO+QI10IZ8w=B5{UEGY5xL}-YCB#KBb9q0>WNCf9nEL{hmbHeFsALWxrBYnT) z@%5gg?nw?><_Sp#-($}onEA$9J<;PJje`tN&?+hdw$1cU{X@`I_(E3!R95Y&1r_j8 zCO224QvR!%dEZLqcHl<$s&e~w~{0x8Uh}PvsAyG@t$ZW5LCE}qV67q|x7vKr}P)(BE z3FqYk9wCNaMurj0LW$h)`P;VFE}ASzTScAr?l@)b_9!J84B4N>Wxw#O{JJBe(7%nt zN`4V3ipJgm>p4W4p=uqlI}N1S0&j^Z4hN3ZkUeRX?V8>VBS|lhDyz}Zo<89@4Au}o znBdR2zu0d(TAnwgRya{4lKtYNXOd}=oJ^%s(&EvnmFWY_x&voIdoFHO7#1=>l|ziS znfyj(Q`oLy@sML>8zi<7(1YhPE`|H<*lmxd_r))688(m1H;d}Adk=J&F>()EA99Nc zHR0;(YAo?qTkFX1`UNb>|92#kGTNEC6J(|pCm5(0NkXZ=S>#!Ua{*1wk|!v7H62;t z`1czY_%0Dj7<`2mBk5+rNVxVZ=%$Zes8#64Stu6q|B)ygqS${-z)|bwPEsLXs2het4{6M)O2T< z8js_8mL%h>2kPjpgE3X;;@np=&NIk4&*h?>f+%}yj4AcX{wf2CJj+O1M*jv&vIczmhNNFY(p#T#B3F>$B7fpN3Z+Lku{BngNQh zAk}`t;k&j}8QhAvzT=?euJ0W z)?xEn1v-cxr0dE^N4mkHpB!n`anL85b^xWZLr@;-pu_m-22y-t(G9?iL35W^<&8>2 zo<#5Q?8hZ*N$L;c`Y%*#$adhK0tvVO#&P;xDlDJsw%aM<-euR^6Y6xfzy)^rwX#1A zD%y>CRr7c+=BIX#lG0D3<0UVzACOwLmrt(7B$*C)77eC4kBj3pugtC+_twoYZ2|#j zasx&g@_}j0tTJ<~i3B9}ydPVOSD9kjSW^tCY%r|Q&U2Si^-|E?GFmp`tWkw9oBSp$ zk@c{g%`nIVGHKHRC^_j$QgHyqAUum;XVbB-G!R$!BEY@S@PmV6v#3kh&?KY&Odspq z%;ldi>V2K(^<@GitQMKu=@8?Y)vzC_$@bo`_I*@gaEGW1P`TQW-sV?Ei5wU#Et`o z$F4jlM%$rscjnQoQ-0tOmwuF?*N*(T*lPPJhGn#OX3N!$`WJ`(!V&MBO}ytb7=GV^r&S*R1*Giz zoIS9BRAe@R^sMCZ+7&1W)hdIZ!RiTKx9m4ju9&@nZGyMmioDdVE%w5>Sl|7MZ$@<5 zkoDfKB(EAK4ldbyNuPC_zm`pyl3tQycKX-v!9NA86bhuhnhcr*YI;^3^mh&U0x_!bmz-0ON+7# zmZ^ehGNcx`*yupD{7Zs}2Z;L~DKL-FpV>~Ztp#x|Hx}fsT)8b$Q7n=7@C>w=Q0vE) z=JMA1(T748?nF!0Wn?v~%^QN>{qlpZO5l`9HzS8F)|Revx&(-gH)=PAPw%=NTrq!TD^OO`u!4Br)R@wxuX2jTE*P5zN zLK04t10oX+ZHQAOU(!zc7t*lf>Xw%^N<;Tlw)llGjUSWxeC56ijnis_l$581omZu& zZ5_Xd%FYi2f+D6Ab2vcwW566W``BCRG`*}T5|9>NUK1#ohI1c&AF*zf7a#1y|9qyK zCqD!wKIgtXCBI_g=VSh)1-8_f4y`oSQGSz~;?kFvhGH~THZ7NK*$m|^4E~^*lXoKm z`Uf1kA%~b}?5VrmyNLq?Ko!=oeR#R?frqWbl-`0@!sY7PxW0-X#!YHTDL93RQGYX| zTBr;I3DG5t6H$Q1wf`Exq&p3;2L9*DJi(|AuE@sh7C@Z&GMP`nSR)zF(6Wozoa=e9 zHteYM{?#E_-)X7WuGhLQcNv78jRre%#qLx-2bz`Wnxw5;REHvZA zcR2b`W`yh2h*e^T>G=lQL$9@ph*PmriNn_S6V+bR1*lmBNfvk}J^EPnV=W$9{br zI<&Bb$=k*3X<`zWBy>mu<>iPG$rJQz-q1x)5rNDyEY30bqjqGyK=z#}lf{_@qupz) zuuDCIc|-cQtWN^@`xjvQ`X|YjO&Hb%pN%5>%^h!)jV!~|sB28rC=79BiP=SCZK@mI zqO|1c|0)iz(8)E=^Lc@(C&77;~>y6{b7jV3eLM|D}Czh8G`nCV{%NnD7ZfNl6D(_N?-1>K;p zKX(IxSTzSoc0CW(n}hslG9$rWRW!?%gw8Z zz3Zn!>t5vb!>Z27`nPSAORFJgfulQRjJjv(!}WI@m0WPhT4;^FSP; zrsw~{Rd>@B00l@Y$ZX^;8W6c4t0&Z%kcrXQ{-D#Es)KKCvchCDX!g-$-(ddZ`a!Q! zGJLd~^xQIr>Kl|qC-c^;bV1zMZOWNBHRD$4E$c8LtMJPOYxAy`ZcSnR=0Op^ zSw1P^s&it{eALypY|fg|9k?3J8`LGDJ~nNkQ#L3fT+3m1_I2){*t2JrVP*A41r@sm zoq!>Co2KFns0oCatb^k?f*g7ALnReH>!j3~U0bwQs;Dv2A+36J@$A(gwnx78;XNQf zGuy$4M;BrumGVlB?1vsNj9>9!U@NWb0(Icj)(+qDodUBEC*G{30lDIakH)y_gywm- ziuniFDySfSY=*e|bUQdeoR`VnM5&H-^t^Ao;G}!?z1l5uQf!IA0p~oi6ED1?6@KZM zeq9~4lE0N}XS-N`xwU2jN*ZCLDMV9}Obo$M7B-tm%)PcnB>p%!A!iYtb?&YMm)nSg2`ojE6| z{S;te!h4~FIAha>A@#~nRA*WrD#o}5m83#_>)fse&p3y;lWBS%MLN)DaZubX*fRDZpkKtvi$ly8S{%-qGzI_UXN9Pa80 znVjAm(dSFNvDqBkl)@yBvWx!8Ibm;f55Ia;#;K|uCg#)dO-PQ-*Tw@-*k%UORhVG` z54Md_noKa1USn;10~o}c|AN;5;aO5M^f=>1=*d}GGAc?tm{j`ZN_w=qis*`cS5B#y zy-YY`%Rw7Y%;!xFay*cF=!No?V|`@U+QPh!>0fqCFQ0RYA`*d>4>Ki$awzpj=*GFE z;!jCo1-rfhw3aus2$DHQJq)bR$LKsHS(Tg4Xe3MwY%0*1R$n&&BEjIdzp81wEiKAx zq2cp6FE9el7t83z_1_h>?F6FcC8P8#N2N#=MFm)BV_|ftj;Cj)9ZdZGQ$`g_MQD$# zWn6}=^^}7oC4`aM9D@Z9;Ump>&L>7O%Q86v651ei_- z2RjB6FdVfE)43(OasoRw2t1)w%c;;ew65Fl`}iSeGupbymkr#(%h_kFQl###N4=r$ z&5GYC3fE;HASD};y5sTVFty;*LrPMr99k*Rngo-^3@KXg8Ry*V27z;K=;Yj7g|zWs zBYVZ?5YTl#oLVr%4Q&nvwf<(Y&(WpQD9{PC)H0;TCq=4u1c`UE*LTmGoxW0I;bIhz zyTB&XasO`LHI~Hsr+$M{WK;Y^2W%>O)5&BPKLZf^T}gw_0vG}u-iDSV>uwY3;s&#F zX$tOj+4>Ha=O6Swx)wtmIX@*<9ik?nf&W=1(s!?ml^AURd0E?P2P3pqEDR z@7vt}ldJqc`@UPMt4GqqD(C4RS#SM?#S}vY1U1o+$))Gw4Ks_^AIyvhwJU?{oAg=k z|7N-81p)LhT!11Gkj-~{Fxy5kOH3e~vj8w!{P-B(ffz=3F>;WRz&rp@hsE<~96*IQ zhbBos2xDqFSl&6TLJv2aKda+UocI$l|Lh%qcG3T?`Gl9ZmJzzH z*)U^$+_vj+u~(0&M4=wN)cjvth_`a4AOKy2lnGbjSEWgr?!{DgD3)2Sg>z!5CJC!k2HB`|4*a2|HV^v`hJ?#183}lN{#ia!AJQnrRxSeROSDDa5$MtFf;1f^k@> zQxBi^aLSE1lhGTN(Q0u#YL@y|2S0fOiE=`uAnq{z@*IQ*ZhDP8`wVZ%QPfR{Q=YI? zJ*IqxlvI;LzRx+npnJr#V%rP90Erk)YwZn&`vXl z_6=J%CbOX%u^_%}2Zzt|Fdk2ia%z$73loRk7uL=C@u16NmWsag&!^kYJUuK>kBM=< zI2IZ-2TK5|SN?;d@Dh%kms=O%S2$(uGsMNPQ=WmSg@W2R=0Iq=srIvM|JSeHYUc?b zDE)<-Os1HT4A-LOW{j_sG~(RzZM~*yXFossWPi=a-XSUj{3b$8!tqv{Tq|3?Z|+ZG znQ4^dXXh7W*{+Q74=S&k?-h8UmC|OByi}NJ(=)Y7UZaEg9uuN?=&LO;Gs9D;4DJgz zN>2s!Tshm4o4l5^iCD+HOv|E(LbFh)i{3~zm`YH;Khy9XVj3hu2N!!Zs{ar6-Ycxh zuU+>Av4V&oML|I6NK>j(6{U$7MFpu*0Vy#=q(dNr(wl$~0Rib!BM^E>q)V3;B$N<( zC!vG@A+GmZ*Ph>;d+)W@o`?J3f563iK@RdJ?-=759oh#H+iYojKwEGQaQhfc^!v`}gbAGuaNT}XIqbUo z1*7xAQ>MKpRr=n$elhv}%fVNr(l*ZLHgi`zbPsdC)4j|Wgq1S9{?Q0Tlj^sqQ z$A3*sJXEDK4Kc33?P!T5&wVmye$Wv45%3EI787(s%8BV=*X)-^S%DQMep~kjdbGPQ z+#9G!^AGLz4LARz%^ujpi#tQNJ~#sWQW(eCQmFF$KnV?50`SFWy?V#&jap$a+z5 zdAT4LNt76!rk77gQJ35E)r@-$tNo*Y)v{0b|i#rPJ;EV?plk3;EyYjA4c7mxr|ZX&vqLlhJ!y zleEoeQRX{Ud{JIFwfUo(eoUIj#1n%MFT{R?~h- zyA*(;@hgn=x7P^CQ<58t;Vv-AHnY(K^q!?>%f!;2WvUU(Q53CedoOtMVmCu5fud%FKf)C#LVFJ)4WU)S7o1f2Mjw^LB>#E9d?EX&?U7gX+_t5i zoT;3t*+Z&LVq*?q+Z%d~wttMVeCO>fgWW8_Ze&;qi~Bgv(EX523S%GPHo%cHm=&%; zITZwcGy=arCEf5FQB^e`Ji12Rt4Ay8iTRTfwjAzWiGv?upYjmE_ zg-!F!$Cc#0aL?XT>*`g}nFPP8^wPB-77sQoRE_6K9L8qt6sGo##3smyHMtzR7)@iE zcoMEj35y97u=J51DZN@x-XCgNaUsD+8)|CNseKkU1J=D%H!0}2&AkK}zfjflko*?$#vC9IhlvAtU{f|Q&)^QbDjCk6Z9SIC$?0l^_lRP{X8}Hbb8rD zT_O;7YTi&isXSt#B8<$4P;ppUm&6vXz$eKpw<(Uz#BlA4_(0jEK!Q5=7w{nL$n!q0L8F*h`q$&ZqoP2!{GB;-$jw#{+Z6@{}tX)|AeAax7- z;*yR43ZLx=w5rs0OO9gM$uqfDzVC%Esl5J&O=|=zu;*GZh`q#U_XD*+-CNdypdC<@ zCyv8MUO%xpLtvOadKvWKYx@`yGbK5V;X^HB=B%wHZ$M_m<-lLl3VcZ@4$k?dQEG;ulLDWc z_7JB(Dj$NT#=DlF8H8X)WHF!%g zWH0#iC3Kcu=Cgf#pa9*MRzogs(!N3IEBH=xw;`WQq=3u^@`e=b8fx)#Lvy3K6&LRM z4TXQRvb!<{q585IK!apo-xl3PTtGBwYii7B1@gwVO=%Bel%O-kF#Z;jl|c9No$#vX zDAV2iOEr+-guaqZ<}WSv=AJQPe^!n}8D|bjy$Y>rt_)eqJkY`v<_68m5LqW}$BlAr zT@q}nX1a(=GbFoMm|XJll$R3RjxiIzHuHFMcmg&Ui)*OBy}9&8^A`X1BJ}j&)ar)q zAW@}P;2@yb_L*l6<&@zO79((knw1hK2Ug}nAO$p-Njb#n<@q$-%E_+5y1K9XVHckd zUN>ZIMe5ucRhi)k0T2KTNt%0GVy{nqT&Nrh3bl(FzAG~6tNrrr({j;YCbci4tKHkx zExXR-y}mn%CFyZL`;UM@BE5d%-;#Paxrbui9S&IYnlbfP_8lL9jKQ8y?TU*;$Oj=fy z(H4z1j5lPvzvS${y?8@Fd=nY~pWT?0?;RUUo+LTsEU)Gt4Vn)zn1QGI5(2UriKzTN z3KS+S(|{;^kO1Pabvj7ONb}5FMp9Fg%Z1Wp700!Px9%!Gu=p74ZN_!=kE&uSf5-Yu zN-?QzFWP=|L;K>2rDF@2e+igK=6?KED9xwvV846xXtM5Yu}NRCVtA(|eF+NU)rLJq z`~m5X%I-?Tjc0KDKDbu(Dn`67Aen#nydz-V**n7D*(m}FVMlw-IC#DIRIKxLt`3^# zMTZ?;p+P#TwN+{`*iliCAT8`ZMQ%UTDJXRD;UPyt{A;D~@k4DvQq6_>2a0phBHNXR zehu`}UN&cjko{q!UpDlTYBe|(@3-G*4pkiy;v;R+q-vrx9cGckJ8>Kkzp#)etwTNm z9s;mXA+fr~j46SIii9K2UnA(XV=+2O^Djj9p^Di1hdOJE6v+-EpC)AH=&o5UISKhu zS1-&ctC0-Gkj2+!Qj)4%LGF(!zzo2>DHraL z+omcQS8BEEr!m${}e86G8K=L4#5&Sffg9``n4tGwydWhA18Aa{^lGs!uik3Mn3c1lj!!~xAG{Oqi+@W7i(s?f z#EN)c33YgFi`i(J9u1+L+uGKpJ)uC%hjuv#Eg;+=oujZDs?cgdkdeyexs%b?hgJ|YaoLvdjDs@BGNDH zgKQJN7|8qF$GsJYzRZwKf3u6?B>2oei#t5IZQ#^p)9-u%m!eqtW6O%Y-KuELJy45Q zSv={}J>%gWD0h_mjdFZSeFURLvhXmmx1w3dKPZu17f&!3IE}zW>WdI=UsTycgzMPr zutTPVY3@$Q`i0B@a?RRm)(SrH9UIINJq7ya2G{A(6Ob=|=MvSY*N@Ed3}oqPK)_1^#U2bB;g z!RS4>hpPbvYia|S*M^f(Gk_%T!}H-cr3@)r^69+#;Kc`=ipOz6rr+wmoSr3od8xr#52x0r|z|*IA|Nro1^CBsU$?Mm2PY>!4M@@m0;$1?Rl+g{QA}R%xPEVUc@x! z+EcBG(U#yCoOX!hM%9rkJgWH5iml=iN?XNw&z9pTn;uZ$SJz8376So-LD>tf(iwHSa9yx4Db^vq7dmr+7yJ6g|icI9Og2>JIY- z^s%Z3JZ(9>CrZq|FHXS${46w2-r<_cqh|Zh}#W)Hfd1DG` zaSv>yCV@n13GZ;5CY9)9z4*DLq?wu+V4Gyh6Zsj{DX%>*I9G{AzM<2|F*}JfL{wn+N8yf_D(+rOU z6H#&+_a`16o=1KU(_W?8rk_ANL|V0%OS|SuF*$CPTG{T_kMH7U_fi^eHpzb_dN*{_ zB=ftdmKO%}c)m3MTMaHcb61)MV%Ztq-*NxDjtn1@jLJNkO+;!v#9kD3h3uSK}P`OUL1)Y zc%F7auC#|*Q|~$1mp3EhH6#ZsyJ}%Nb93GPu~?9}^vzc*{9;?(#v4MHkCHWIz6JJ< zX0kcNu0A7A6*~Ak7iw*bA=MLYl`CvOGAEuYc8d-EYP}-xm2~@OnH}SzPKz4&G(*fs z_Yh3+$~)C&qRy^iJuL4khn;AaQ)SoajY&QcWAF6M{MBP*&+DtYpR$Jb%w?;p`y0Hl z>1AmE)I+dZ9~o8HL-q3$+u5&OBGj}5O!fg7&UJB$R4-6h2XcI9awh3~Sf3{@`{kv# z5|9y7G8bVRW^B0`H%s0}dc-P{CtTy7|IllPYs{*(gCmB<;J%|f;EOF187loOYM~{j z8ojDk;+Xm&o0pJ~y3Ym|+GIMe#|lqf5-bn4(|HKLe-w@eMF?FT1={u>3)<_2!e;d% zG|frtiYsHvo7|^oo^xc_2Q7wUPJj9Zef_?ZU+R@xs;1{5hYzG9@Crq1IJG~*j~) z#v;P5?L&HN)G|7d@HkTw zf5{1*!V}o;oz&BqJMUX2z<%}2MS}t2fti_Y;bcwTsQHikdwXy!11DKwIbI1karoy#~4xtZ{iX$rTO-b6lP$d|IFJ0-{wWI7MkUD#tn7;RGP)Z#Hs=Qly0* zx05&^b+EeZxjd9sH0gVDe-}_b7t$7~E;`&EL~i(XGB^ZoP}K2~bco|@)0!*Kef+ED zzTEnv*)VWhm$E|#`9ivY3RhJ`v*0}fmKiC`iSAXnJ5-7h(=>6X=pvYmi&kuTM$rCV zRgBhv#|jUVJk@QQL|&_0@4T^n99s3;uq=Z(L;MqU4_}q@eJMkV5*EB!y6aQbdt=8! z7E{VQ|3(1xX}rk|s;nVV^Tseif3^11?YLwWO_sxBK6XECWot%tNTL*MWs%;@z^wCz ziZRU*()(c9z&M_GKBgS=z`8@I)qqu$v$gpA;N`FD-J~IqM)O}L8R_Ds-EoM*zPCeT z-X6i(!^YZArNAUJ9jfKy56G608h;mL;4RiS zVuowZAvu4&ApAZp>V*A`!+ySJ39^o(>X0XR3CH9%Y7ry>O6gywI5~G^Fb0cJ%QqzM z!GE&T$Dh6o9q#@rIAw8oITyHjiWDyhl=*NZp>k#kO zv+K%h^O%8Z)jtc^9PCm4{D6)f1QmHu5aJmlvC`4<4pO5ngf)^=xSD!1D(&^Qoq?`3 z^em;Y>FiUFGIx`sAmzA|&O(=?nljV@M~;^9ZSp!U- z(|2q0owxdYOJ!8#y#>d;4vEX%ds^z9Mkv=jDuUFgzU{eMKcJ8qC{2gbI>;#FVa;1J zHda5`%V?-30=Dv-%Yjgs_gQtG_2?U&a%gh5&$fSHU*e=B`Nty{*mOhyrc}M_}bg zs=%x+ShnQ7M-4-yt)0m`FS)YsKpojDe#M;j{H)g)^-4dq6rIj>qFExS7llbff6~0nDj_NuT>IZGQ8p2xa5$ zn1^HY^%-a0aEYoE-)p^hzgL7SP20(;hgl;I2&SzV);S+|6)>+^WzmM(GtXg6+zRC5 zzk_MeHKUPI&MCv342^EcmxzeD&mAJ!zpx(fwecb~a2~RNAz3med$bhhIbQq=qXQxR z@MOQUX=&{5>ku!NVBu{d)|LnD+q&VZG56K3r-bPJmnpZ87$-TgGx@8qbl)!zhUKH* zVjNM8o9N7kCUh_b1x$oYE-(cE2nm@z`K?<0EQ>w{0y}5G(>T)GHZl}Y>A68Gb-#Qg z3K}D2mehv(p(x#NNc`C>e7uvw+R{$7<*pk6NZcFxaqbY`f^L6yx>u(2_TzYS z4%bok+UB44v-RwER{O_T?!bblE|5KA%V%svK*vl3N5giQ(?4u{`8Q`$?dfhYI7gwA${h&&%W z`Sdv{R{Syl3y!q6D9-?tz=6B|U#5Kpt%H@CfuG5}rTY#rilrId7dm8+J(@NIzX2;G z_`GYEbJ+k&XtUVkR^4eb2I%UHN7|0Dd* z{D1G7CuK%Xaolt(Z~%7vPz|~*%3gD`Pw6(lhq)3E@6itE^KKss9|Bx`1G*?b?1*Iz zu?c)1Axs{_|GeOz&*7iv;h%Bw&;0PuJo(RZ@XxaNPkHd)DwE7S0$98HO=At;tiOtP z4>NpbI34@#(aH6H88n}a;N~-DkFL%CUl&p=Q9$Px*@9!CtMC@j7>})gtFMo3A7rzV z-rQ8!5Y~8EQ(a>unW4**W^dTTBN$F7F}QJRJ&wGE2(9!fK6Ifd9|jmYRg87!fDKB- z_eG)cLzbNW)a0{eKlZilL}fyx?p{WXD^Q~V$yPVOiGWPWgtaKHK5-%1k?ZiAQ1q&g z!d&n(XG#cAX(i@$mkR5P!qiF6rcy2cY@sABW*WNR6#31@B1=MITW0^M9!uN0f#BCqVV0R)!g2Q-U3 zAID~GG0L-yDrcVj+SC*CA*H)znbrEA?!n}tiHb?jy=Bt|92~(ZW}nl{wjT!~jT#Qr z#_u&Wh*c$_vT@T>L~)`S0|pR|LUj1(YLt#<0~>NiDXes9W^3W6&Ce1M-_ivi3D)QA zKaB+5w_N+vm2g_6&u5idO+x@Td79i;S!N6^%&`(5j$f{E|FaBzJ1&Rc+Paxa=*@d` zx~(-HIni)uLWu4OCMt(fJqKG9QRh`_ip2e*i(=U-7%cZtEaHoI^oSe1$>Z7 zu<77weWyQojYH~ozeqb~B=_sE86MPI)4hRG>mk~N6(~gwO+f}E#l4pu0&28dXjzmG zE#MP7R)Tk152~>7kir$OdaWG8l3sUj_iJs(rHa^;lzuE-XL^0}nV74~K_e<`CoS#p zFwI{^Kq|vODq@ba?YIk@Qp4pFkC??0-=Bcr0*(WY;W4j~Y`&#*c}jIT(Eo2`@S(|5 z1&;pN!1fzxabAFG8!es@KX_Q9#>G)tM$^sywm;yIR1DaI-uNp3yIZcnWAumQBV;f} z=_shs$AzkKYaL^tg|G8z{}T^@@n2n?TCdlX8{a+7+eb)WzD2ac8B4Vl@2?gOtd$1* zT9wMLshJ|~-~?kge(;9;c3hwQowy?egis?`ZrC3|n{ z^v{T6-pPE@P4FpcWT9@*0%kzmlS^+UTctc3v?OfYb`JZ)GOkwEC-+G{^%aS<68FV= zKV!T2`qf+JG7VBq8<4;;K&&?SShX2eKOYv3(ILT(yLkEa;?obi{iQcH&FV5sO%N%_qseruBUaj z2DhI4et&ITt1Oq{@=#`T&FP{ZI;x?cp!j!~(%g09I<{8u zqauClt_)!a_5AYo#pIWQtwUpCW@~o#FT_26d2~!!@9~4%InJ&kxIJMfELK&$ZKZ#g zd>d8~RF{yGi@uP|sr==l>EXo?Nw4bw?qHi^%$)I%g&F~z6chUYGCkn8dF5j~y%0hs zQfnyfanrqgM&wZ{>b=|sc#XG^Bhy!Imkf!x|K2_+?L>O#>kctIkIPLUX?7dfQ|r85 zNZ2n9OgHgWPHwn~!n(*E^&kA%frWvqYTj$h(57krx})Ot!#0lo21t{JYV-*H)ESNE zlg3<4e&yxNz37A!zdA4R5FwT$K+3a!&;kL}P;mEcF%^QE2@@O{D9gT)dGuY^}<4QIr{34y`?(Y0u z)0QFNxXtP?ZSyP*Y(O?|X*BK-KI;%Wb7%@aZR<2(^?-8oI-z1>%1SyYPeClhcDak>sICtTx-Pn-Z*es~+Epb;%;WrYAVVD*IO7~GiCOEGsCMw#B^>t}=7M(dd5UdL-UP(#;FbQ?L+V>ix6T`^ zxy;z7kItNkUC*knz6s-COaO<&bUn%`UGfi*@NzvdA~#u1p52bL7p|O(amseKXOkQG z>_-2d7yCRg8w;lyp=dP>p$p`hzf5hJY?@HutcRPH*rF|he2&334!jOxG0A)LJf@0{ zqFOoJ`^cU(mdE95kLkgVk(0LoOFvqt4IH69(a94Q{FSC=knp%#gU#3{tA1GW64M8{ z?vL)jWL}LaB#uG|$xNiR;q9)v!xOY)4Vgx`r<# zj2;Z($EmK9@(ato-y3yME!mrp-QWLRg&g-|uudTGq_YAju1snH%^;grsXv6#%SzV( z*QPxfh7K-tt;fIdI+OL*^mfVJ_dnk+Mc;a)>xyUj!?;Q}8PMilq9PBDHvh;eRLN+G zoY71XCwh9j307fz^j@iTi^$KY#*DpUl86ff=6hvOq^0N4RER%yH9+Y}!@vf(GeP0n z3jTGl4|(OxxQOD$r6dt z`Hs0?Is`^Mz?RG5UskJ^r-En+u_) z7lrPe#3;<5S{j9?3tDk8z)5OoWCkD24}g2HK!mOgYTj~zUNM%gGG6lZ4+)((hINRk zh)BJDDLbMvK`ORkuLe0bLcPBStIm{LqOHSr!BC*fEIY2Rb0gv%~=l6gzNswVk>cM=qHg?hvc?`6(E;| zWKYs0XEHzXwSes^V#Ub6Yqf4I!_kDh5n`ur^&9h!dV%xt1{tIqVFe1Hig{ z$v%d`Z;!`%*Z(WB?G`bT$g{%{tj&U@s6}i7$KJ|X%I)&5@Cb=5dMB^)zNncy((^LQ zXogHboCT<-m}v$SEzg`RTFpA(%dtMdX8|Qr!yiV!^Eu7VKp*`zSK({(u|6jOKlOA0 zpN`#8B>frS?dh1eagL+LDfDdJD6~vJL_`U?5qV}(`PO-06s76Wwsmoa7NQwnt9^W= zOk@a0I-|}vru(xgf7^@cFO!e_ARp_|V~F1JCB*9T1gNNG+c2t7|yeEXKo{ws6B?V`YIz^gygxyhi&UAYTS0Gy1c zmdJ*cK<&eLIOD-UoqEe9em*cZT9zBK}a?sCZ;P!Eq@mgwCHAt)@Dp=MHt} z?>;+l(tHP>!{NRC1-=~NJR>rgW~1|C(yuJ^(Y~mR3V+g{-ARfQxVvCD zpug!RVA(Ir#rvh>)L8C~DV^kbHeVNca&*Hu#f0ItTD9YFUloouVwi8QtmoiIy@shA zml+en=K_V{w}voa-|s%5ht2g#A5#-t2s$C2&{us^Q#!kGZgP3(;x|u@EA~A8oDxD(|K}9+1PBz#zwiMUSdTr3QBsbODk?EcLYQy(VGxV|Bm!?(l5GqBJdh zfs|x1@3wUPJ-y#MVVSonMzJ;m#!v+iKAY%U`6PI9Y?5o;?Jb)Iayx4CZByJx#`(WY z@gQImj55USFk9Xn>+T}P>>XkndD~rAt_SS@%go^GwU1r*g1PGhgo%s)2}2eAC8FD- zTNIt}kcr!t@Z;vXBQ=-|3uCA*3!j6jj5}#U%KjJu>NkhWomv=&52`?PWqJaS*^3^L zPv1qlB$XZB|v(tNLni@l_M|DHC@&Z>xP8`fQ2+aC+GTa_HW zDGM!TLz=hpeYRWqGv7;&X#Xr9b3r~bLFAQAbc$KM-b!5!w7(mt?C3>#B2cI2Jr9sl z>is%w5%XRXeew!PJBZ*RFc7D-Q2FObG8?CbaEc3yBO3#i$7Q%Q83!7IbCSe{=$s|1 zs{9Y52c4^Z8!|eanmiB{bV0Q9tjV@xYN_4yCc6n)Vdfd`L*P~Vbqe3d z%>wdzXxPHYDMiR(x`)fB@z)J!PN4}yCLaGZ0d5RNiP1LLaX zc24+ATZ&t-b?iHLuryqF5X)t;jFoB>=EQP9gw7;3dFQnAbF^e0vvuaO)w>d{fAF>V z`{d~=o`7!FzWB)o49V!);S;}3xi_fAN`E-6_#8nGTSklomvt$%=| zHSH&Di!CCd`hQ3k?@p86YiCzOws6gafY=<8aHumysSR;T^Tu>M8KsM0Q)?x%R+r~B z{=RTj`=`s3&5(p;B5VjN_hdYdW46VP;@@Ci<^xjno1UkY1rcBhD0-HBujS!Ldy0F$ zOZ`Vcw+*{?2dbgcYAyzC?rJxoO?baXm-3wR4@e$Oj@dYX?o&?*m_0>;X@csTN7j4n zcIMS&M!YA&U)c-q^{BC}b?~z6<8QJ(pl?i>%|8Oq!)*t&)qPmITc-roE0+!;H>;43 z2R4=KBz2j&WX%D5p8j#3fQILngZ1D5&dht77$sk&!4a&g%{hz_)@g}xXIwah@}JHh znu~uKg5F$LZaQVk6&0*Wp+=wS9&LcDGdgITz)51&ko-;@Tjg@Sc?){j%HX%fPN)3j z8hrWQJ1d10?gR~uOLix3_w^}GzFXLH={!mj@R%IN1!(oRh93^*@lf}1=RhWaa+_wi z1VqDm`N9>lRx`OWn~>lW(*uC7NU5F8-I-kZFy6ywa^0N~?Ow z7rM6o%<3-Y!y&&rf;}~E5}UCn^34ABOD{+WQ=v$R3>s<9v)n7y0j2{iNHR&mQ*A)s zbhje02Gwx%{BR{Qhm?8N8OusuPma%Vrm85*V~srE z{>Hyd-%R$7=pO(M)8oY{AS6uUkiobEK$@hEwf*z|e?Fgoo{xXV$3OGKKl9`N57!58 zn-zoaZSOK!v^ktJEBBiI<*1g?&p24TPi~9$3n-~6L%E4LU1$6J%yg>ukydf;_9kNK z0#H98t^iQL&%S%Ooijk~fcu1?bm^d0H~(4i{#o$<&kO#4W)kH5-)g06?MZS&;BSeb z`k-6g4XwIlMExA&GjsXBy|r(Nmv=$JR?dD}aV?WN`T?@VHr%7w|~)&FHuMlJiwfdf0o8pM01GRd2p14~s~BjA-t znPv>%;eFaK8cTaM(w0L=4TxURg45pl3!m*2j43M?wYuwl;`gEbA9P4oZTK&gY`*Hb z?~Yf!p>WQloCS*H8iGWOu)Pu755nLE?XcLYA)fiTes}a8*AnAjee;j`HZ>IAE4mq> ztF}OMBcmC`^o;CEoD31%G(LpDd3yLw^2`y-y*m`nGk)VvEK*KIdZg><;izepS^63Bfg@OL^3iCU0*{X$5g6;__jKM`tAN*C z41%wx&Us(6PgAy4jXmzNUKvl7zU%o&ZrjHM-8gpfS*Dso(h+a!fei}drl=Aw1K8?6e$;`2$+K@OwD;J6uypoB|Hn0NxD8ir?!P zuj*8L>Y!DdR%vhLWODseNbMzuSf8`s3^i-3LvQJ@(h-!7cHCvUCrO{;-5m48knEKv zSaQ&d3RYM@0c_e!2F862%#nSDrDNisVc~$n{%6rdooPQAwgJ^?vpiITsCk%-pq6Qb z{tfSqs(KTR0C7F|;-MOlwlNE8<%q$m573Qg`a|~kg^*@hql5j|Yv3)NIWW zm_DhR;~C;~heXn1b4#gq2wbHbe<*>>0?CRj98hXbXH8z{ym-pl>urx{jLkT+0FUKP zq9;%4q-Xu|>e1D^L2FEGIosMAr(pJ%@H>%@mlmiR~(5nJp~ri0@K7lQ5@NA8)Wggnl zGO3Z2^wJ3+f~FT0wwvF8ygwvN%CC7b`u2l#wV_IJRJon+^$0T~UV_9gqw4ji@+uf5 z3d=0CX5BG|c5b^Zla&t2BRGS~eDVQ;u{pu|;8`UyvX{$XWaCb%Z-OaL&d*rFtLK72 zc{W=BPYM`XR~v6(aMKFC<4=|jWENs%X5!i#gbA|%Nq}R#O_+@iwqq~HYg&73o&Y<) zbK>_u!!^FQSv(i|WLe~||v4*4F!|==qtV?Wn_<=qMwDEc2x1HYgsurF|+L4}{49K&O z@@#$OeANn}&Ym^#*<2fFNi^v$4l8&L01f|>KC#`pgY8Owvk%ay_f3MawVr9C$`!~0?+4?cvl2MdVb7QtZjVY(rX`rh@{{R0wzneMK> z%V6tKI*U8J{~>oQc{y~fx994D2{6j~5`HLb#7e&;ZFcjw;HW&A-9`tySE6Io-)fNKvsB)4naTAO`-SstBj_R>e`%2xX;9m(Dh9$=VTG0xyRZ;Tsf zJ{SNC0Bas~84uSwG^Fd1T?;840ORq=so;$@IoWm0%UleSklkBgWn=V~4Py3QGEM2* zF{SrkWFJC`Xyb>rD>x3i1Bv6T5k+BoFNn{QJZISxs7TRIlTB5KbmhMzV6|M1a2hX4 zIw5hjZ2krEe24|JGq>%Qbv+TLB|uN~B4(Ta=AWmbD{%7+NO$Ra;m$74wqr+s6ykEA zFyj}Yrd0|-0{a+%$*;o-SJe9=iky)AbLu6@882gvAyEPP#9yHv;fBQ`_m?WA-Y8zz zZX#=Q2%tXRW850W$e_SeZ!)G#*jo1ZHLu_MRbZDpTH`S875HN1Mo>*O5=zIRem`8+ z+ryC{N2B1pzP|sLg$%w(;h=Wo>B5IEmNWRm9t;SR(yP|vLII41McTTT-$EAmkmc^MK>K}`wPd{MIk4D(=q{B!AZb%-@M7^GYd*{Yj4(dDm`vG zRtL|!TIAKm8s$9C7spTCa)`dymcu%L{unUtxk$4L94}ZJT2bT8ogI_hLXbUnO@#LK zd^%b;$07G<&NHC%R&i{!A=}?{?sBzAx?Ub(Tsw{Qo+7*0&-D<=^*LzJ`9z7*mswBQ zlWw+;Dc%g$t24x~J=`Vn8nQKUO!(X`jGf?&+&pex?qYTj()-n&Czi0jA)Yi_=X;fn zEBg3ZwfReuUP#1pz>&sIt=PB`kQ7cj^eo@q<(X0UULPSH`g8CqM8K71IZi;PI0LjK zetSBt%@3=veE;=wh|vR;cMJugAEH<}l+Q0UH8a4~P@#ec9Ae?_*PJUrh3P$R?MNexDNgo?JS?EOqHG6PT>!Upo320Uk|Uq6Toh z$*%nssBGngI0?hRfb_CwG~a?{UL@Z^QgxkNZVkW3`3*U-&_4h0@M{h4jV?~VzYR;S z{h|Xs4V6{V$73(k?~@m@oO3211lJT_h@Hw}__|zkN=){+O&8YXRP+}Kr+n=ft&Z%$ zCi;8+2yjkd1U8yyvUF7M2tGR1kV9}ni2+a#pq{~Ttned4FygadLCbOCxN|j^lPZ3& zqtsaTnAi1gSxVdGM_H{26PO!eM}*4Gk7ZAR8Agw;BNPQ)@DZL7vz4f&z%x!D&I(vv zC>&oYel^;8p|)NXYyIiCLy{~1jm4{8w=ZWo2HMvDD--dvd9U~Jp*Zz%a1)^SIE|~L zYKLTFSV)<4ZUtRh;tYu6dFFAr?r%BF-O?!^8&5$?Lc0t^&gHi?n&6QopYh}hZ$iB6 z<4)HOrUzEn1j&vJRu0l;G_a8fwJ`v=FTy_VEkw>|Ib?i8>6m4UL(!zH!VUBp!B!-v zQN^V$%#U0}-?Mhfw<(uSk+(e649&?>n7wSJJ+{Pr(^}&5C$7crFvD+n{nx=zfvY? z`%oK5Kz+7XwzMjRVjjV{Zmw;zt@gW-$2$&Ag|EZaJZGS6`lA;>HEFHY)hqdCK{*W` z(H%fSLnJ9H#q1Hh;@!!=Olvum#I}rENAYL{Vffu2ya)J#JV6(KLCJge@mHi5MD(ES zliOWAU!=H9H!j_YRFk+~Z-lEzM5u}H9ai8V7Av6Vc_@|jts2s%jQ0Ov?>&Q>{Mxo( zEQpGN^d_KGm8MjsMN|ZgfQZxp5$RxvsPsToq&EQp1p(>OrG^rS^bS&_gc1@Eq=Y2Y zKtkNt{mwJ@zTer;-m~8?@9f$0|G{$2qM=P9pX1NO(d3>Oqp`>wU!Q1mqcu~WCOQb$`pvlcmk!W8O;;cF4= z#D4}dwxFkR?g3XRyb*^-wKZ2O+z9%M{&>s6M9V0FuX8+ocNGs-Kef*Cd_$pjJw5(1 ztpazyA5PQnYix$$fEfHQQ(|0`dsAkEu77-|0@hQMiMmR^k?VK2a~?FgQR?tZMMHrt zTKG^muR`pua@Xeaobjih1DrRb`{qqEKDFNZ9z5MB8mZ}vA7p9E6rn(4B`H$z9t8f) zn))*Px~egk&v@EHqOT@1qRym6(mZ|nz~Narhg7{#$P;4<@oV)3R_Q`c#MJ)&ybFKSCpqm9C^OnF7Ln4AFXi5Az@NHOgs%^SfX*p<9}%!^`B#_EhKim4a0?iFW72;sWAD- zGmRLN3ZcQ^#k-B^#-}^+wdi-Fs|$&GQ)OaZ!VZf5@Qa}mMwf$+QFqa-3(*-et+;cV zTm;e3v@z%(b>Z-cP0~)R(FDYbSbjO}&ng)V6OaBZI$$Y%M3A{2G$8Zm@QQ^6$^zMR zI6dc1`<|TdvFAa;tt^-BSpSJvJWAK*SVywUA#BV1@^_Hb2k4-3)utkye9gpZOAZ)w zsp<$=EO&sD)wNniPh?-dP5I=NB~2BY&{`5u0iH*Q2Q9`T+tP;LSjo4{;1irQeYtY< zqZ{BGE3qSpw*F6VEzF+kJo3O@$s2`f_ew71dIU{Czj>4$0)sUzAhNj5mK`uuyJStN zl3I~0Dgdo>yIWh0atl{P!)i48J^HB~ept@I;n_UT-U9Uz{?U%-N*ICNQa zV^<<-4DA*lrpaBdS$Ex#FS9vqyEE;n6Q}W#a)0y_dT~3pd|@9a0D1;zr$foO=Y5Hqd4*sOR#>KUuz6qVSK$Jgmp-Ajf z&%%9{+cG1rg}ymN@BJ2+{pLWQ5gD1+J3!{yYz?U?pbnQt=b+vyqN`BzDGrd9%q|E3 z6^z4KeAgGo>OYGISJlW|xyFQ4obEYm3A^?x@pj_M!r(+cP1hsyN@L(vWi5v`bB2hk znp&nKIQ_Ft@(jw}VEjbWEtZ&1M`8sq?vgjQFyW8R_E&GtjJFHxKDg<+m( z6@M3koKDTm4dI?T=ft5cY$q0U1zY++WE@?o@7p8rlF>|4qzh5le<0sujl;?dMm?7r zn#Omvi~PDjsdnzVUn@2oqR+vpO_=7U{q6I0 zj7(fg20H%Oi1vB93567eW`xSg@p77qC8C8f1{=QBrkJk z@8=GshbN>{aveN{!`qPWt#R!ca6$@3Gfj6tLK9ZrTV%=DGdbr&v1*06oGg7(wQ$F( z?)b6fo*|F1Z{Iuu-CmC!Y^|?v<_BZhebQIq4Nzla|K@--#28HsSPau-^Jy5u3=dF5 z<8ldx2DQd~)Pl)w-))?`h2m4qN^DD9bd~ZM?&|_=-P~SZk*U(F?pKQ8V5D7UbhauW zNuJzk18&vV|NAb-{|v?}XYInUdb4vdeg-pB9J#E@Gw{*p%_r7w3BMmz`B}Tw$CR%x za(A=;oRe3k*Zhb<$=faG2AVkCVhpWPh|vD&i9XI?8f9FXruJz8xr3|T{<4#hc(Zh4 z)gsSlY;lffyjC*S1;y`$Vx1Dl_VlTR#eTkaRAh-Q^#TG!k&ahDK(xy|{JoDV+?=Go zV-wxh-GBN&)?d2f5u)z@%*8C~u3!%kdp=@z=4Pkf&|juQBS4FCGRV96AV1*am)!o* z{R0|~p0qPMQH5e&goZYT1HDIA&~a+jnbJuka%WhHhxf&}HaEdP)(1{ZkMr0s?>mJl z)(_t#x#r}{Jl6*by?-Y$ZiBEZ3qwVe?S(HbLL)2R>so?b?vLL~ja%gd8g$lkeTv21 zUU4j}U93DO-zI9(7S%R_2+#fpmmNU_@&N^?;OCfM2B0 z&Ja&qZ}&-2zyG;-c8ymx?O&PcMK=2TFRfc8Qn~DZnf5#}mOHiB{K*qxbMyfLUYrvr zbT((~g$q$hU5twqxwmOh-xH0RRZGM}^{5vJAdE4JNS}$x znkQtK$ewJ(|2tct`;tc6+ZVBFSn|(v!KA^5$IDcrJ*J)|hQ` z6NJ^U+E_@VlV^Cw)cwHd*((79?U3MvtqU2kJ3|G?6 z3bTof%}JT+RcDOpdR3If`+l2_UKHa7|wN@yYayzB}cf#73JU1#^S7}7#fA%(n6wMYAj89>TFS}BdsrNoh(Q5=}G`Ka_ zU5z$1pPt*Co)hJK^=BAc+``D*ZC?I3I}V|l7#Y57D!1r6nvqOcP#_Ld@9bcx2B{B4 zF7fs>#_zq3+l#%)?-S8j@?84E>7F4)ucQiHp7ktt^TL|+jKrqql>T0SpzZhHH$E)V zsHlbI!iwMtku#K8rK$1+Jci9fU3Wl!Q{FLU3#P6AnfvPFH`WIADJOYtP9()Y$O+B+ zn6mblDavE(x$kKA&>o1b2+SP7>J9g1dJ$`)njL^gl67GS3v zHBDA6^k4o|I>q_g{)b8vg&pYs^4GqTzdX_+KrOjX;SFo_Y+i`obgaMwr;(%bDD(X%fo@y1Wi#+?oXNHZ?r^mtII93Fddm%2nNs}~ z*{Vr*Bgge^-$wnSn-q9_nAY)(hv&M&zcqJMPTxMB%3H_qi?zHY=`bt)FkSL7tir{8sdg<;q+TtoJ1r&ZIYgv_~(BLSX8~!%J!4h;f>KT zkhM4Wu`O8~8LT0Ck$#qUNX{yK#;r zPKztRQy`YTkNo)PhBP7iZR%UH^j^fMx5x158EWpLc`BR-HBFM2sH$!hG8^X$!?Re-5~?sunp~~m_`wt zNs&OF`A5cCqJVj<_LFcYVsHhPM|kVez%|xBEDY5(sAoHJD)ep*+{zI&MZG@sjPeQoWk zoM2Gdz8>B#VU;@jKCudj;GFpk{WW_ z2?fHLXOxsFSZKSq(kzZu<1zjnERF;A-f7keuEcR>D`8zS|SXXr!H zdx_Mm9yEQ#aSHMc$uqNUrZeryp@U5+_-dWvWwRs)L`BU4QB(DLz~o!H_|XTnExA&~ z(6l}4G{z|_Y+knfpK5`ZjBg)4JDj(k#fH!-k6t%sUz?Zx zrTke_r*POseQwH~FNFfW9AP&wdF(8hyJsHURs1y#$%I_UY`I1?Uer>gZ9vZ<)N*GK zM%tRTLhT%e9!>=_2Kb3FyHS36via-!O9!7~oou&0MyB^dEB};9qvVgaCGQ5mP zP%X>M%HM%j70m{qHe-gc`0_e(nguB1?O4rQes1F{qSc4vJu8(l=t?xqDkm1?JFrM3 zZ<>Y*LD^oY`6D+@kedjgZuV*99sI^Ja*7&1xijvPnteRzIgBj<%`LE1w$PCJ_3~6 z3XC&vzxm0xx2f$z*%&A3&|gGNj(jS_tcp^l*jg|_IO<(v>};f)?C??kCE%>$F` z-Wnf|WXc(XKmBs|?zB*?0S}0Xh%LB1(KU{7ag;eM-Cp9uM@5Jg$^N4I%F7NL@^#DI z3X`1j$1j182|3897+y-wZW`Z3-R=>;A;Ks*1s2-4WzE|x;GeBrjqHR{gACj})s)(Mm?T|ofgVTZ1 z>WN?1V8Qje$4e>aQyyOJ?f!0Jecw|~WfWjB0_Ek-Qp@hh$>!gEfL$ZxFVly3x`s>_s$FLtV&|3#d+)$=6_*)Vd)xlrQ-xNv?We#Kzi&Ri?dm!pF+~M!`dq z>mLw54y9Y6(|t6&MaR0WMK3utEETp;!p_F3zz&e*t=eCmAM6@C_YuhUP z(qWc;PL;`nc?)DfBJ$9bk$8qSiGc*O$st!|7{YZ3VqtK9@C~xX599adjVi-oG@#k3MQTmHH88y5_|i$a58u zwZ_6$)GV{H9a>Rg<=FEw<>}JPb*Kz{?54y)N33|~1u4B_w{_=sLbj}8 z)l3V*uwsBl-zd_fafhr>B(5GrofFX|9Whs6NVB4J&r*}yJpa7+&vW@_P5kqH_-8Np z-?&FUW?}AI@?_#v>R~C|0wpu)EZG4j2WuMR2oSn-0r+d=A2~o08VpQ;7QLTEF;)EY z{y)#>|1;}jtt**l6qlX!s4?SKpZdKMFOZFI7&T8OL@9fi_^q$!uU*M`bGEPq*$?VI zH0%4X7mrxtgD16F$)ZsVkttgQxcP&h+THP-=B7~z9j(-e-`6OR=~?Ro&;2)pvT)(5 z(5?pzsDTl`h zvI>jYo@|pEd!9eK;aN~!qogMWxi4Lx>e+ELT4{-HF19#9Re-xBTD)NgqiDLy@JplZLqeE+=eUT!Dr9b-miayu~9$MhxZLkvy-S1QHk$=Cf z{Jx#v@SzuAW^~SORr{el=h zGsAcoB5f$YGAiQGdaj;ytpc21BXNH%^_8w1pjc6AJg8LEm+&_868rF?U2~-i1kgn| z85e^`aXbn;tCE!AH=ee1;bOacuCmtUe@&t_z$6w}t?fk>W(Y@m!=c}Leny5P(167=396d6numoRx1EfM4e zh&9fgFWj^;4XVid;xCh9ZJmR-s%mxJOCV^rxni&TsFeS_hu!2y!gHkb#&P_5kp zrHZZ5=KlrTnY!^DO1!WZ>nS@`EWFl#qhJ1%<+J8$f@nL8kAMna9NncUpr-Byx_!&D zd!6ts5E8L@36XpCz$sElpmpZmX$fINsD3TwRMIPZBn%$t5XjZ)1=oD0Ul{w=T+j4F zpU$Os*L8}fkPv0g8E9G(4rqxF;`(g`%Rh&PT6zJk!B z%w@Ha!VmSr6(kzT^6~l8RG(4o=w{o5gYeFFTf(&mlYCx1SvQ|vu8sD@Dc%lRT)=I# zE>yfp-M0u99D_eYH`PUT%&rMGFBfU@R&qY84FeZBxxzkF^Sl$QyebiTs?j(+i){xU zD#Bj#Qxo*8(I@Gd<8??$(|ZMR{gqdo9jQLj(nZCMVfgC{7AiT?aq+3O7S_%-S@k7u#7mwt}w&%=Q`vr^&)VznW8~H$dE!*$p z=O;(pIi`4vA)bLeM&&Z6n$eu-_c2)=3~@?9?Kdjh*dvQyB0O=^DVsZbFxa^pd0ux^ zW6mj6N;EZHoW%H<;_IRp;xG6`KN*v48AKBL$H%>`5UZj@(|ok~8rAvo4Q>wk3&*xr z1SCE`Bl9M)$GcF}u?{v3V~eA|fzI1&vb_h3%Koajd$|+*#ul_M_(}&+H$DFlt0uVl2m_w=BU*$=g?Me1JdE7c8S3 zJHG4i_RY=XHJ#WR>!>Qvc6;G;Z@i|DlJ z?VmeYr|1^ZdSu(dBU~6l$1l9yv>DCo1D6|b(?~@5Yz;kDrpeCsUx!P)+1=IKFurCJ zJY*+uVg0Z>34f+mj`whWjsIEvU~OaC9R6jOIR~UhSIjZ}qpmFE>-+@Bp&}gH{RW`r zx8}PCz~bM+Ix|DGlPcT=?Q#oren()ro9i+)D&&$MsS7-4>5%0wP8g?(16Q{279m$_ zk<_o#;C#0hkvRQQB8()ZZ~S>5>x7G(`;?-fx+gzyFx!#gF`O|3_6LMRypyw;*u$AS z!2Viu;6pq7(`eOf4D373f0;t+08~zQG~*(5*k(kVnObc|%_;%ISRyqg@yWKf@^IKD zDQ%zj%wW1AJHf$Q?B?YIsgsBVBK$s8h1|FO1Br@{g_=U~3mooIXak<*5=T=&9XzvmqJer5OvEUsnD^04qtO@;>$ zbs8ZLLkvRigc0Vu76-kSB)e0WW4{t%^G}d|oT`+VFNHy}ES-REA1Xk9Mb*ONBGecf zP0@Nu1V(Iu!uzGlDplUSJ-ch~`V^~WWnL=?5GO1YlsZ$Bc_j}7`0$%$i}1HNR)iNt z6ik^N%m<_ze7k|>t@I=K5{BXuvD;qiirq19bn5RE zNzc6#*7N?|l@SA1M#O!eP1sf%2)0hA9GWm1Za~NY_JDuEurT-n`67v7JI<) z3WGvA*ctRU23Z2OC~#}4^lNFUu{jM;G)_JRKyv>!xC6EW##vwHxyg;7qVB@kyDmuS z2*l00Nv_*2ac7L0o^oKX_u1;S$~3$@rKmo6f)F2z;m|%y#Ss+VfbeQ)is6zRo@WGc zw|uouY+WDr$|TD;^|cR>$aAfI$-nYcyyOygqd)2}grL{1#YI>Nh1{c@Pu&aqG--}1 z5LMT&maFaXyl=aqiCMjL`jk&Zt#n4P5Fm*gSN1j>F8SlJ9O8o+z(B_f*%scO-YI!$q z;g%`!IW^EJ9DXwrKSNZbNk1MpH64HM4e4*TupL*?y1z;2b4>f$>;FnKl`X+Q@MBDm zgXr~{@TWcq1K@vF>YSJti+(iHG9ntS0+EB8iF#yc|MGX)gI9yM>ZhwWeEu?BvxoE_ zyq%pcHcqy)Zo>WcQ!ZQjn3_ozGjb| zKhZ)Sj@$s%>}ctCdBV^Km$x+=c<&u7I(dcbYI2Na$_$}df#QKm)gh16zRK~_+t9Nc zT^Xss5Ih2*XKOkI4B?1Q_Pa9O+O;`p*ac<;_1Oj(X}j(I zi@-)=PFWJ2_RfE-v^SKWQ`mo{7OdAFnJ>g30+6^^v*OxX?VCrRTKL*sC>0B3`Qh#L z0KhrUPfk-`)6k3XnWPt8`uLp9Ogqyli4^aoK;3#}w-2{Zx_qQYFWAbH9#I=g)^KMR zf8~yAUj~LXsJIo1=7f36#riZ@rSe{7*no*fK0OhY9ZM zZOdx%$kkx^!9|PdMuFaE&KQ_=WL-H?a&f^$nZ`c7-HL_3N0?^o<#fD`7sT1RTmPy_ z0$-b-wOJfORCA`+#hkpx9rNu}y*oMYx8Z0^uH(|;X17na<7j9uxpwemezkR7d{ubt zlvDKKPSN4a?Hre7yU~IH-14Lr!&m zev9S>uNz3XhHlWz*kFCN4lzqz$U3zOly;ipg|5~QAJ41?7&cmCbtSfpo<*MGQR^94 zVqy}IW;%wgl_3tVpq=!`JB;##$6#gLzClTD0aByW{}K`1diQ^^p8z(LmfO@K8V_CQ z7ii%thMl+>%t=?OM@?$V5e)SnM?qPq8r}K8-ubZ1r_VYP<5g`moWeiR>D?gc1aB^R zM)y~Xn46t!ebu(g5oh1JQB~u1p2$N!Io5&n6VG9T@H72a#a&K1F2yG65AI+Vc`>S= zNdF^9(*{?ahvWu5$HXh$B}*@WI;LJ9x#-u%k-AVh6U(jl!=K)}@NE>X_wm>;&dA^( zFq5Rvh1ivO(E5Ei7aR-JNUrSv5v*ZBPR z&SF>scVF%V-Im5f<>~@m@WyaIV5pDoW^wd#W51+{#;eTn3iXPGUW%O;(&)*V6^rH5 zP`nefT;_+`(;yT| zRn9g^9Ircbyn$+4$HrmIJy1vj|AU^0@G;SJO zOu46a!v?I>nTK1Sb$H2Lp~)e_O_8!-KBEzv z=DJ-VBU8n2HONUWY%5l zbHD%OGpb5Ap0LJ&QRB|A`vy6IZxWAk`=Hg}WA|5G6DE<&`D)Q*c1QH1$gjd&KI z>n%AC`BegEAi_>hZ@q_F>ncL#-~VAAcxfMO_r)xWFSyU{BxN$PwhUrADqq+{;oA#z z*H0^3Qk{f5XuiTe_$iU2pnB_a{Qlb$$&X?lAZl-ze}t^|QxV3Dd7rV3qZAiD$-en@ zq*f`0IEU;EGX4@Q!x+utL^{VJ380Y6le@!_>ao>SgV$Pj4u>D0#)(1@OhaXg3P-n_ z%jNiu8T|IU6B5~uKGw~}bW7?Ac^@wwd;WJ}-0N=(LEruNgW$|a2KX`EdG!+mF6t6?bM|Fh?u{BM$Le_ko`n~=h&$pW! zpU>3_s?{ea|C9-P>g!~|&$xILr!DH|asOB8B=}dYcsbZja(B6sa9+=RT%Nf!$HR4S zZhXt;bnZt!%lGfD53Rt5XjytdBOfdYm(ge{v)$OSPMW987*n-T*cr*XiU**J2;VYB z52kWB25saGGbOM!EFAG}KMo_=fb}I?lFc$z(l>ORy!L~X2rjs{`3hkeVA@BDu>X? zo1KErK<20BJIFSWVgAIci%-oG#+MX7=wFJt;L)oLpW?zhN9VY!zxcTuI3ouJ!_Mc7 zqrt`Qq7GwIMS&WoTJ7mz-)VlovH{n1L7C&?q z5b>fTfc+Z7fdC(UDW$u;B9Qo~U=zwveWOn@ewdy5K+Dv&2Jq!5r}$J3d)_m((UiMY z->mme!`FCM=Y9J}GCLsjiSFWZYdP0MF^)v56eHVkS*D@T$^Ja^}?fgG1jxOzqC9Qg{;%zMpOg!i_z)7Vgy+iZH1(^6?{8Y9KBjS5)-Hwq zc90!D@jYQ_*3rjJ^!58@Hx?0JshTlkJ;11Py4N3 z1?t#l3b-A+@s+Zx0HgOzDfn3;6b)WhanY&2i>#(qstprwJ*1lkVZ-bHzuo~07n(7aPu4oQ% z!)*M+H}rr@8H2pC(M%q0_4qa&jT7*D1y&s$6sbn~=VNVp>KoGfCVaQ#GNI{+5A9qn z`?E%SLjir9(G1cc#BAGl();y9ubgx*DNrke_`7t2RMGZDd2I~iyWPD(qBIdKA{YX6 zZ8DI{L5ehS1El00c%nJD;*@llV|`;i8XRiYC^-8~d#J=?E83fFz-dm5_$au7;@br% z`{=4i;k9s40B&BFW*qlgfz`Me=f>HW2+;}TKG$iLlcMt*Zj(_}$Gzw;t|E`3u_06@ zY82R3*Yi9CANZL*5adnw%AqEijw*h zt?B$&1$1?FYrks{OyFxfU9Krwgm?_VBlx;oPEC3r# zozI=>($UKt&mJ47Oa}L93yvV2pj4^Ca8KDCXjlaH`NnA1-ZKU1zGoekLZ=jsHV=kX zlG9=#a7pgQ=WE(&N8gU-^&{v{8tURz4oSTpP`ct6%)%EQxvPN9BB0t~rrkd6w$yB2 zU>?v`07w;;4Z+>PB0qQ5laK|qjk>SgU~b&6I$47XU+H|CDGhm!cu8okUPz6l`{O}a zhqhn=ib9-%ria7g@Nrvej_YPklgyQxziNO?UO07*BGZAaVKgilGq2(}bH>n; zUsn%HQ|-GV_VSk;EuK5?`9##ktoA^+G2B^kGr{MZI^#G6-U*HR%Opfs%caI! zk8594%~}}L=uqDa&!2Hav1@;w1dM$r48?4(&8T4gCZdDP=A#sPj zs%%Lw)cei-J8gp;%)fwVZE^G&!Bvis7(=kD#*0yXbzSqu9NsaO=hqDr#T#!uZH&{c z4>OY>-1~6zWbBkwQX8_G{hcOP_NqCr;Jtaf_)^geceRFcy?y<)znUznS@3c8jM?-& zzHd9GLFRsK_Tzs9T^{6LL9M<{+iq$4o>Da9E1+5sN>RaN6S zskS8DlJlxJ>v*WVg5@~@i3{Bqb<&Hb1?7#;vhV~%U7KmDms19?(;on7^zHvwKmRAK zC#>K*Ad#!3Ba@lj{-tC$cZsM4!_<0dx*ZqbbEtt2@*55}hbL<|C!kN=zx|D2EiKffQ8{y8Kj zFXvx;F>l>3?s7V@gsWBSSQ+-;uGJG^)D_B#F_ka>55p(5%rDxSBA?S}6q&txh85~Q zDRoQAF=kle(N}%@G;@Ea*y9~IRYI{}?NP&y1o{2gFdi;A+_4<={ z>rd*niNQnC{#tTQtxv!@*W7E|jA-ix#H9&MCxXYSCW`~UWLmk|bF9Nz!=p@U7myp| z)a$)Yxz8>T-{a3~FX60+pVU%o#l>2Kx`sp4rQ>$+{`T4Hb*x2qkMjBJ(oXA3E0*iu zVOrwq4%q(7G%ek3VLenvQRqS)s+QziQP(?hGwN~$m5vjsm5{py(^C>8_$5wAO##;Y zj9A_~wcBek58{A9KC8BbJM?>Z8|j>DrtnWsiKr`jkvqm*Yba|jTkA_cw5xs_n>H+| zeVpR=PIN9`25CJ^H;1U^90@(xhy0ltd!3w_W8MY=+vk?Un4>xkR?H4(BqY4QxBKKd*_I%&32ghwZcm;F#zu#mcxJpL?U;dx^U6PHnL<;?pEBxqavxrL5~91y8w{puapX@ZLbICX`RYAGP7JfQy~L zF?lx`OSg)i+nu1SL{#{!VQqodDWRz@%d|1|s_5qe^{c)EFMm&1zSAC8sP(Ui4i=#p zhohM(G`#m@7~P`6FL&`GN$PE}oAvpDG!@*;>k_blW6Ba=SgYJ}n2YOXf%(=ue`n{X zY?0C?3KFB6M|0XM(qo?OJ}X{wu}BcM~x&2qrqj< zu7cjRU+!3~)Hh~azTbN3^v`;imoK=zQm&Q#qONxxTC^K8yEDWl6~xDCY|jqa-eIiW zelXL@$(PW>loa~-#WCrNXQ`yUS*jtW#H1cQt~|`_r_rT)!!M*=70c5`%{=m!5fTb| z+(vk`7n$GpO(Ih&k>LG>7?0q6qAG*)kISS?_bSn=e9(X9-=f8V( z_BfYS)_H`1H|;KCB3O`;5gvwy;fY+WE$rj3OI83(zgMni>g1#3?|j>o)wE4vW# z`=Y0>XL(1HoT#@#o1q@bJb5pO^YK0D!i-71X|;Wgu9=eQxz3M_^NeZh@GfX%8Yb)+ zRfBT(4wB8CHGkdWFk|TLo}rXaUEJ!u%=?A1<>yTAy*l^u)g>1G=Wx2>(RWQ2O8TO7 zlqMG*X0I}Lx3w<8W(`&6v&xEes00c%*R`&q*Zcu!x zFV_1gxu9~96&Fl{(&@e>KBNmt)=TE zhK;D49ynDt;4{*{*FW18cWQ2}JhtZLiL2dWl_j@yO_wato<~7R$<4Qto7Njj-qqCB zehFT=*~wu0%OnPUkEyGBOY!XtkW0pdqoH|j+6o3sNfmuHi zyRXRKYo?t+ySJKkA^6HH)xv~q5sr`}h@J!7$ahE&DXNu7eE(;7?ln1^4(0Wf*AbBt zr`NL37jA+s4Sni2joy=|P47S0OWk$Ec_aWqm>E{ns!gEZ2d<>@qvsEhp0QjORA2HK zgiLym_8>Ha2`yi|gV@^-Uz!1LDwo_U&}Y)cwb^!HvI`DEWWT6kKtWSvxpXNNNQ``rTat| z`jtIp#%<(iglDMT7komycl{ut$f>7-gK9<|UbF!0g)q@@_3%janFZ7wu)A{rL75>B zD27KnY8JkVt1)(W4xa!f{*zv<$6nDQrdW=CSp1Oyk_O|0K~(WBRqb=s*c|G9`!bYj zxZ%xeXid5|y7QOm`$PFlWBK*(t!y4n8n|*AUYD(gG55v~SP$!-?laECq&72XpS@E0|efMQxMkncB>LkP$)6_C)ZF(U&O8nQ z=gfOG<13#p-{w}%wEH=FKX22UWzJ&>IkmXxnYCyfsn((f&}+4?u3|VDm-u(6vT#6D z9yQ~BRo=2F!HFW~_YY5qaSEE7 zyczAnSY7b8w^i|H??j#$Ca?ob6VF?5la{dW8^e=hI?pBD zB;MDeOG{bi?&#ZG(6*uYhO5X)JS|kS!9n`>8W8|{r%%Wn1AO)$6 zFOw_%LIJCRg$l*lM-_-O--1U!(51$9y?@c2_GF^h|H%3b^Tt*BBbypOT+~&HJRz&M za*g!@cae6wodKX$I6Wtd9m5A_JLL}_eReAF3n8Xnhlq-uai(!VZ~VZPUA7RHmNjc! zm@J!k1S|8syh#IklTVKQ*Ley?_Z#PMoYhu4| zl++lg^WMVWy>RBo)ddii>j#J%IO2eNfQTA7JYwg(K%U{<$D_OHf&Ci1u_xmsQ`D{s zJh>c4xPDqXYI~S^1=qfw6@{!y$^AOxnnaB!9`1*Cc4hEc~*Uc5Qsc&E-5h?c( zF(=KX-+1(5+(03jmnRw82q>nCoKjXw4YpPKp`P6Nh1ao@z+ZD@#|WgkqMm6)h8EvH zXC?VI@^t$*32*Br505>&&5B-I6sia&Z{%1$X+)DqO~>qxts>6>!(=wJ$ATKgD0Y#= z>^{#QM^xVbwNcw|wZZv&n&XmE?x&8J(fip-iMIC@bzS@d_u8ojgw>s!I~7q-Ht$=S zhTf7XaVeRSRiA6!7NTYvg`z#)?^it+G6sz$AFh$g|MANMZ73_Y}oj7uY z2NzXZ4;}J^Jh%DTyJFabaAi|o+CwNJw|)yol)#Sl3Kl(H;7s6D3%*Ie@M|e#?_J9% zTDn*@pCB5U$%?5>n>75;|7`~NCO!Qu9aFq~FCu@$#peB0d423uG5GUUV?&r{mq&+^7P61muHnt3}%~ zJm=oj`7EB$x_St>@0qFLgmd$p-zmsY650%YGF9=<#9=At8i(%10s#qEo|w1hj~-Rp zoMJZCwCG?kQzgsX8V6V2BA^w)BeA9Z6wVcBywOkk)%@YFw&B054`)maoo%m2$- zo7YaUUAwC70X={m6f(oGLzRs1K9=UInTF%B|GSSRyoTRzV8i&s2O&R_*M;^M0jHlg^C)t8FGthY>#$R zWb7Kv<KmGN>6^(;Mlvp z3L(Aj9S^(gwRxVL@2DH)es_D&U$mVx?c0GoxjX!}MQUQW0}~O<BF=EAN=gQmb9EdvCm zgne){PkyX?c3`_}pyXPL#go%~64wc3pO(KDN~AWk$gGZBvEG{t9HgOOuFXp$dl&HX zXZ%_`k+Ze@g+mAa8CE(K%Z3u=zg=aDpb6We!G10sDRwu=^I0XUsjR+*?sX&c)<$37 zDnGvR`o(D$W_``L-GGMS_k1Z9xU*>WL(lkceu2h}p|^57P3tao4Py?LZKdo&^uC@` zI4b+e7{Nd5#F{@yt;MU?EF;IF+@vPzTH?!UFoCYXk;!uNKS)FWcII2W^DEq&|3#Oh z_>8s60Xc-k<=SG%JP-ly(nOw2{$`EsJ@;}b=CF}yGkfPw4@b`j1p2zjzTJ&Q605s! z77Ep_^-NfuVJp_&$`Gq+z%uCFA(Wz{j6V#ZZ(W%W#Cba^3FUIvovg2M|W7))Kudl7JliS$4K9%gXYcDi7 zF0R%W^9P9T_))g!AK*e3jOo ziV_K-QU0v_c`^;$wTKmh=vgZG?onln8kD+ic$B@-Rb8_BYL!of6-7Y@c<(m4PMBzH zjxeDTCY~gmd1>>!`!+McniSojixLLmcg9sJ&LUopDEDg0)@2G)a3SH5Nc`pZO~QKt zq4|0DcdfNP7==HIa?QX#TB}G-mii)wgFyc>9rMJlHYaE0_|EmI`q-v2W_+E>2iNN6 zCmJ;>E(XtI;bGdx3p<*ne~4Z{*y4o(S!alLD_}tzF4t3o^BUje?a|Gs4})Btii&Mj z=Q^gOe-Gy)gsAC7^e5z{w6OdIB#$3A$>e-plXkl7q)GBQN#pNxvtRAJ!kwOnY%QLo zf?||${|9?-9?s_e_xoC%TUABT8rvFMQ`J;s+A2z#DvBDjYN#QN6h#oyR%;%LVwIAb zikfOnO^I0*RdXc>QPdDg3=tCPxz}_3_Ves#pL6#0?0wGp<6PJJBUgeT`R2aA_h)#2 zUhilUA80lmFYs8;+@o^US!qlUL{@;y>LwUm+s?KbzzsM0o5SEDADv8n{#4>OE<5+h zLeh`7kgdQ?WI`c{Ms82*V(cFLS#s>^v2sWF09pkQHKY^R+iK{OBC7*vR!}-AjMzA| z^&PMoMot6Soxc8R zZosPDcD2GD?V(fg*2M?l;GZ^JvM1*CiQ0>QV9c4NKtN<@N0=))sTD(1=(I67NEZ|7 z>2#84pErt}zn&v*WidI|r*=}cdnm?fuHkC&_2Y>T&$psRK2($|iHub`*oCmcV7AtZ z*VpX3)-}X2U9IJhDJ?nm%l>OnVN?iBs{=3zU6v4@X!e-X7wE*DzpUPJ5oi}<>v5xT znq3Kc zJrHMhhVl(v8L;9Hem-u|=g}J6LK^*SBvYTP)}4RdB1zz!bwtPzHvK>uz!*~vVZ_{xFKi?i-pUa zVhOjRYvrDWUt$^pnvzI8#2hc*FA=rdz@b~Xs=1RMs3dY+46Nv5d9~P3yz|e~=4Wzv z_jB2Q0K~%)B;cYu7_mLb<1oc-8UP2`)i+edx>($TT-Cn*^Gk%6c3-7f?5-}OhsiS! z5@Y|#?DCzPR_VIpRlS^ZVDx9INp0M>vH6j0Cu1PHHy9EnIyx3Mwxiw(c97*KZwDN~ zM&tO=?L^wqPPpZ_rTLzur3sTL^{ieLY?kG8LdjS@z;gjfu1UIE)%d1E;ES`@dDX|M z-nWU;$95nL0AOF4@6!jjS(90B0t^X?KH9hJ3!B$)#MyUfq%P`lhgFUM{YVTs?8I7Q zTZxzOkTc<~MeG$jmq*5g)`*CZn*-H%D@ zU3g5HLW))+0n+*Nr!BgcIh&m!uP_u9x+sSae+cSjDAOelB8jtkX`Bv+ z#))S4IS4@6jZ0xA(|9bKcj3OJ#z?s z!ns#nb8i@so|tFPnM$WwqSg9bV$PJcYFfJjCBFFuZnyyX=o*V=ZcGc~Bn6?#P6xYU zfwO*=CP7Cs9I9;x%#&2zoTbKY1!&J@C8XNkfW!{$Ke|U+0;X7;KB&JYnT)ZUhf= z6ef9@PEN9L_0SD!R(S#C*N2I_bTbB8I21}j9RIhEDvYeJV)7k#5h-jxw%sRH;#IFH zvRyv#E!UenLQl2eRYCOGpNB^UziR1;WVAtRGdl1w&Wah=X{02*b7b)l?lYr5N1hJ& z5Z38Rj#AQ#@>8E82yvpi86=$8iE02h%weXw=UJgJP_Jd{s2D1m)2_mejAJ+ z{`#onM>SWe%)7GsMS0K*7R#gCk!pNnVtyaE#T1tkz905qE5~ z4_s=Dk1&>^8yW+T#+n|v<<^O+>p6N*qtGq?+x$>1Zii#a9?#M&JX88HOcL5O6j09? z2^*#e0C|yZ@T|EYGQESW@**HixQ$Ppu>CEooG|?%?HNh2TkE2x?t{aR`Hca1@LC(| zwwGibv~^#uXHO|%F$)mIZV<{B7GCw$dUt_^Yd(K|>33G}D#F+Xz!DpwHs|GkGWW@= z`c|!+gY=BZr_`ft&52qih=%z|r(Xyu$F>8L%bIiue^_ZBQabGW@e7cTe7$cx#>#8= z0YxYc(g)TB9qS^4_g;`A5c*)4tu(K4f|+4OTYDjH zGiWwePL&%GOTSlB;4>iLF7~ih+h$8+cb|T+4X4S>C6ms9==H4Y`TZnK;%@Hlih)pM@Y`-!Eu3b=?FYJ=N`pl7`YCjABV zfA}i{19g?Zxl+;0QzbBjJAfBnY9$>^HAjdr2itRao$Rd+$Bb`>hUqzfQGF9P5HQmr z^{V%0$Os!o?`wnd)U|-_(1qjml-_&WH-9HSAb8uC3DwN>sp)ixnMy?lCg;DFzXv|^ zr&BX`8J7?g;<+xSBzg!*4lk6=B)&VWK^>?VDIo`;i-&`lr?&!%03mh%5$-j_! z(2+Aqmx%K!fcO{Nzl9_69dg}1K6*=TY>2f?&cCf4VEN^8eFm+=ikVD@pqvnMJRyB; zGcwGU56CFj^>40? zN8@;RD)m~*kal1^ru3rm&7d+6sSS;+Ps+5c~k&P`$w!JS5=rje6Bp zV&<=I!J55$hY1S8tRMi0iV>A$^B_1HCX97JH)@~>Vv3O1-p@3P%b=8LFbDM*P1C?L z$0Ui38EobcfV%)g(?4<%@~Y6-0F_-jpkrZua>+bg>g@0EMt;X;RnECz73;%i`e;`}16ZM2P zk5)oc=gqT3f!D>Wu2uK(wHyu`LORzE!3!+S$HE zF%&L15B*fsi4kI3F~x(5kuwaSB-m>2FIl-!S+hj#J^bo1u_!W^o|oSEoIUaqg1WIl&KhEov+MCoMFXW!&J^E5Ya zN^Ok&0H=H?r~2(ehde7c79AV|QQs88JtS=^^R{bddd9YFzoF|rC~9QTAuof_@YtuLz&zNmqLIiobrxi#px^q-(Ud*hp zIvVx6Cw}*bYhvV|sFq zFozz}<~tfDkxqG0Z;TP;~&}+y-C9_E<9nkH%;tT5;fYzc8TzM{z&w1R;Jt87bQ&p4(slW(!Xjoe^cH=+fxb$%u4tfV^l&Z= zhf5$+crK6JZ5pXPmOJ_|)vTrwyN*zv6dDYNWK_ZOgAC#gQ)Cqu?}zFj<*sG-`;^+$oW|GO3A6UtC8e^f&- zAVJ!7FHav($x2CD{LNLAOWm>sDAk8KD(vecvP>B=UVz!PJq?f3Q0>cFid+-EA5fHv}2AFP#pA6~Wk)ik~C3goO}|r|hOZPtN@JUzKs7 zxev|0WYFX)!@qg7*^8{i*BmrAKGqB=Wtv~F8*4TS(y?p*qO?V-o)+*KzB8cynqayB ze<>i+;Jqina03t}mC@)!dg7(t9fqS+6{RA`U54n-!#Q$D@{`w!$>$_Js1|M(0@Qn= zqDJ?Vqzi=^PWZ~EQCp^M0D5(=YI)1HKl~swiGH*dQ+MoFzlTVotGrVZ~| zXD7q_*;J_=y`~^AY7en$r81L3@9RYKhM#8| zw&w`YaW_5GBR_snj~)9XF8Alr;vuLk%4xqE zcM;|+F;q8r6zS64(Yk}?Q%^d9Zoi&cJy>jhc6{~|&f`=1=tcW4?Td%r%6TRJD&RZs zLdO7*z{i8p;iAKANCmU0y`E6?OdS(Vz`Xi75m_oGl2(pqH2om-3cd`SajgGT(;=49 z`y}?q(E z9wgc#qN5SiF<^UVEOU5<5ZE+YX9^#vC&oT)3D}p!B)s^EIO#oxhrZQVMip zYg^c+39x*ed;g!>@Rj2G%^XDlo)Wb-RLlg7V|^!-0>Xr5&gR}00l&dm*S>gQJGlSd zODgTV+UYa6AZ4vnz}z;x1<_W`BpT79o;Vp^*m%ABsA`g@@i+K74F-@L`4=?8Oo@lt>4o?W9>C zW4RB2)GC8G04ITg9`mot6bH_UiP=h~UCJbn`P^sPl*9$Z$uHH&l^Kv=SfLNDdqg?j zr5C%oJIzQ^@6>DKJ8QLuK4hTH%$iq8L_s9k7wsRV&Z(U8p4dA(x-cODUR^DAbw^>v;>!fu=12DXBwGtBXj@Fw?ci#z9r98B| z_lT|(9feu+8fkw3*W#0f0D>w1uWszBB&dcLF!i+ypD=AB8cuD2Vp#T;{fU8wq=6M`xGn@hR}E^3gU zhf}88_UH#LF>;xua|5P)hm|FK0}(LeNJvLGJ!Ss@xq9Y)X31E zld7`AhZQ#xhNADd*%!)8u(S5{5$~t$16N_YTgwY!Au>T#+cJV1QQbh(fV0CmJcg70 z1(e|qz?=nWjNZUZboa|T+wyh29H#_Dx{vfN+k>(Ld%A5#t_Q_%-eqGe3O zwvv79JX!#`xWbnC(l}ne^~h3zw}1yF9r|M@KFAn_XL!|C-4k@Jn-q= z)u|)(8^;dy)>4lVpG$`DWwJ~)Hcj^e#-I@A-cKd#ckiLyYdMfgC;Jh6sY%5U^r{z{ zb`N3**)P)5rxCj(L})fiACbB1^VpH6zqurCd_*RhsM__0@{QL1#9CwR&d1=86>>&_ z*Uv>9Evt-_#O`z^#oa@mT*e=LdQB3Ll@`(EqHvS*wu#sB>oxJ7U~*%qI#*obm0B?9 z?VFiT>+sm+(k;>^ngwG;Nt1y|_DZHiXuyxX_SoH|Hc4z!9PZkbXCUyYbI$&N39QT< z89^ZwGY4Z&Wx%|#ep8)~v4sWeBT-mg-gGJ7MIq1n;#A)IK$|IT*+2|)pWd}FnvOft zL^Fx3g8)r-k(svg041>HsM3k4DY5A5p1F2*+4(UKlUw!H8;rUp_fXsRL1XIWO$w7= z2N+^Z=U!Wz{%*Ww*nWuR9kf1sL%g7>&R7aLLXAUkt zwOT~r4i;L@!=`H*JRYBW8+*xx2Rve1SGfSs!r#hC*b33VozzSbXKdnOK``rS@6ay6 zO>`?YmUKE?Iedx(!hRl8oMpPtg^AutHLI#>i8R8)eh@s@WlcspS(67PQz(}D(RvL* zHD&1f3<{+rygMQEqxXy$?M}E*RW$fy=0wu@;Q$QZp<_EzW}h}>gdzN2^4(IeQ_o*M zbIDY!rZH}MYqh0rjr~Gme^+BaOc!Hj0aXJm6Pdfax+`#g^4?It4lSsAn)?!<-Z<7)YE)oE=J8trot-i*@=AvUs2?)CFp_S%L=s8BjHh%`Y_sJ1Y;ZS@rNGEOJ zYO)wD`OW3~AI$5AZVst80>L*lXgiSC0h)*H1p@KkTs9_0X~MH(gYEjFjv3bDww(qt zbmvmpy7Cp(Np5+$&z^a&Y|d&m#GajdadybwRFdz-w>7YYtI2*GO52xa(#qkX^Dywm zTF;NL#7%CG*YWZ?9&c{Ac=c%Y=foR-Ed&spBG2wkR1F!L688C_GT13@Nb_$l@xcR3 zeE>_d#0;8Md6j_^px;e)rR(1POqa+f%iDGhnO4ZW%dqADlBa=7nTLHettznmV8biL zvp$*BgQ*f+#QKuUc{^qlt7(HB=;$LP4!=3C$@{XAw8R-vyNjP11TNZ}Xw)^U>NE@d zc|`TEx77yE^D^POl`8GTok_$G9nu(^*o1{c4VNkjlAPmRv(&_nd!Hk0>6K9$`mT;6 zbxpg9%}(Vq*&PJ)$4f%KGd(^j>NdS1UyDU9@=Yw>a6%`cT|lqUr*r9I6V69zV--5X(*XTF~m#}V%JLmwSkeDv*zzjL{fOhK?s9OnQu*MZuer9E;^U!taOX+fj zfW_je%GS!rd%q+Jl7tD_J(gt?PLq5v$TuiRW3=KP|ItBJ@z4_#z;@QHDZJu0S5Dpn zcy9x{klTT}%vAZ!b)t`av=b7<0#oob4D89Ogvlfu|0y_7s6O18($haUiCu5sXS>F~ zMbDWRV8jAIXZw&caX{Bwbq0Ju`x#AbfCgx7vi@8 zxM3@kXl9Ec6%4jW3ft1-C1917w2k=#8PRrc)mba4(}17pm{Rmoy>rN@Z~?a(RF^=l zXkHRF=P66M6?v_^ZKj`W+$OHonKbEY#3agQ6f^60oDHOg%hnZLM)fqv;?NGSg*(5# zMe2gP6bpKUZYA!jCT1Tkwy?G$F}Fz*4kRaP>4dMzbO?~hxGqwoBtL~$(FEoOJHVhn zkPKar07`#Imd4JEihkOc?bl;dhxrm5;h?eRfAdy7UHzu+>tyAhKfc-`KA=u91^sD; zt@h#1kJM+r@tgJ*NpA|!c$*kz#$W_1yQlM~9IiLlu{(C>_D#6cq~#J|^{cJz1g>0J z=h%)Dj}X!3u-zuFFv^FX7-SH`o~}q(dR5+RJ5OSoHY?03B!|9lRbPz@^Y%(1ICzpQ zMn%@m>#BS7UcPxDgESg$7ermH?e{-J*M%z-+ixi~^W8v}NTw_fkx=lSEK~GUE))h`a z0Ch!sI2|?nzQBy5QJscdnp0R0vN)#|h+$C294`@vtQh6HRnjhG+ea>(8y4>loj8#6 zzBsR>eoL_KGmscY{#SNL!5(JOoH<(>f38`EOvUbkXmNHcni#hYt*}xG+G7{HE*cmt zuK8}Ak{Ej8l15nTZcQiXQ&Ehv*U@W5)R3VRk!P9u5RFTZ6P6oJ zz$JX8E=C`!N;jWr_H+pXKuw?U(Y_ynbe9-KK|;1c>VP1F))2tl%|Qq=2Dm>i3E=Y$=+1yPk2J~g_yMZH*Pwlq zt_0_JFoH4wm55cuTuv4(LemhyfpQt5;#AK< zGol#d_+nUAbCNpn#*Eny%#tEwq}{+hVLr@WLAYXV8m<2P4*<#H9+iA7qf!0)PY zQvSz!&oxPc|Li+_tx21cZTmf#%Oq$enHd*X*ab!#6sTO$Yof3$=~S)7RDB$y_6)fKI0O z#LRGdFz)7&B8gFCl{KgkN~@}FSkwm0vs(Vch`*q|rfX4UeX3%i52IKk_;azuly!VL zq^KP)frMF(ODrOUfUU4wBru<+GTC>I)f-z2;X7rDjNPYM`PC?&5pdo#68QS5W@$01 zCv;_RgH(~QQEr_*w$m^oq4kZN-{({$lo^;XV&!j7U|7P7XTDPG2lC}w8}AmqXKLN4 z9d_+*6vq3T+$m< zdqS*P`-@n+zNwSYyrX`v)*Bpv?o$8Fb)@49tpx939+Sh%9Gj<}VM>vYK7U%uD+#st z78Vj&df`)NS1$9Sn_Ex%`$~Fi>9K=<_Pl-&pZS9>`L|?#$+?Ptf0_H!-8 zd&Gh^{VjKHwI?Bad~v+fn-A=z=@#Ik>~<>aV5EFJuE|Kc4A>9mB8fiKJx&?2YCp+U zvRXJEC!BQp+fI&l{rIW;a??kJHk($#g`YEZ-QBtQ`*hdh!f(DhJXyW;Lp_vttz33| zBIqr{(^Bb2H|71wd0MHuwG#&#*&ae&4tZ;(OTMY*bVbkHgL4>3(2A$2h z{0jBw4q1}I9d_Q>>IMsxzNhoZvRzFTmMcrX#d7enKJGkWq-^~)e@Gf#>?|vIF9BfN|#_GQvBC#DtX z&kcMn8`z=4e{=1-20Mgz?HHhT@ksa*!L!uQXJ?fI3AaQCYmKk&t?pq2*$Vr~;c{$2 z=H|mW{9zt()tmBQx|$u6YDeo3&c{OXIkBV(;YQ=OedcFMqN<*D)8K zoRp7f@8B<^BYSvhQEeQ(@5crhl?lzwaH z=CyLTIvSX8cJ*S&XT>~8adiB)(SUfHIsa(%dR6Ys;L>ldGiW#S)66D2dRI{tJNRf6 zN|J7r#KCtWt=S@&wum1X)|?741HoAfm&=v z&nK}3YHXOLWo$=aoUxYo)H41YoTt79iINmwiq5rg7q50OD%NN(`qB1EtevqoYkI}h z)x%V3FC|uas$p-Hxqjw1SKyn6)!4bJ*&NON7->4TqcSl>Z00f_gkCYO8`LQB$T+31 z@J3Pk@kP##EU%hqswiVAq33(JKASgc9@9QDw^=gniDhJHX69skbTF=z%?|UrYK}1I z-gUE1(U=x}vSN2vEpxp%w~6?bqyYCB|8?9>e#;(}ox0uVWG*}o^1w)-z_e2}g~%nc za_Yyy;_2lY`wvNT=(PcZHYMfx25BRi{>|pke#w5sqk0T%Lk|Nw#3pKK&a`NWtp55q)&yj{TGKn>h}{`q77 ztQi;XpF`uH)9IgG2 zK9u--WD;b;XZxI<;M_H~Ny*f}~xT1IS5nOQ*CuU_32#;yDwPfOG+ zU;I+-P<1@x{>J>%u%Xi6Ch)B(-ZgU;m~8{Vv|+6_&KKYU7POfvT0Vp>vpqpPq~%9~ zNGVK(<>+ca`d4fE1P)Gs-6NBZ~1G);o1e9+s#0{KAx&gTO%8vhA*S z*mEP)0$pLgs4GmEF*<>gnoZ&XAT&d3DDEN{#&s+pZ3wQU?1me?=%>s-P7cbvA9+6c z&Bn9Hn}g?i{z5`IC$!%qShhe10G$@3K8ZR-Oh3m z?IA|EtPe1LLSD-c?3=eY)sIDgYU-^wek5v_WIBgo$`4F*3)2oKb)b)XI;)JaeTC|) z&1RGm#U<~29(J!!M9ml;S_}==+i*!g`!?&!dd$Hu-}}P=13~J}<2|_#3*Sx&ieK`{ zf&y(xU8ew;gQSIp<53_B@8gKb&5lLI5Y6EH+v^B*;=bNgTv|>k;6rotgtXW{jEz@HO#aIig6`)nNLJat27#M*;tZo?$=i#jCfyUPhPdsbh zje0e<@cZq`Z-(2j#&$GcoiqEGUxQakTOa3CWlXUoT`ZuYNGnDubJjqP;FX>uNSlb2 zO`0=KCO7Tt%y;Isx6iDAvwkKIuRYM)FxT@ntXDhG{z3cdubXef^O;I?%Z_ej(i;Nt5=CHAJY(4I_O;VkudYx)gmlI4i&$q^txmaH>9 z^6}%@H$)Fa&0;dvLo&phdvI?XUXV`Nb@~`$G`L4)N)y8}Lglut1vicHfJP&+>oME# z1N$0w3@5r0u2Dxb%Bjsc?^!2l0I^V?M95UboMJp{cH7SRNSL1JV%6Gl_cVYgEk9A0 zKhw3?Qs*`dWK}vUYtWwiYpW#%`!(n^&P3LNYyH4)uAaNc2h&U_x+*raG><3I?&+J%f_l)rOlW7g2+bH%#Kd&kga~EBRFeLbP;81^ zSz1f>R$V?YRZ4if`=xR7(Dj;&)wSUA+0O>&Ib%WuQfw_XhCuBommoeEeVV`x9#SvA zx*!WyD1nQR_o?ur6yp?6rx({5b1w1?DsL|tZzSp2WbUtgo55{xQjb^I_9^}5`u3aa z=Qhy?I4ExpIR~+nQFf!8tEh`{78CF_c(dULZ~MqsrRC89wJ96z8!+vHm)egW6d>=! zmi2$FI8$@ll#YqS)M>>Bpa}%sX>-fk)Y+XRjWBTAjKFin7cIEL58daAf*Fw@?-U;E z`>L1fzmYr!qVAer!!4_@Ag}MgP1x?4otwHaT1k-FAIj z@)^+aVT0z-d`wuINH~U!=Ck`{A5ezVe}=4H7cIq98x{8yaQjtydn{dC?dLntANzIa z(xIikK1L>Z0B4giEsr+|k1y$J>jkgPaBSe9hOSEJ{V**f)HIEo(K=eGhXyV&q_`nB z?AUhFIpypM_2e!wZ~=_>#DiL}NPOH?aW_S~SIte&&sS}hdobphX{F4F&Y6o&r}~U& z($FJI^y#!(5rE3#-P$?TEbuDhF0ykyx$~soIjJP7;Oq69=@pj(@Lz}C)KLPCJK$C! zW(-S4O5qqdV{Fq{1og9$SkWj6vv5`bU^=i)Jb$>-%rA}vO~-qNkG7b9DykATyc&ZD zg@rIwoob9cA0F3lc0uy}6e!4=Zf|e9>Su5uoIptG8BDMzMQxFIkWYT?ohk_{SdlP^ z%ggA@6eWVyFB#+))XKvtOQAsvE>aX% zD+6d&S11+ziWO(H* zH7RLdjsClq)&e~5@i*u&#zGxUqrNU^4)DVQ#ck~i+#K320{kg&`rIuEQKFoWlfPeM zTy19h@Y%()ompwU*P1{~_zs2E1Pv^!yP!UtGD%sYQAlK4N?1tFwh?NAEJ@hx!kldO ztys>Hqt!JrKPd4U!gV|Lw4zgX?lj^@>%glDPaWQt!9U#DRjnQV?0)O0o6PICpOcb6 z*r-nY38odhsE1pQcPMc zM7~m!TWmv7>lrKA>GeS>X`6ofKmnq++~XG&MhRtjOg^>kA=N@DxpeamG&fG_*EsGB z4gZQGjg*BPSj$2P^rDL(A69G=4uHiryuQx(BIRP{J&&{+mc>6&m_WmMV+f>n%%q$x zogWs+IX+gN_%0))u=$gtQGVG(I^FShiqlOO_gg7<^ghjVsowbRq3zezyTxyt5(Qn| z+qBQ0l&?(Y@NtIiT~KJ+%-cB?f(%FR7j``4B}bMyM!rqA%PL&>DtJ;*x=3$;Tp zO;izTgEB{4Tuo^voD)uorDhKT}gRbFNQWx{YZQ(*xgfuUJ8p(Rj4bWkUN zDWOp?K*Rf#r{!vfFiw*GSZA8^W+?CLQ_9``j)RjcN3@_*x!Hm#*1=ZC+ygisr_rST%zf$E7UaC7Z zRa@P(HNnPg4Ozscng#?qH=;AQScB#Al}BhG3c8|a9?J6r34neG<}Ydo&;7FHoFAgj z(z#a-U#tUrL0SkJWePmKFM_2niGF?N0FF6(a^mf(B+aHpx$iEmUj;@Zw&Tu^qcpt8 zeJ#2@(9?OeVdA8-I^HezxWu@j@6(}9=i3b9WS{H9?A8pGfJy2u%7MXjhf!S~%4iIT zW7+jox>C~*mQd_&HHkqT#c6t-9;5}e+u&4R=_$a;*_ICb@Ta|sxlNm|>RLWMkc(Ye z+s~PoAMQ9dDdExiJTl{N^`LI&J#?E+xH#}e?t5xrM3|Tk`vXyp@eXZ4rQSEkXJp^H z+>?r)n#x5h8IMiZJ~?dpGBYi`q|m3lw^sp0W@nF8XjCfUCfGcH>xRr?*g+$d?JPA8 zFV-wRN3kV;s4SaeCe5v59tM{~#QQT{2u^kmrmWvwvcsbCDvHv`v4uL`u;L_T&BXb~ z71b&Pi`%jZcEL7W5i6Ii-<=un7azfHFCicXTRQ(08s7g8p2K?{P>`@dNGzGRTjd~g zzAaptMvc@+I`U&B(>KnZHboe#`)S+#y^1JE$(OoNcUJd@_)?<6>rwQ>FqrkQ%)}!) zF4N$0-@GV7Bs&nqdu@m_hVa_Qh)GUqM;Q}L-jXSs4klbVLC`^U zO-zhr6(coZzVaD~7p0yf7k8KWXf>#eG-cNh-xin9ui4Lpb)0@-S2X%~O&V#@K{0X3 zJ;giz^nQoZR9=;S1vTOl09F!JDv9_n*T)mYbkFCQh_ida_l@HsCl`43XzFf5FpsH`3lmi5f zF8YYpz3rlyX5slbanWv@5Nxz^_*jW2Pw_G~T?F@jV#99GJL6uHx@EN4oz!lBQFpU1 zy-qgISz53tGNyximYLc;K-NdJWj?BL4Fp=Ge0Dv>2Kh1tn8pXh9X>+_JUU_NwnYZ2 z;_Ej~lhN@>=|=bhjug6Ezav(#pk=X6L=50pf0m`kNQAMp*~cZha6(f|_d4UTSKsQ& zycZY#)GW)tH|m2xeL7fm1XTNYN_26uiTfR|&gcCkU&@tuVo>u_?Zx>hl|3 zvbdiKVa=nX)Q>^CGv=G`Z~*WI0qEsevMV`<=&q}Ptg=ia!3_P!59CE?mFJ-AA3~|q zU$B=eebspS{64xW2FKU0X^yQJ@P>c0H}4=#Lfi2t>PAPJUGqI9L~CdZv-pwkL~nYV z&+Dp`>As4I$&{C$&UKsHZ`og7&{B5ej8_iYfxh{%*lAVq_u)S2;Gg-DUsa*Xly?SM zG&v)t2QBUa4WN&ybU=B=8Qe)#*;2P6MZuyaR-O%--~UScAzqO1)xlHr6>=sYX!>E8 zU;q;{REs!*Gy!}f=|z#k<`@%tfwNeBn6oHR`(ldj+rp%;>Hbnitncnnb=?=?-g|zr zrgh5hILxjRWe2)fEs?&kT#>CYv(E_+o1|kY!Yp~@&K&6#TfdMA>KtA{^QMy1Uy(Iw zW7x=<`TJPAI#y^?9c=8cq)$dt1HRa`x%m?Z@4DVBs+z$6i8<|UpS_sjML*Hq*J{Pw zn;?tXTOknxqbb`O*EG(R&+Jfch!9Nk-xLe2UOXpoRVUYE&n5P0!E#|=W7-J75HMir z_=Y4xdhLLCfCAewtu*|(iebvm)K?aJF(mY9>&bJggW@;lcQkWOBm|V(FqG^x1mi4l zS~5QQj_S89kGbFb^vL-B(~J^kHtPc0Fv)yki}VU4RE`r{Hn=cKa@?TmsqeLPC!nQg zP=jvE!H-{@bDx%e?b!1qez>>Qc%x_N%zgWzdq9#IOX5r?O-24B!nXmhcOX^+we0Aj zXC>Em$$!iBBao+{!d@BSinmq9^sJ5~1Dc!lMbk%GoAz}b0%~9d(~D(ocD=-^+t#z& zl1yo!H|r!Y%Sgyasz^ff6p#7HU>#Gn2h%lBWg~!|&I;6;YXqxV)P? zC9r8b^2XZVz$XBgtC=A7oVThHoXavZpaB=KQ##ddz&p?J68T2Xa^2$J#AYU>_3} z35c8 zy3-LBfVOhJ$w{qULVA?4-4be&dP7)i!q(T`(7O*2IItg-;%(Ojz2dH`*5+SLF6&>$_W(641$s?~NQnJP4KlPdTpSN^?bz$T zqSWD)QJf^wbc>`|rS4}cmYh;JpVnTjIpMq>>%_lC-JJQ&6>JM=##GYBx3GpCDj;`W z0k&gA=W)6NS(q)Y**F-r-mE3`b`GwLIJF%3eQN$&1JbRrDY$}TeO#)y`U+n0;oC_- zgAJ`F%Ej|r3;btF*?L&=VmS+BM%JI9K z;i3BDrH>xo6?-#(mlYmM3QC`-`Gs0#IkFFv&}2+>j7p3TH8CUC{)fXao%5sAr=jIq zmJLmD_f7|YobWAmIw(^MTWq$tU9}!`Pp@Y#V{M3xCt#q=d;o65jIxYX5eB`?s~N3m z77UvEOk@dLr0?CH9jr<$I90+?2#>lj$*y{ci;oiO z;Riw83)wce8B^Cg|MD^L7wNrv#{Kp4G@2H}2k1w)6|3`}LbngU*qmE>2`3DijpWh# zePL=2ijNdLRaAcFJXpMauW~@Jj9=I2oQG7uoql61%*Y+f2JJQlHr205RQ#>i!7WTW zEC7Z7*>`?y3wmH_Dch26{G6O^c#l>`dYN_qyPkZG__zi)?72wo#17c^N<*e9zq-q{ z*+?yqhr;p#HQ4I{#ErA zRj$_U6@yBBf04nY%menWp_O#RJ`Du&2}=2X=avge1#`(>V^R1GOsg zw%O`XzQy?Gg8zuJsmJoFr2f>;{&|C&>u}ebohxFgHQ!GDA%A%y3IAwN;0Ma)Gd-z8 z@~meL_h?<11nJiQv8!)Q`}yp)F2C!Xb;)$iMpxOZs}I{aRZcITapJ`(DWgD-Z&_MT z)zxlS@7^D__OI@)cfk8el0~eo-j($Set(Pp&oJ}TdEn^$gE_NW`}@|tv+;bq65eiv=+&!Btwh&tqa2z2Y1hJhRT|K9`v DqQYb^ diff --git a/site/graphics/logo.pdf b/site/graphics/logo.pdf deleted file mode 100755 index f531e5b946b9206105546c5dd353e5b034876d9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212032 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 qBk+jIU1ZY6$W@ByZ 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 H{eb@kmq4+J diff --git a/site/graphics/reporter.png b/site/graphics/reporter.png deleted file mode 100755 index 4120464c5cda7db2615a87868a73b67a45d00777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19542 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 diff --git a/site/graphics/simpletickdiagram.png b/site/graphics/simpletickdiagram.png deleted file mode 100755 index 552d5572818c0add3aeff796c2275a3be2ae6632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16225 zcmeIZbySq!_dhyFNec=LARsDI3XC*Jmx6Sw-Kdl_(%sz+(w)*ncT0EIeFpWd z@89?PS@*8{`~C4(xskSrF*fZ4e0I z`|Vr6FT6Ny7{GrB7P6uOpuC>@tH2i|J$?y(5U4N!<3bY|_>N}wQpExU!ft~9A+(uh zXoEmJN3VqV5-^duhgVnE19$XGqP6=katPiL-UYNTXJrTFoi zIAT-}FNe$DDO6c+W*)h?=n0Y;kY;_2rKB0Q>#{l!=s_hBu=!c^p6WY{B zUCyJqE>J*xcL7DI6<_Rm+JJ`SZo<=Ed_Ip z1~HQ|qRbA$3JsKT9o+P8ftYE4@9QV0p0~sJ&MvDOY>Ci7IPeuE#iltL@L!^NO6_!k zKBl3xf*vQV@8}pRC2%9vfj~PTMwAB#$a-``t!9hLXup3!C71Nl&g-+X1xwum*#Zh1 z=sM78^emoCvX!q2H4X{1gUN`JAXpVQIM!yNK8)x>^dyBjT)*O^9zg>QICxaexqXRK ze@NgzKa`D5U7TTSQ-cu;$bhMcY##YnsL${DA}Hg45&IBYHPjeUG`QhYfsqxLyn%@t znDzF6xUh{2tDMi@woCth4tBL`0Dn9LRFbp;GI>Vu&my0mS&x`FVGyCWf^txO5q^N6 zj10fYz1_&0zCihB=)dWye%rG88n7*b1`L@KHVV%cl_hL-E};@qbvx z$?lTw51S^KBekFZT4!p>NS)u~GX%5_91CYX_&dfgHtPwh#Fb11|HGp!y7E8N-?f@y z{6ierZm5#UpC!$p8MVm&Ve|BgGymenoxxP#za{85w}m}X5U|8H#eM6$^NYy^w0{Egzu*=_9w}Q0`sZs>!>AHgT5~~*NIN|rPC}Yu_s_c@-V6hU0!BFVVKs6;|bCqbvFQLa*Xudrs$_=qq0A0ihQ+dMMV~S5W}?lEnwQl zImRY+9Y0U(753JTr(#ygoOR1;<+RL7Q*V~kOk;l^yBV~?7VFPOo>@~8=Km*!YgG7K z;bN=I@c*8uN0-O<-)ZWOj|@iHs=wzxV!c)0U$Q|FgiTmQB$j-aoDeaDo=$5B~8j z|6bnf??)AonB2b&ShZn{_K(#506JAV;0BWe=Z;7aKIA($&{TpjMD$NT468TRTia`ozQ;aR{p!|A~tE-x~N4VQXu|Pz{**i8hojEC**ZMI1?INVwwSUa(YsXuGqa2L!Lc{sA zv8$9rekTD@Yc2Gx3Hk!1x5B|Q&ei)Cbvh80=!>}XM>=vd!tT__vU52ES^l&V-cjOM z?GoNetB=n(;x%SIg2j@%RJ5I=loT`& zhDjRv*o;ZmgZXMsx3*`(Vqf##BdOGE^|V0YVX52~Y&6W)mtR4psyVkcyPoMLKf2iK zm{OA1E;ZO~>z{*aDFsZFzo($Fvr$$Q!5qwN6cnZ;GE}`f6VU%|0`L%3{DDj7j!B|G z$gNB>Me)gTG;9rx71 z@p;vC1bJLblC3y%w6YTf9twd!)+#tsAgfvANWI zTH^epOWneD`E@q#bhT;~`bFc98DC-YhKwxH#C6uz>T9>HM1MT6vg_Z$c3}ISLrXK; zq^UG|GIM?9;nZAZOa%nVkK5NDj$b+|w^Q|I6L!|~)V(1ZwOCo6ot)g%37108em_XN z^^(@-b?NXX#{+GnH!|rNMlk+yZKT6Xzsl{BS4jwonsbQSOrs|l;_0O=H;X1HI$z99 zCyw@cag#wY=0{Be^5Xir3`UBI@xLjkhdRi`^2GIi4$gF{ixfbS%0Afh5L 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 diff --git a/site/graphics/torq-logo.png b/site/graphics/torq-logo.png deleted file mode 100755 index 767a5cebc1262fecfe976d59b9ccce3a7be1ac81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18931 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 u - - - - - - - - - - - - - - - - Handlers - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    - - -
    -
    - - edit - - - -

    Message Handlers

    -

    There is a separate code directory containing message handler -customizations. This is found at $KDBCODE/handlers. Much of the code is -derived from Simon Garland’s contributions to -code.kx.

    -

    Every external interaction with a process goes through a message -handler, and these can be modified to, for example, log or restrict -access. Passing through a bespoke function defined in a message handler -will add extra processing time and therefore latency to the message. All -the customizations we have provided aim to minimise additional latency, -but if a bespoke process is latency sensitive then some or all of the -customizations could be switched off. We would argue though that -generally it is better to switch on all the message handler functions -which provide diagnostic information, as for most non-latency sensitive -processes (HDBs, Gateways, some RDBs etc.) the extra information upon -failure is worth the cost. The message handlers can be globally switched -off by setting .proc.loadhandlers to 0b in the configuration file.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ScriptNSDiagFunctionModifies
    logusage.q.usageYLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updatespw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer
    controlaccess.q.accessNRestrict access for set of users/user groups to a list of functions, and from a defined set of serverspw, pg, ps, ws, ph, pp, pi
    trackclients.q.clientsYTrack client process details including then number of requests and cumulative data size returnedpo, pg, ps, ws, pc
    trackservers.q.serversYDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.pc, timer
    zpsignore.q.zpsignoreNOverride async message handler based on certain message patternsps
    writeaccess.q.readonlyNRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.pg, ps, ws, ph, pp
    -

    Each customization can be turned on or off individually from the -configuration file(s). Each script can be extensively customised using -the configuration file. Example customization for logusage.q, taken from -$KDBCONFIG/settings/default.q is below. Please see default.q for the -remaining configuration of the other message handler files.

    -
    /- Configuration used by the usage functions - logging of client interaction
    -\d .usage
    -enabled:1b      /- whether the usage logging is enabled
    -logtodisk:1b        /- whether to log to disk or not
    -logtomemory:1b      /- write query logs to memory
    -ignore:1b       /- check the ignore list for functions to ignore
    -ignorelist:(`upd;"upd") /- the list of functions to ignore in async calls
    -flushtime:1D00      /- default value for how long to persist the
    -            /- in-memory logs. Set to 0D for no flushing
    -suppressalias:0b    /- whether to suppress the log file alias creation
    -logtimestamp:{[].z.d}   /- function to generate the log file timestamp suffix
    -LEVEL:3         /- log level. 0=none;1=errors;2=errors+complete
    -            /- queries;3=errors+before a query+after
    -logroll:1b      /- Whether or not to roll the log file
    -            /- automatically (on a daily schedule)
    -
    -

    -

    logusage.q

    -

    logusage.q is probably the most important of the scripts from a -diagnostic perspective. It is a modified version of the logusage.q -script on code.kx.

    -

    In its most verbose mode it will log information to an in-memory table -(.usage.usage) and an on-disk ASCII file, both before and after every -client interaction and function executed on the timer. These choices -were made because:

    -
      -
    • -

      logging to memory enables easy interrogation of client interaction;

      -
    • -
    • -

      logging to disk allows persistence if the process fails or locks up. - ASCII text files allow interrogation using OS tools such as vi, grep - or tail;

      -
    • -
    • -

      logging before a query ensures any query that adversely effects the - process is definitely captured, as well as capturing some state - information before the query execution;

      -
    • -
    • -

      logging after a query captures the time taken, result set size and - resulting state;

      -
    • -
    • -

      logging timer calls ensures a full history of what the process is - actually doing. Also, timer call performance degradation over time - is a common source of problems in kdb+ systems.

      -
    • -
    -

    The following fields are logged in .usage.usage:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescription
    timeTime the row was added to the table
    idID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication
    timerExecution time. Null for rows with status=b (before)
    zcmd.z handler the query arrived through
    statusQuery status. One of b, c or e (before, complete, error)
    aAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname
    uUsername of sender
    wHandle of sender
    cmdCommand sent
    memMemory statistics
    szSize of result. Null for rows with status of b or e
    errorError message
    -

    -

    controlaccess.q

    -

    controlaccess.q is used to restrict client access to the process. It is -modified version of controlaccess.q from code.kx. The script allows -control of several aspects:

    -
      -
    • -

      the host/ip address of the servers which are allowed to access the - process;

      -
    • -
    • -

      definition of three user groups (default, poweruser and superuser) - and the actions each group is allowed to do;

      -
    • -
    • -

      the group(s) each user is a member of, and any additional actions an - individual user is allowed/disallowed outside of the group - permissions;

      -
    • -
    • -

      the maximum size of the result set returned to a client.

      -
    • -
    -

    The access restrictions are loaded from csv files. The permissions files -are stored in $KDBCONFIG/permissions.

    - - - - - - - - - - - - - - - - - - - - - -
    FileDescription
    *_hosts.csvContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed
    *_users.csvContains individual users and the user groups they are are a member of
    *_functions.csvContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users
    -

    The permissions files are loaded using a similar hierarchical approach -as for the configuration and code loading. Three files can be provided- -default_.csv, [proctype]_.csv, and [procname]_.csv. All of the -files will be loaded, but permissions for the same entity (hostpattern, -user, or function) defined in [procname]_.csv will override those in -[proctype]_.csv which will in turn override [procname]_.csv.

    -

    When a client makes a query which is refused by the permissioning layer, -an error will be raised and logged in .usuage.usage if it is enabled.

    -

    -

    trackclients.q

    -

    trackclients.q is used to track client interaction. It is a slightly -modified version of trackclients.q from code.kx, and extends the -functionality to handle interaction with the discovery service.

    -

    Whenever a client opens a connection to the q process, it will be -registered in the .clients.clients table. Various details are logged, -but from a diagnostic perspective the most important information are the -client details, the number of queries it has run, the last time it ran a -query, the number of failed queries and the cumulative size of results -returned to it.

    -

    -

    trackservers.q

    -

    trackservers.q is used to register and maintain handles to external -servers. It is a heavily modified version of trackservers.q from -code.kx. It is explained more in section connectionmanagement.

    -

    -

    zpsignore.q

    -

    zpsignore.q is used to check incoming async calls for certain patterns -and to bypass all further message handler checks for messages matching -the pattern. This is useful for handling update messages published to a -process from a data source.

    -

    -

    writeaccess.q

    -

    writeaccess.q is used to restrict client write access to data within a -process. The script uses the reval function, released in KDB+ 3.3, to -prevent client queries from modifying any data in place. At present only -queries in the form of strings are passed through the reval function. -Additonally the script disables any form of HTTP access. If using -versions of KDB+ prior to 3.3, this feature must be disabled. An attempt -to use this feature on previous KDB+ versions will result in an error -and the relevant process exiting.

    -

    permissions.q

    -

    permissions.q is used to control client access to a server process. It -allows:

    -
      -
    • -

      Access control via username/password access, either in combination - with the -u/U process flags or in place of them.

      -
    • -
    • -

      Definition of user groups, which control variable access.

      -
    • -
    • -

      Definition of user roles, which allow control over function - execution.

      -
    • -
    • -

      Deeper control over table subsetting through the use of “virtual - tables”, using enforced where clauses.

      -
    • -
    -

    Access restriction in TorQ can be enabled on all processes, each of -which can then load the default.q in $KDBCONFIG/permissions/, which -adds users, groups and roles allowing standard operation of TorQ. The -admin user and role by default can access all functions, and each of the -system processes has access only to the required system functions.

    -

    Permissions are enabled or disabled on a per-process basis through -setting .pm.enabled as 1b or 0b at process load (set to 0b by default). -A permissioned process can safely interact with a non-permissioned -process while still controlling access to itself.

    -

    The access schema consists of 7 control tables:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameDescriptions
    UserUsername, locality, encryption type and password hash
    UsergroupUser and their group.
    UserroleUser and role.
    FunctiongroupFunctions and their group
    FunctionFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.
    AccessVariable names, the groups which can access them, and the read or write access level.
    VirtualtableVirtual table name, main table name, and the where clause it enforces on access to that table.
    -

    In addition to groupinfo and roleinfo tables, which contain the -group/role name and a string describing each group and role. A user can -belong to multiple groups, and have multiple roles. In particular the -schema supports group hierarchy, where a user group can be listed as a -user in the group table, and inherit all the permissions from another -other group, effectively inheriting the second group itself.

    -

    A user belonging to a group listed in the access table will have the -specified level of access (read or write) to that group’s variables, -e.g.

    - - - - - - - - - - - - - - - - - - - - -
    TableGroupLevel
    quoteheadtraderwrite
    tradejuniortraderread
    -

    Here, users in headtrader will have write access to the quote table, -while juniortrader group has read access to the trade table. If -headtraders have been set to inherit the juniortrader group, they will -also have read access to trade. Note that read access is distinct from -write access. Headtraders in this circumstance do not have implicit read -access to the quote table. This control is for direct name access only. -Selects, execs and updates are controlled via the function table, as -below.

    -

    The permissions script can be set to have permissive mode enabled with -permissivemode:1b (disabled by default). When enabled at script loading, -this bypasses access checks on variables which are not listed in the -access table, effectively auto-whitelisting any variables not listed in -the access table for all users, which may be useful in partly restricted -development environments.

    -

    Function access is controlled through non-hierarchical roles. A user -attempting to run a named function will have their access checked -against the function table through their role, for example, trying to -run a function timedata[syms;bkttype], which selects from a table by a -time bucket type bkttype on xbar:

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FunctionRoleParam. Check
    timedataquant{1b}
    timedatanormal user{x[`bkttype] in `hh}
    selectquant{1b}
    -

    The parameter check in the third column must be a lambda accepting a -dictionary of parameters and their values, which can then return a -boolean if some parameter condition is met. Here, any normal user must -have their bucket type as an hour. If they try anything else, the -function is not permitted. This could be extended to restriction to -certain syms as well, in this example, the quant can run this function -with any parameters. Anything passed to the param. check function -returns 1b. A quant having general select access is listed as having -1b in the param. check.

    -

    Further restriction of data can be achieved with virtual tables, via -which users can be restricted to having a certain subset of data from a -main table available. To avoid the need to replicate a potentially large -subset of a table into a separately-controlled variable, this is done -through pointing to the table under a different name via a where clause, -e.g.

    - - - - - - - - - - - - - - - - - - - - -
    Virtual TableTableWhere Clause
    trade_lsetrade,(in;`src;“L”)
    quote_newquote,(>;`time;(-;`.z.p;01:00))
    -

    When a select from trade_lse is performed, a select on trade is -modified to contain the where clause above. Access to virtual tables can -be controlled identically to access to real tables through the access -table.

    -

    If the process is given the flag “-public 1”, it will run in public -access mode. This allows a user to log in without a password and be -given the publicuser role and membership of the public group, which can -be configured as any other group or role.

    -

    The permissions control has a default size restriction of 2GB, set (as -bytes) on .pm.maxsize. This is a global restriction and is not affected -by user permissions.

    -

    Adding to the groups and roles is handled by the functions:

    -
    adduser[`user;`locality;`hash type; md5"password"]
    -removeuser[`user]
    -addgroup[`groupname; "description"]
    -removegroup[`groupname]
    -addrole[`rolename; "description"]
    -removerole[`rolename]
    -addtogroup[`user;`groupname]
    -removefromgroup[`user; `groupname]
    -assignrole[`user; `rolename]
    -unassignrole[`user; `rolename]
    -addfunction[`function; `functiongroup]
    -removefunction[`function; `functiongroup]
    -grantaccess[`variable; `groupname; `level]
    -revokeaccess[`variable; `groupname; `level]
    -grantfunction[`function; `rolename; {paramCheckFn}]
    -revokefunction[`function; `rolename]
    -createvirtualtable[`vtablename; `table; ,(whereclause)]
    -removevirtualtable[`vtablename]
    -cloneuser[`user;`newuser;"password"]
    -
    -

    which are further explained in the script API.

    -

    Permission control operates identically on the gateway. A user connected -to the gateway must have access to the gateway, and their roles must -have access to the .gw.syncexec or .gw.asyncexec functions.

    -

    Usage Example

    -

    To connect to a permissioned RDB in the TorQ system, a group and role -for the user must be established. If the RDB contains the tables trade, -quote, and depth, and the process contains the functions getdata[syms, -bkttype,bktsize] and hloc[table], restricted access would be -configured like so:

    -
    .pm.adduser[`adam;`local;`md5;md5"pass"]
    -.pm.adduser[`bob;`local;`md5;md5"pass"]
    -
    -.pm.addtogroup[`adam;`fulluser]
    -.pm.addtogroup[`bob;`partuser]
    -.pm.addtogroup[`fulluser;`partuser]
    -.pm.grantaccess[`quote;`fulluser;`read]
    -.pm.grantaccess[`trade;`partuser;`read]
    -
    -.pm.createvirtualtable[`quotenew;`quote;enlist(>;`time;(-;`.z.p;01:00))]
    -.pm.grantaccess[`quotenew;`partuser;`read]
    -
    -.pm.assignrole[`adam;`toplevel]
    -.pm.assignrole[`bob;`lowlevel]
    -.pm.grantfunction[`getdata;`toplevel;{1b}]
    -.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]
    -.pm.grantfunction[`hloc;`toplevel;{1b}]
    -.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]
    -
    -

    This provides a system in which Bob can access only the trade table, -while Adam has access to the trade table and quote table (through -inheritance from Bob’s group). Through a virtual table, if Bob runs -“select from quotenew”, he is able to get a table of the last hour of -quotes. When the system is started in normal mode, there is no IPC -access to the depth table, however if the system was started in -permissive mode, in this case any user who could log in could access -depth.

    -

    Adam can run the getdata function however he wants, and Bob can only run -it against sym GOOG. Similarly Adam can run hloc against any table, but -Bob can only look at trade with it.

    -

    Additionally, any system calls would need to be actively permissioned in -the same way, after defining a systemuser role (or expanding the default -role in TorQ). The superuser is given global function access by -assigning them .pm.ALL in the function table, for example a tickerplant -pushing to the RDB would need to have a user and role defined:

    -
    .pm.adduser[`ticker;`local;`md5;md5"plant"]
    -.pm.assignrole[`ticker;`tp]
    -
    -

    And then grant that role access to the .u.upd function:

    -
    .pm.grantfunction[`.u.upd;`tp;{1b}]
    -
    -

    Although the .u.upd function updates to a table, there is no need to -grant direct access to that table.

    -

    Gateway Example

    -

    The gateway user will have superuser role by default. The execution of a -function passed through the gateway is checked against the user who sent -the call. This should not be modified.

    -

    Within the gateway itself, access to target processes can be controlled -via the function table. For example, if Adam in the previous example was -allowed to access only the RDB with .gw.syncexec, you could use:

    -
    .pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]
    -
    -

    Since .gw.syncexec is a projection, the arguments supplied are checked -in order, with dictionary keys `0`1`2... etc. This could be further -extended to restrict access to queries with the -.pm.allowed[user;query] function, which checks permissions of the -current user as listed on the gateway permission tables:

    -
    .pm.grantfunction[`.gw.syncexec;`toplevel;
    -    {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]
    -
    -

    -

    Diagnostic Reporting

    -

    The message handler modifications provide a wealth of diagnostic -information including:

    -
      -
    • -

      the timings and memory usage for every query run on a process;

      -
    • -
    • -

      failed queries;

      -
    • -
    • -

      clients trying to do things they are not permissioned for;

      -
    • -
    • -

      the clients which are querying often and/or regularly extracting - large datasets;

      -
    • -
    • -

      the number of clients currently connected;

      -
    • -
    • -

      timer calls and how long they take.

      -
    • -
    -

    Although not currently implemented, it would be straightforward to use -this information to implement reports on the behaviour of each process -and the overall health of the system. Similarly it would be -straightforward to set up periodic publication to a central repository -to have a single point for system diagnostic statistics.

    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/index.html b/site/index.html deleted file mode 100644 index e76d89974..000000000 --- a/site/index.html +++ /dev/null @@ -1,387 +0,0 @@ - - - - - - - - - - - - - - - - - - Home - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    - - -
    -
    - - edit - - - -

    Home

    - -
    - -
    - -

    The TorQ framework created by AquaQ Analytics forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from code.kx.com (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.

    -

    The easiest way to get a production capture started is to download and install one of the Starter Packs. We also have a Google Group for questions/discussions.

    -

    For recent updates to TorQ please check out our blog.

    -

    For email support contact support@aquaq.co.uk

    -

    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/mkdocs/js/lunr.min.js b/site/mkdocs/js/lunr.min.js deleted file mode 100644 index b0198dff9..000000000 --- a/site/mkdocs/js/lunr.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.0 - * Copyright (C) 2016 Oliver Nightingale - * MIT Licensed - * @license - */ -!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n":">",'"':""","'":"'","/":"/"};function escapeHtml(string){return String(string).replace(/[&<>"'\/]/g,function(s){return entityMap[s]})}var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tags){if(typeof tags==="string")tags=tags.split(spaceRe,2);if(!isArray(tags)||tags.length!==2)throw new Error("Invalid tags: "+tags);openingTagRe=new RegExp(escapeRegExp(tags[0])+"\\s*");closingTagRe=new RegExp("\\s*"+escapeRegExp(tags[1]));closingCurlyRe=new RegExp("\\s*"+escapeRegExp("}"+tags[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function(){return this.tail===""};Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||match.index!==0)return"";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={".":this.view};this.parent=parentContext}Context.prototype.push=function(view){return new Context(view,this)};Context.prototype.lookup=function(name){var cache=this.cache;var value;if(name in cache){value=cache[name]}else{var context=this,names,index,lookupHit=false;while(context){if(name.indexOf(".")>0){value=context.view;names=name.split(".");index=0;while(value!=null&&index")value=this._renderPartial(token,context,partials,originalTemplate);else if(symbol==="&")value=this._unescapedValue(token,context);else if(symbol==="name")value=this._escapedValue(token,context);else if(symbol==="text")value=this._rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype._renderSection=function(token,context,partials,originalTemplate){var self=this;var buffer="";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;jthis.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&& -(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a= -this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f); -if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval", -"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b, -a);this.check()}));this.errback?q(a,"error",u(this,this.errback)):this.events.error&&q(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b, -registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a); -b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n, -q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d, -e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==e&&(!("."===k||".."===k)||1e.attachEvent.toString().indexOf("[native code"))&& -!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"), -s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"=== -b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this); diff --git a/site/mkdocs/js/search-results-template.mustache b/site/mkdocs/js/search-results-template.mustache deleted file mode 100644 index a8b3862f2..000000000 --- a/site/mkdocs/js/search-results-template.mustache +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/site/mkdocs/js/search.js b/site/mkdocs/js/search.js deleted file mode 100644 index d5c866164..000000000 --- a/site/mkdocs/js/search.js +++ /dev/null @@ -1,88 +0,0 @@ -require([ - base_url + '/mkdocs/js/mustache.min.js', - base_url + '/mkdocs/js/lunr.min.js', - 'text!search-results-template.mustache', - 'text!../search_index.json', -], function (Mustache, lunr, results_template, data) { - "use strict"; - - function getSearchTerm() - { - var sPageURL = window.location.search.substring(1); - var sURLVariables = sPageURL.split('&'); - for (var i = 0; i < sURLVariables.length; i++) - { - var sParameterName = sURLVariables[i].split('='); - if (sParameterName[0] == 'q') - { - return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); - } - } - } - - var index = lunr(function () { - this.field('title', {boost: 10}); - this.field('text'); - this.ref('location'); - }); - - data = JSON.parse(data); - var documents = {}; - - for (var i=0; i < data.docs.length; i++){ - var doc = data.docs[i]; - doc.location = base_url + doc.location; - index.add(doc); - documents[doc.location] = doc; - } - - var search = function(){ - - var query = document.getElementById('mkdocs-search-query').value; - var search_results = document.getElementById("mkdocs-search-results"); - while (search_results.firstChild) { - search_results.removeChild(search_results.firstChild); - } - - if(query === ''){ - return; - } - - var results = index.search(query); - - if (results.length > 0){ - for (var i=0; i < results.length; i++){ - var result = results[i]; - doc = documents[result.ref]; - doc.base_url = base_url; - doc.summary = doc.text.substring(0, 200); - var html = Mustache.to_html(results_template, doc); - search_results.insertAdjacentHTML('beforeend', html); - } - } else { - search_results.insertAdjacentHTML('beforeend', "

    No results found

    "); - } - - if(jQuery){ - /* - * We currently only automatically hide bootstrap models. This - * requires jQuery to work. - */ - jQuery('#mkdocs_search_modal a').click(function(){ - jQuery('#mkdocs_search_modal').modal('hide'); - }); - } - - }; - - var search_input = document.getElementById('mkdocs-search-query'); - - var term = getSearchTerm(); - if (term){ - search_input.value = term; - search(); - } - - search_input.addEventListener("keyup", search); - -}); diff --git a/site/mkdocs/js/text.js b/site/mkdocs/js/text.js deleted file mode 100644 index 17921b6e5..000000000 --- a/site/mkdocs/js/text.js +++ /dev/null @@ -1,390 +0,0 @@ -/** - * @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/requirejs/text for details - */ -/*jslint regexp: true */ -/*global require, XMLHttpRequest, ActiveXObject, - define, window, process, Packages, - java, location, Components, FileUtils */ - -define(['module'], function (module) { - 'use strict'; - - var text, fs, Cc, Ci, xpcIsWindows, - progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], - xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, - bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, - hasLocation = typeof location !== 'undefined' && location.href, - defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), - defaultHostName = hasLocation && location.hostname, - defaultPort = hasLocation && (location.port || undefined), - buildMap = {}, - masterConfig = (module.config && module.config()) || {}; - - text = { - version: '2.0.12', - - strip: function (content) { - //Strips declarations so that external SVG and XML - //documents can be added to a document without worry. Also, if the string - //is an HTML document, only the part inside the body tag is returned. - if (content) { - content = content.replace(xmlRegExp, ""); - var matches = content.match(bodyRegExp); - if (matches) { - content = matches[1]; - } - } else { - content = ""; - } - return content; - }, - - jsEscape: function (content) { - return content.replace(/(['\\])/g, '\\$1') - .replace(/[\f]/g, "\\f") - .replace(/[\b]/g, "\\b") - .replace(/[\n]/g, "\\n") - .replace(/[\t]/g, "\\t") - .replace(/[\r]/g, "\\r") - .replace(/[\u2028]/g, "\\u2028") - .replace(/[\u2029]/g, "\\u2029"); - }, - - createXhr: masterConfig.createXhr || function () { - //Would love to dump the ActiveX crap in here. Need IE 6 to die first. - var xhr, i, progId; - if (typeof XMLHttpRequest !== "undefined") { - return new XMLHttpRequest(); - } else if (typeof ActiveXObject !== "undefined") { - for (i = 0; i < 3; i += 1) { - progId = progIds[i]; - try { - xhr = new ActiveXObject(progId); - } catch (e) {} - - if (xhr) { - progIds = [progId]; // so faster next time - break; - } - } - } - - return xhr; - }, - - /** - * Parses a resource name into its component parts. Resource names - * look like: module/name.ext!strip, where the !strip part is - * optional. - * @param {String} name the resource name - * @returns {Object} with properties "moduleName", "ext" and "strip" - * where strip is a boolean. - */ - parseName: function (name) { - var modName, ext, temp, - strip = false, - index = name.indexOf("."), - isRelative = name.indexOf('./') === 0 || - name.indexOf('../') === 0; - - if (index !== -1 && (!isRelative || index > 1)) { - modName = name.substring(0, index); - ext = name.substring(index + 1, name.length); - } else { - modName = name; - } - - temp = ext || modName; - index = temp.indexOf("!"); - if (index !== -1) { - //Pull off the strip arg. - strip = temp.substring(index + 1) === "strip"; - temp = temp.substring(0, index); - if (ext) { - ext = temp; - } else { - modName = temp; - } - } - - return { - moduleName: modName, - ext: ext, - strip: strip - }; - }, - - xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, - - /** - * Is an URL on another domain. Only works for browser use, returns - * false in non-browser environments. Only used to know if an - * optimized .js version of a text resource should be loaded - * instead. - * @param {String} url - * @returns Boolean - */ - useXhr: function (url, protocol, hostname, port) { - var uProtocol, uHostName, uPort, - match = text.xdRegExp.exec(url); - if (!match) { - return true; - } - uProtocol = match[2]; - uHostName = match[3]; - - uHostName = uHostName.split(':'); - uPort = uHostName[1]; - uHostName = uHostName[0]; - - return (!uProtocol || uProtocol === protocol) && - (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && - ((!uPort && !uHostName) || uPort === port); - }, - - finishLoad: function (name, strip, content, onLoad) { - content = strip ? text.strip(content) : content; - if (masterConfig.isBuild) { - buildMap[name] = content; - } - onLoad(content); - }, - - load: function (name, req, onLoad, config) { - //Name has format: some.module.filext!strip - //The strip part is optional. - //if strip is present, then that means only get the string contents - //inside a body tag in an HTML string. For XML/SVG content it means - //removing the declarations so the content can be inserted - //into the current doc without problems. - - // Do not bother with the work if a build and text will - // not be inlined. - if (config && config.isBuild && !config.inlineText) { - onLoad(); - return; - } - - masterConfig.isBuild = config && config.isBuild; - - var parsed = text.parseName(name), - nonStripName = parsed.moduleName + - (parsed.ext ? '.' + parsed.ext : ''), - url = req.toUrl(nonStripName), - useXhr = (masterConfig.useXhr) || - text.useXhr; - - // Do not load if it is an empty: url - if (url.indexOf('empty:') === 0) { - onLoad(); - return; - } - - //Load the text. Use XHR if possible and in a browser. - if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { - text.get(url, function (content) { - text.finishLoad(name, parsed.strip, content, onLoad); - }, function (err) { - if (onLoad.error) { - onLoad.error(err); - } - }); - } else { - //Need to fetch the resource across domains. Assume - //the resource has been optimized into a JS module. Fetch - //by the module name + extension, but do not include the - //!strip part to avoid file system issues. - req([nonStripName], function (content) { - text.finishLoad(parsed.moduleName + '.' + parsed.ext, - parsed.strip, content, onLoad); - }); - } - }, - - write: function (pluginName, moduleName, write, config) { - if (buildMap.hasOwnProperty(moduleName)) { - var content = text.jsEscape(buildMap[moduleName]); - write.asModule(pluginName + "!" + moduleName, - "define(function () { return '" + - content + - "';});\n"); - } - }, - - writeFile: function (pluginName, moduleName, req, write, config) { - var parsed = text.parseName(moduleName), - extPart = parsed.ext ? '.' + parsed.ext : '', - nonStripName = parsed.moduleName + extPart, - //Use a '.js' file name so that it indicates it is a - //script that can be loaded across domains. - fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; - - //Leverage own load() method to load plugin value, but only - //write out values that do not have the strip argument, - //to avoid any potential issues with ! in file names. - text.load(nonStripName, req, function (value) { - //Use own write() method to construct full module value. - //But need to create shell that translates writeFile's - //write() to the right interface. - var textWrite = function (contents) { - return write(fileName, contents); - }; - textWrite.asModule = function (moduleName, contents) { - return write.asModule(moduleName, fileName, contents); - }; - - text.write(pluginName, nonStripName, textWrite, config); - }, config); - } - }; - - if (masterConfig.env === 'node' || (!masterConfig.env && - typeof process !== "undefined" && - process.versions && - !!process.versions.node && - !process.versions['node-webkit'])) { - //Using special require.nodeRequire, something added by r.js. - fs = require.nodeRequire('fs'); - - text.get = function (url, callback, errback) { - try { - var file = fs.readFileSync(url, 'utf8'); - //Remove BOM (Byte Mark Order) from utf8 files if it is there. - if (file.indexOf('\uFEFF') === 0) { - file = file.substring(1); - } - callback(file); - } catch (e) { - if (errback) { - errback(e); - } - } - }; - } else if (masterConfig.env === 'xhr' || (!masterConfig.env && - text.createXhr())) { - text.get = function (url, callback, errback, headers) { - var xhr = text.createXhr(), header; - xhr.open('GET', url, true); - - //Allow plugins direct access to xhr headers - if (headers) { - for (header in headers) { - if (headers.hasOwnProperty(header)) { - xhr.setRequestHeader(header.toLowerCase(), headers[header]); - } - } - } - - //Allow overrides specified in config - if (masterConfig.onXhr) { - masterConfig.onXhr(xhr, url); - } - - xhr.onreadystatechange = function (evt) { - var status, err; - //Do not explicitly handle errors, those should be - //visible via console output in the browser. - if (xhr.readyState === 4) { - status = xhr.status || 0; - if (status > 399 && status < 600) { - //An http 4xx or 5xx error. Signal an error. - err = new Error(url + ' HTTP status: ' + status); - err.xhr = xhr; - if (errback) { - errback(err); - } - } else { - callback(xhr.responseText); - } - - if (masterConfig.onXhrComplete) { - masterConfig.onXhrComplete(xhr, url); - } - } - }; - xhr.send(null); - }; - } else if (masterConfig.env === 'rhino' || (!masterConfig.env && - typeof Packages !== 'undefined' && typeof java !== 'undefined')) { - //Why Java, why is this so awkward? - text.get = function (url, callback) { - var stringBuffer, line, - encoding = "utf-8", - file = new java.io.File(url), - lineSeparator = java.lang.System.getProperty("line.separator"), - input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), - content = ''; - try { - stringBuffer = new java.lang.StringBuffer(); - line = input.readLine(); - - // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 - // http://www.unicode.org/faq/utf_bom.html - - // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: - // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 - if (line && line.length() && line.charAt(0) === 0xfeff) { - // Eat the BOM, since we've already found the encoding on this file, - // and we plan to concatenating this buffer with others; the BOM should - // only appear at the top of a file. - line = line.substring(1); - } - - if (line !== null) { - stringBuffer.append(line); - } - - while ((line = input.readLine()) !== null) { - stringBuffer.append(lineSeparator); - stringBuffer.append(line); - } - //Make sure we return a JavaScript string and not a Java string. - content = String(stringBuffer.toString()); //String - } finally { - input.close(); - } - callback(content); - }; - } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && - typeof Components !== 'undefined' && Components.classes && - Components.interfaces)) { - //Avert your gaze! - Cc = Components.classes; - Ci = Components.interfaces; - Components.utils['import']('resource://gre/modules/FileUtils.jsm'); - xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); - - text.get = function (url, callback) { - var inStream, convertStream, fileObj, - readData = {}; - - if (xpcIsWindows) { - url = url.replace(/\//g, '\\'); - } - - fileObj = new FileUtils.File(url); - - //XPCOM, you so crazy - try { - inStream = Cc['@mozilla.org/network/file-input-stream;1'] - .createInstance(Ci.nsIFileInputStream); - inStream.init(fileObj, 1, 0, false); - - convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] - .createInstance(Ci.nsIConverterInputStream); - convertStream.init(inStream, "utf-8", inStream.available(), - Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); - - convertStream.readString(inStream.available(), readData); - convertStream.close(); - inStream.close(); - callback(readData.value); - } catch (e) { - throw new Error((fileObj && fileObj.path || '') + ': ' + e); - } - }; - } - return text; -}); diff --git a/site/mkdocs/search_index.json b/site/mkdocs/search_index.json deleted file mode 100644 index 1e49a72d7..000000000 --- a/site/mkdocs/search_index.json +++ /dev/null @@ -1,524 +0,0 @@ -{ - "docs": [ - { - "location": "/", - "text": "The TorQ framework created by \nAquaQ Analytics\n forms the basis of a production kdb+ system by implementing some core functionality and utilities on top of kdb+, allowing developers to concentrate on the application business logic. It incorporates as many best practices as possible, with particular focus on performance, process management, diagnostic information, maintainability and extensibility. Wherever possible, we have tried to avoid re-inventing the wheel and instead have used contributed code from \ncode.kx.com\n (either directly or modified). This framework will be suitable for those looking to create a new kdb+ system from scratch or those looking to add additional functionality to their existing kdb+ systems.\n\n\nThe easiest way to get a production capture started is to download and install one of the \nStarter Packs\n. We also have a \nGoogle Group for questions/discussions\n.\n\n\nFor recent updates to TorQ please check out our \nblog\n.\n\n\nFor email support contact", - "title": "Home" - }, - { - "location": "/Overview/", - "text": "Overview\n\n\n\n\nWhat is kdb+?\n\n\nkdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.\n\n\n\n\nWhat is AquaQ TorQ?\n\n\nAquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document.\n\n\nAquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are:\n\n\n\n\n\n\nProcess Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level.\n\n\n\n\n\n\nCode Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped.\n\n\n\n\n\n\nConfiguration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously.\n\n\n\n\n\n\nUsage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message.\n\n\n\n\n\n\nIncoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level.\n\n\n\n\n\n\nAccess Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management.\n\n\n\n\n\n\nTimer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers.\n\n\n\n\n\n\nStandard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled.\n\n\n\n\n\n\nError Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue.\n\n\n\n\n\n\nVisualisation: Utilities to ease GUI development using websockets\n and HTML5.\n\n\n\n\n\n\nDocumentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included.\n\n\n\n\n\n\nUtilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have:\n\n\n\n\n\n\nCaching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame;\n\n\n\n\n\n\nTimezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones;\n\n\n\n\n\n\nEmail: an library to send emails;\n\n\n\n\n\n\nAsync Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions;\n\n\n\n\n\n\nHeartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment;\n\n\n\n\n\n\nData Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks;\n\n\n\n\n\n\nSubscriptions: allow processes to dynamically detect and\n subscribe to datasources;\n\n\n\n\n\n\nTickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files;\n\n\n\n\n\n\nDatabase Writing: utility functions for writing to, sorting and\n parting on disk databases;\n\n\n\n\n\n\nCompression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression.\n\n\n\n\n\n\n\n\n\n\nAquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own:\n\n\n\n\n\n\nDiscovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process;\n\n\n\n\n\n\nGateway: A fully synchronous and asynchronous gateway is provided.\n\n\nThe gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client;\n\n\n\n\n\n\nReal Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes.\n\n\n\n\n\n\nWrite Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n \nw.q\n\n\n\n\n\n\nTickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.;\n\n\n\n\n\n\nReporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports.\n\n\n\n\n\n\nHousekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks.\n\n\n\n\n\n\nFile Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed.\n\n\n\n\n\n\nMonitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks;\n\n\n\n\n\n\nKill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.\n\n\n\n\n\n\n\n\nA Large Scale Data Processing Platform\n\n\nOne of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. \nkdb+tick\n\nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this:\n\n\n\n\nHowever, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this:\n\n\n\n\nA common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms.\n\n\nOther common production features include:\n\n\n\n\n\n\nA modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc.\n\n\n\n\n\n\nA Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job\n\n\n\n\n\n\nProcesses that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter])\n\n\n\n\n\n\nA Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system\n\n\n\n\n\n\nA Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system.\n\n\n\n\n\n\nBasic Monitoring (section [sec:monitor]) of process availability\n\n\n\n\n\n\nHousekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.\n\n\n\n\n\n\n\n\nDo I Really Have to Read This Whole Document?\n\n\nHopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition:\n\n\n\n\n\n\nWe have added a load of usage information:\n\n\naquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ...\n\n\n\nIf sourcing from another script there are hooks to modify and extend\nthe usage information as required.\n\n\n\n\n\n\nWe have some pretty extensive logging:\n\n\naquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ...\n\n\n\n\n\n\n\nWe have added functionality to find functions or variables defined\n in the session, and also to search function definitions.\n\n\nq).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api ..\n\n\n\n\n\n\n\nWe have incorporated help.q.\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\n\n\nWe have separated and commented all of our config:\n\n\naquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...\n\n\n\n\n\n\n\n\n\nOperating System and kdb+ Version\n\n\nAquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.\n\n\n\n\nLicense\n\n\nThis code is released under the MIT license.", - "title": "About" - }, - { - "location": "/Overview/#overview", - "text": "", - "title": "Overview" - }, - { - "location": "/Overview/#what-is-kdb", - "text": "kdb+ is the market leading timeseries database from Kx Systems. kdb+\nis used predominently in the Financial Services sector to capture,\nprocess and analyse billions of records on a daily basis, with Kx\ncounting almost all of the top tier investment banks as customers. kdb+\nincorporates a programming language, q, which is known for its\nperformance and expressive power. Given the unsurpassed data management\nand analytical capabilities of kdb+, the applicability of kdb+\ntechnology extends beyond the financial domain into any sector where\nrapid pre-built or adhoc analysis of large datasets is required. Other\nsectors which have good use cases for kdb+ include utilities,\npharmaceuticals, telecoms, manufacturing, retail and any sector\nutilising telemetry or sensor data.", - "title": "What is kdb+?" - }, - { - "location": "/Overview/#what-is-aquaq-torq", - "text": "AquaQ TorQ is a framework which forms the basis of a production kdb+\nsystem by implementing some core functionality and utilities on top of\nkdb+, allowing developers to concentrate on the application business\nlogic. We have incorporated as many best practices as possible, with\nparticular focus on performance, process management, diagnostic\ninformation, maintainability and extensibility. We have kept the code as\nreadable as possible using descriptive comments, error messages,\nfunction names and variable names. Wherever possible, we have tried to\navoid re-inventing the wheel and instead have used contributed code from\ncode.kx.com (either directly or modified). All code sections taken from\ncode.kx.com are referenced in this document. AquaQ TorQ can be extended or modified as required. We have chosen some\ndefault behaviour, but it can all be overridden. The features of AquaQ\nTorQ are: Process Management: Each process is given a type and name. By\n default these are used to determine the code base it loads, the\n configuration loaded, log file naming and how it reports itself to\n discovery services. Whenever possible we have tried to ensure that\n all default behaviour can be overridden at the process type level,\n and further at the process name level. Code Management: Processes can optionally load common or process\n type/name specific code bases. All code loading is error trapped. Configuration Management: Configuration scripts can be loaded as\n standard and with specific process type/name configuration\n overriding default values. Configuration scripts are loaded in a\n specific order; default, then process type specific, then process\n name specific. Values loaded last will override values loaded\n previously. Usage Logging: All process usage is logged to a single text log file\n and periodically rolled. Logging includes opening/closing of\n connections, synchronous and asynchronous queries and functions\n executed on the timer. Logged values include the request, the\n details of where it came from, the time it was received, the time it\n took, memory usage before and after, the size of the result set, the\n status and any error message. Incoming and Outgoing Connection Management: Incoming (client) and\n outgoing (server) connections are stored and their usage monitored\n through query counts and total data size counts. Connections are\n stored and retrieved and can be set to automatically be re-opened as\n required. The password used for outgoing connections can be\n overridden at default, process type and process name level. Access Controls: Basic access controls are provided, and could be\n extended. These apply restrictions on the IP addresses of remote\n connections, the users who can access the process, and the functions\n that each user can execute. A similar hierarchical approach is used\n for access control management as for configuration management. Timer Extensions: Mechanism to allow multiple functions to be added\n to the timer either on a repeating or one-off basis. Multiple\n re-scheduling algorithms supplied for repeating timers. Standard Out/Error Logging: Functions to print formatted messages to\n standard out and error. Hooks are provided to extend these as\n required, e.g. publication to centralised logging database. Standard\n out and error are redirected to appropriately named, timestamped and\n aliased log files, which are periodically rolled. Error Handling: Different failure options are supplied in case code\n fails to load; either exit upon failure, stop at the point of\n failure or trap and continue. Visualisation: Utilities to ease GUI development using websockets\n and HTML5. Documentation and Development Tools: Functionality to document the\n system is built into AquaQ TorQ, and can be accessed directly from\n every q session. Developers can extend the documentation as they add\n new functions. Functionality for searching for functions and\n variables by name and definition is provided, and for ordering\n variables by memory usage. The standard help.q from code.kx is also\n included. Utilities: We intend to build out and add utilities as we find them\n to be suitably useful and generic. So far we have: Caching: allows a result set cache to be declared and result\n sets to be stored and retrieved from the cache. Suitable for\n functions which may be run multiple times with the same\n parameters, with the underlying data not changing in a short\n time frame; Timezone Handling: derived from code.kx, allows conversion\n between timestamps in different timezones; Email: an library to send emails; Async Messaging: allows easy use of advanced async messaging\n methods such as deferred synchronous communication and async\n communication using postback functions; Heartbeating: each process can be set to publish heartbeats, and\n subscribe to and manage heartbeats from other processes in the\n environment; Data Loading: utility wrapper around .Q.fsn to read a data file\n from disk, manipulate it and write it out in chunks; Subscriptions: allow processes to dynamically detect and\n subscribe to datasources; Tickerplant Log File Recovery: recover as many messages as\n possible from corrupt log files; Database Writing: utility functions for writing to, sorting and\n parting on disk databases; Compression: allows compression of a database. This can be\n performed using a set of parameters for the entire database, but\n also gives the flexibilty of compressing user-specified tables\n and/or columns of those tables with different parameters if\n required, and also offers decompression. AquaQ TorQ will wrap easily around kdb+tick and therefore around any\ntickerplant, RDB, HDB or real time processing application. We currently\nhave several customised processes of our own: Discovery Service: Every process has a type, name and set of\n available attributes, which are used by other processes to connect\n to it. The Discovery Service is a central point that can be used to\n find other available processes. Client processes can subscribe to\n updates from the discovery service as new processes become\n available- the discovery service will notify its subscribers, which\n can then use the supplied hook to implement required behavior e.g.\n connect to the newly available process; Gateway: A fully synchronous and asynchronous gateway is provided. The gateway will connect to a defined list of process types (can be\nhomogenous or heterogeneous processes) and will route queries across\nthem according to the priority of received requests. The routing\nalgorithms can be easily modified e.g. give priority to user X, or\nonly route queries to processes which exist in the same data centre\nor geographical region to avoid the WAN (this would entail using the\nprocess attributes). The gateway can either return the result to the\nclient back down the same handle, or it can wrap it in a callback\nfunction to be invoked on the client; Real Time Database (RDB): A customized version of the kdb+tick RDB,\n to allow dynamic tickerplant subscriptions, reloading of multiple\n HDBs using authenticated connections, and customized end-of-day save\n downs. The RDB, WDB and tickerplant log replay share a common code\n base to ensure that a save-down modification to a table is applied\n across each of these processes. Write Database (WDB): The job of a WDB is to write data to disk\n rather than to serve client queries. WDBs usually write data out\n periodically throughout the day, and are useful when there is too\n much data to fit into memory and/or the end of day save operation\n needs to be speeded up. The concept is based on\n w.q Tickerplant Log Replay: A process for replaying tickerplant log\n files to create on-disk data sets. Extended features are provided\n for only replaying subsets of log files (by message number and/or\n table name), replaying in chunks, invoking bespoke final behaviour\n etc.; Reporter: The Reporter Process runs defined reports (q queries or\n parameterized functions) against specific database or gateways on a\n schedule. The results are retrieved and processed. Processing can be\n user defined, or can be a standard operation such as writing the\n data to disk, or emailing the results to a list of recipients. This\n can be useful for running system checks or generating management\n reports. Housekeeping: A process to undertake housekeeping tasks\n periodically, such as compressing and removing files that are no\n longer used. Housekeeping looks up a file of instructions and\n performs maintenance tasks on directories accordingly. Features\n allow selective file deletion and zipping according to file age,\n including a search string parameter and the ability to exclude items\n from the search. The process can be scheduled, or run immediately\n from the command line and can be extended as required to incorporate\n more tasks. File Alerter: A process to periodically scan a set of directories\n and execute a function based on the availability of a file. This is\n useful where files may arrive to the system during the day and must\n be acted upon (e.g. files are uploaded to a shared directory by\n users/clients). The functions to execute are defined by the user and\n the whole process is driven by a csv file detailing the file to\n search for, the function to execute and, optionally, a directory to\n move the file to after it has been processed. Monitor: A basic monitoring process which uses the Discovery Service\n to locate the other processes within the system, listens for\n heartbeats, and subscribes for log messages. This should be extended\n as required but provides a basic central point for system health\n checks; Kill: A process used to kill other processes, optionally using the\n Discovery Service to locate them.", - "title": "What is AquaQ TorQ?" - }, - { - "location": "/Overview/#a-large-scale-data-processing-platform", - "text": "One of the key drivers behind TorQ development has been to ensure all\nthe tools necessary to build a large scale data processing platform are\navailable. kdb+tick \nprovides the basic building blocks, and a standard set-up usually looks\nsomething like this: However, in reality it is usually more complicated. A larger scale\narchitecture serving large numbers of client queries and receiving data\nfrom multiple sources may look like this: A common practice is to use a gateway (section gateway) to\nmanage client queries across back-end processes. The gateway can load\nbalance across processes and make failures transparent to the client. If\nthe clients access the gateway with asynchronous calls, then the gateway\ncan serve many requests at once and additionally implement client\nqueuing algorithms. Other common production features include: A modified version of the RDB (section sec:rdb) which does\n different operations at end-of-day, reloads multiple HDB processes\n etc. A Write Database (section [sec:wdb]) which receives data from the\n tickerplant and periodically writes it to disk. WDBs are used when\n there is too much data in a day to fit into memory and/or to speed\n up the end-of-day rollover job Processes that load data from other sources either into the HDB\n directly or to the RDB potentially via the tickerplant (section\n [sec:dataloader]). The data may be dropped in specific locations\n which have to be monitored (section [sec:filealerter]) A Reporting Engine (section [sec:reporter]) to run periodic\n reports and do something with the result (e.g. generate an xls file\n from the database and email it to senior management). Reporting\n engines can also be used to run periodic checks of the system A Discovery Service (section [sec:discovery]) to allow processes\n to locate each other, and to allow processes to dynamically register\n availability and push notifications around the system. Basic Monitoring (section [sec:monitor]) of process availability Housekeeping (section [sec:housekeeping]) to ensure log files are\n tidied up, tickerplant log files are compressed/moved in a timely\n fashion etc.", - "title": "A Large Scale Data Processing Platform" - }, - { - "location": "/Overview/#do-i-really-have-to-read-this-whole-document", - "text": "Hopefully not. The core of AquaQ TorQ is a script called torq.q and we\nhave tried to make it as descriptive as possible, so perhaps that will\nsuffice. The first place to look will be in the config files, the main\none being \\$KDBCONFIG/settings/default.q. This should contain a lot of\ninformation on what can be modified. In addition: We have added a load of usage information: aquaq$ q torq.q -usage\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\nGeneral:\n This script should form the basis of a production kdb+ environment.\n It can be sourced from other files if required, or used as a launch script before loading other files/directories using either -load or -loaddir flags \n... etc ... If sourcing from another script there are hooks to modify and extend\nthe usage information as required. We have some pretty extensive logging: aquaq$ q torq.q -p 9999 -debug\nKDB+ 3.1 2013.10.08 Copyright (C) 1993-2013 Kx Systems\n\n2013.11.05D12:22:42.597500000|aquaq|torq.q_3139_9999|INF|init|trap mode (initialisation errors will be caught and thrown, rather than causing an exit) is set to 0\n2013.11.05D12:22:42.597545000|aquaq|torq.q_3139_9999|INF|init|stop mode (initialisation errors cause the process loading to stop) is set to 0\n2013.11.05D12:22:42.597810000|aquaq|torq.q_3139_9999|INF|init|attempting to read required process parameters proctype,procname from file /torqhome/config/process.csv\n2013.11.05D12:22:42.598081000|aquaq|torq.q_3139_9999|INF|init|read in process parameters of proctype=hdb; procname=hdb1\n2013.11.05D12:22:42.598950000|aquaq|hdb1|INF|fileload|config file /torqhome/config/default.q found\n... etc ... We have added functionality to find functions or variables defined\n in the session, and also to search function definitions. q).api.f`max \nname | vartype namespace public descrip ..\n--------------------| ------------------------------------------------..\nmaxs | function .q 1 \"\" ..\nmmax | function .q 1 \"\" ..\n.clients.MAXIDLE | variable .clients 0 \"\" ..\n.access.MAXSIZE | variable .access 0 \"\" ..\n.cache.maxsize | variable .cache 1 \"The maximum size in ..\n.cache.maxindividual| variable .cache 1 \"The maximum size in ..\nmax | primitive 1 \"\" ..\n\nq)first 0!.api.p`.api \nname | `.api.f\nvartype | `function\nnamespace| `.api\npublic | 1b\ndescrip | \"Find a function/variable/table/view in the current process\"\nparams | \"[string:search string]\"\nreturn | \"table of matching elements\"\n\nq).api.p`.api \nname | vartype namespace public descrip ..\n------------| --------------------------------------------------------..\n.api.f | function .api 1 \"Find a function/variable/tabl..\n.api.p | function .api 1 \"Find a public function/variab..\n.api.u | function .api 1 \"Find a non-standard q public ..\n.api.s | function .api 1 \"Search all function definitio..\n.api.find | function .api 1 \"Generic method for finding fu..\n.api.search | function .api 1 \"Generic method for searching ..\n.api.add | function .api 1 \"Add a function to the api des..\n.api.fullapi| function .api 1 \"Return the full function api .. We have incorporated help.q. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions We have separated and commented all of our config: aquaq$ head config/default.q \n/- Default configuration - loaded by all processes\n\n/- Process initialisation\n\\d .proc\nloadcommoncode:1b /- whether to load the common code defined at\n /- ${KDBCODE}/common\nloadprocesscode:0b /- whether to load the process specific code defined at \n /- ${KDBCODE}/{process type} \nloadnamecode:0b /- whether to load the name specific code defined at \n /- ${KDBCODE}/{name of process}\nloadhandlers:1b /- whether to load the message handler code defined at \n /- ${KDBCODE}/handlers\nlogroll:1b /- whether to roll the std out/err logs daily\n... etc ...", - "title": "Do I Really Have to Read This Whole Document?" - }, - { - "location": "/Overview/#operating-system-and-kdb-version", - "text": "AquaQ TorQ has been built and tested on the linux and OSX operating\nsystems though as far as we are aware there is nothing that would make\nthis incompatible with Solaris or Windows. It has also been tested with\nkdb+ 3.1 and 2.8. Please report any incompatibilities with other kdb+\nversions or operating systems.", - "title": "Operating System and kdb+ Version" - }, - { - "location": "/Overview/#license", - "text": "This code is released under the MIT license.", - "title": "License" - }, - { - "location": "/gettingstarted/", - "text": "Getting Started\n\n\nkdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented.\n\n\nWe provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will:\n\n\n\n\n\n\nensure the environment is set up correctly;\n\n\n\n\n\n\ndefine some common utility functions (such as logging);\n\n\n\n\n\n\nexecute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files;\n\n\n\n\n\n\nload configuration;\n\n\n\n\n\n\nload the shared code based;\n\n\n\n\n\n\nset up the message handlers;\n\n\n\n\n\n\nload any required bespoke scripts.\n\n\n\n\n\n\nThe behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.\n\n\n\n\nUsing torq.q\n\n\ntorq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below.\n\n\n$ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1\n\n\n\nTo load a file, do:\n\n\n$ q torq.q -load myfile.q -debug -proctype testproc -procname test1\n\n\n\nIt can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script.\n\n\nmyvar:@[value;`myvar;1 2 3]\n\n\n\nThe available command line parameters are:\n\n\n\n\n\n\n\n\nCmd Line Param\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n-procname x -proctype y\n\n\nThe process name and process type\n\n\n\n\n\n\n-procfile x\n\n\nThe name of the file to get the process information from\n\n\n\n\n\n\n-load x [y..z]\n\n\nThe files or database directory to load\n\n\n\n\n\n\n-loaddir x [y..z]\n\n\nLoad all .q, .k files in specified directories\n\n\n\n\n\n\n-localtime\n\n\nSets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P\n\n\n\n\n\n\n-trap\n\n\nAny errors encountered during initialization when loading external files will be caught and logged, processing will continue\n\n\n\n\n\n\n-stop\n\n\nStop loading the file if an error is encountered but do not exit\n\n\n\n\n\n\n-noredirect\n\n\nDo not redirect std out/std err to a file (useful for debugging)\n\n\n\n\n\n\n-noredirectalias\n\n\nDo not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix)\n\n\n\n\n\n\n-noconfig\n\n\nDo not load configuration\n\n\n\n\n\n\n-nopi\n\n\nReset the definition of .z.pi to the initial value (useful for debugging)\n\n\n\n\n\n\n-debug\n\n\nEquivalent to [-nopi -noredirect]\n\n\n\n\n\n\n-usage\n\n\nPrint usage info and exit\n\n\n\n\n\n\n\n\nIn addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.\n\n\n\n\nEnvironment Variables\n\n\nFive environment variables are required:\n\n\n\n\n\n\n\n\nEnvironment Variable\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nKDBCONFIG\n\n\nThe base configuration directory\n\n\n\n\n\n\nKDBCODE\n\n\nThe base code directory\n\n\n\n\n\n\nKDBLOGS\n\n\nWhere standard out/error and usage logs are written\n\n\n\n\n\n\nKDBHTML\n\n\nContains HTML files\n\n\n\n\n\n\nKDBLIB\n\n\nContains supporting library files\n\n\n\n\n\n\n\n\ntorq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.\n\n\n\n\nProcess Identification\n\n\nAt the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded.\n\n\nThe most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways:\n\n\n\n\n\n\nFrom the process file in the default location of\n $KDBCONFIG/process.csv;\n\n\n\n\n\n\nFrom the process file defined using the command line parameter\n -procfile;\n\n\n\n\n\n\nFrom the port number it is started on, by referring to the process\n file for further process details;\n\n\n\n\n\n\nUsing the command line parameters -proctype and -procname;\n\n\n\n\n\n\nBy defining .proc.proctype and .proc.procname in a script which\n loads torq.q.\n\n\n\n\n\n\nFor options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file).\n\n\nFor option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry.\n\n\nThe process file has format as below.\n\n\naquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2\n\n\n\nThe process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.\n\n\n\n\nLogging\n\n\nBy default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are:\n\n\n\n\n\n\n\n\nLog File\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nout_[procname]_[date].log\n\n\nTimestamped out log\n\n\n\n\n\n\nerr_[procname]_[date].log\n\n\nTimestamped error log\n\n\n\n\n\n\nout_[procname].log\n\n\nAlias to current log log\n\n\n\n\n\n\nerr_[procname].log\n\n\nAlias to current error log\n\n\n\n\n\n\n\n\nThe date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.\n\n\n\n\nConfiguration Loading\n\n\nDefault Configuration Loading\n\n\nDefault process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:-\n\n\n\n\n\n\ndefault.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments;\n\n\n\n\n\n\n[[proctype]]{}.q: configuration for a specific process type;\n\n\n\n\n\n\n[[procname]]{}.q: configuration for a specific named process.\n\n\n\n\n\n\nThe only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.\n\n\nApplication Configuration Loading\n\n\nApplication specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:-\n\n\n\n\n\n\ndefault.q: Application default configuration loaded by all\n processes.\n\n\n\n\n\n\n[[proctype]]{}.q: Application specific configuration for a\n specific process type.\n\n\n\n\n\n\n[[procname]]{}.q: Appliction specific configuration for a specific\n named process.\n\n\n\n\n\n\nAll loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory.\n\n\nAll configuration is loaded before code.\n\n\n\n\nCode Loading\n\n\nCode is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder:\n\n\n\n\n\n\n$KDBCODE/common: shared codebase loaded by all processes;\n\n\n\n\n\n\n$KDBCODE/[proctype]: code for a specific process type;\n\n\n\n\n\n\n$KDBCODE/[procname]: code for a specific process name;\n\n\n\n\n\n\nFor any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded.\n\n\nAdditional directories can be loaded using the -loaddir command line\nparameter.\n\n\n\n\nInitialization Errors\n\n\nInitialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", - "title": "Getting Started" - }, - { - "location": "/gettingstarted/#getting-started", - "text": "kdb+ is very customisable. Customisations are contained in q scripts (.q\nfiles), which define functions and variables which modify the behaviour\nof a process. Every q process can load a single q script, or a directory\ncontaining q scripts and/or q data files. Hooks are provided to enable\nthe programmer to apply a custom function to each entry point of the\nprocess (.z.p*), to be invoked on the timer (.z.ts) or when a variable\nin the top level namespace is amended (.z.vs). By default none of these\nhooks are implemented. We provide a codebase and a single main script, torq.q. torq.q is\nessentially a wrapper for bespoke functionality which can load other\nscripts/directories, or can be sourced from other scripts. Whenever\npossible, torq.q should be invoked directly and used to load other\nscripts as required. torq.q will: ensure the environment is set up correctly; define some common utility functions (such as logging); execute process management tasks, such as discovering the name and\n type of the process, and re-directing output to log files; load configuration; load the shared code based; set up the message handlers; load any required bespoke scripts. The behavior of torq.q is modified by both command line parameters and\nconfiguration. We have tried to keep as much as possible in\nconfiguration files, but if the parameter either has a global effect on\nthe process or if it is required to be known before the configuration is\nread, then it is a command line parameter.", - "title": "Getting Started" - }, - { - "location": "/gettingstarted/#using-torqq", - "text": "torq.q can be invoked directly from the command line and be set to\nsource a specified file or directory. torq.q requires the 5 environment\nvariables to be set (see section\u00a0envvar). If using a unix\nenvironment, this can be done with the setenv.sh script. To start a\nprocess in the foreground without having to modify any other files (e.g.\nprocess.csv) you need to specify the type and name of the process as\nparameters. An example is below. $ . setenv.sh\n$ q torq.q -debug -proctype testproc -procname test1 To load a file, do: $ q torq.q -load myfile.q -debug -proctype testproc -procname test1 It can also be sourced from another script. If this is the case, some of\nthe variables can be overridden, and the usage information can be\nmodified or extended. Any variable that has a definition like below can\nbe overridden from the loading script. myvar:@[value;`myvar;1 2 3] The available command line parameters are: Cmd Line Param Description -procname x -proctype y The process name and process type -procfile x The name of the file to get the process information from -load x [y..z] The files or database directory to load -loaddir x [y..z] Load all .q, .k files in specified directories -localtime Sets processes running in local time rather than GMT for log messages, timer calls etc. The change is backwards compatible; without -localtime flag the process will print logs etc. in GMT but can also have a different .z.P -trap Any errors encountered during initialization when loading external files will be caught and logged, processing will continue -stop Stop loading the file if an error is encountered but do not exit -noredirect Do not redirect std out/std err to a file (useful for debugging) -noredirectalias Do not create an alias for the log files (aliases drop any suffix e.g. timestamp suffix) -noconfig Do not load configuration -nopi Reset the definition of .z.pi to the initial value (useful for debugging) -debug Equivalent to [-nopi -noredirect] -usage Print usage info and exit In addition any process variable in a namespace (.*.*) can be\noverridden from the command line. Any value supplied on the command line\nwill take priority over any other predefined value (.e.g. in a\nconfiguration or wrapper). Variable names should be supplied with full\nqualification e.g. -.servers.HOPENTIMEOUT 5000.", - "title": "Using torq.q" - }, - { - "location": "/gettingstarted/#environment-variables", - "text": "Five environment variables are required: Environment Variable Description KDBCONFIG The base configuration directory KDBCODE The base code directory KDBLOGS Where standard out/error and usage logs are written KDBHTML Contains HTML files KDBLIB Contains supporting library files torq.q will check for these and exit if they are not set. If torq.q is\nbeing sourced from another script, the required environment variables\ncan be extended by setting .proc.envvars before loading torq.q.", - "title": "Environment Variables" - }, - { - "location": "/gettingstarted/#process-identification", - "text": "At the crux of AquaQ TorQ is how processes identify themselves. This is\ndefined by two variables - .proc.proctype and .proc.procname which are\nthe type and name of the process respectively. These two values\ndetermine the code base and configuration loaded, and how they are\nconnected to by other processes. If both of these are not defined, the\nTorQ will attempt to use the port number a process was started on to\ndetermine the code base and configuration loaded. The most important of these is the proctype. It is up to the user to\ndefine at what level to specify a process type. For example, in a\nproduction environment it would be valid to specify processes of type\n\u201chdb\u201d (historic database) and \u201crdb\u201d (real time database). It would also\nbe valid to segregate a little more granularly based on approximate\nfunctionality, for example \u201chdbEMEA\u201d and \u201chdbAmericas\u201d. The actual\nfunctionality of a process can be defined more specifically, but this\nwill be discussed later. The procname value is used solely for\nidentification purposes. A process can determine its type and name in a\nnumber of ways: From the process file in the default location of\n $KDBCONFIG/process.csv; From the process file defined using the command line parameter\n -procfile; From the port number it is started on, by referring to the process\n file for further process details; Using the command line parameters -proctype and -procname; By defining .proc.proctype and .proc.procname in a script which\n loads torq.q. For options 4 and 5, both parameters must be defined using that method\nor neither will be used (the values will be read from the process file). For option 3, TorQ will check the process file for any entries where the\nport matches the port number it has been started on, and deduce it\u2019s\nproctype and procname based on this port number and the corresponding\nhostname entry. The process file has format as below. aquaq$ cat config/process.csv \nhost,port,proctype,procname\naquaq,9997,rdb,rdb_europe_1\naquaq,9998,hdb,hdb_europe_1\naquaq,9999,hdb,hdb_europa_2 The process will read the file and try to identify itself based on the\nhost and port it is started on. The host can either be the value\nreturned by .z.h, or the ip address of the server. If the process can\nnot automatically identify itself it will exit, unless proctype and\nprocname were both passed in as command line parameters. If both of\nthese parameters are passed in then default configuration settings will\nbe used.", - "title": "Process Identification" - }, - { - "location": "/gettingstarted/#logging", - "text": "By default, each process will redirect output to a standard out log and\na standard error log, and create aliases for them. These will be rolled\nat midnight on a daily basis. They are all written to the $KDBLOGS\ndirectory. The log files created are: Log File Description out_[procname]_[date].log Timestamped out log err_[procname]_[date].log Timestamped error log out_[procname].log Alias to current log log err_[procname].log Alias to current error log The date suffix can be overridden by modifying the .proc.logtimestamp\nfunction and sourcing torq.q from another script. This could, for\nexample, change the suffixing to a full timestamp.", - "title": "Logging" - }, - { - "location": "/gettingstarted/#configuration-loading", - "text": "", - "title": "Configuration Loading" - }, - { - "location": "/gettingstarted/#default-configuration-loading", - "text": "Default process configuration is contained in q scripts, and stored in\nthe $KDBCONFIG /settings directory. Each process tries to load all the\nconfiguration it can find and will attempt to load three configuration\nfiles in the below order:- default.q: default configuration loaded by all processes. In a\n standard installation this should contain the superset of\n customisable configuration, including comments; [[proctype]]{}.q: configuration for a specific process type; [[procname]]{}.q: configuration for a specific named process. The only one which should always be present is default.q. Each of the\nother scripts can contain a subset of the configuration variables, which\nwill override anything loaded previously.", - "title": "Default Configuration Loading" - }, - { - "location": "/gettingstarted/#application-configuration-loading", - "text": "Application specific configuration can be stored in a user defined\ndirectory and made visible to TorQ by setting the $KDBAPPCONFIG\nenvironment variable. If $KDBAPPCONFIG is set, then TorQ will search\nthe $KDBAPPCONFIG/settings directory and load all configuration it can\nfind. Application configuration will be loaded after all default\nconfiguration in the following order:- default.q: Application default configuration loaded by all\n processes. [[proctype]]{}.q: Application specific configuration for a\n specific process type. [[procname]]{}.q: Appliction specific configuration for a specific\n named process. All loaded configuration will override anything loaded previously. None\nof the above scripts are required to be present and can contain a subset\nof the default configuration variables from the default configuration\ndirectory. All configuration is loaded before code.", - "title": "Application Configuration Loading" - }, - { - "location": "/gettingstarted/#code-loading", - "text": "Code is loaded from the $KDBCODE directory. There is also a common\ncodebase, a codebase for each process type, and a code base for each\nprocess name, contained in the following directories and loaded in this\norder: $KDBCODE/common: shared codebase loaded by all processes; $KDBCODE/[proctype]: code for a specific process type; $KDBCODE/[procname]: code for a specific process name; For any directory loaded, the load order can be specified by adding\norder.txt to the directory. order.txt dictates the order that files in\nthe directory are loaded. If a file is not in order.txt, it will still\nbe loaded but after all the files listed in order.txt have been loaded. Additional directories can be loaded using the -loaddir command line\nparameter.", - "title": "Code Loading" - }, - { - "location": "/gettingstarted/#initialization-errors", - "text": "Initialization errors can be handled in different ways. The default\naction is any initialization error causes the process to exit. This is\nto enable fail-fast type conditions, where it is better for a process to\nfail entirely and immediately than to start up in an indeterminate\nstate. This can be overridden with the -trap or -stop command line\nparameters. With -trap, the process will catch the error, log it, and\ncontinue. This is useful if, for example, the error is encountered\nloading a file of stored procedures which may not be invoked and can be\nreloaded later. With -stop the process will halt at the point of the\nerror but will not exit. Both -stop and -trap are useful for debugging.", - "title": "Initialization Errors" - }, - { - "location": "/utilities/", - "text": "Utilities\n\n\nWe have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.\n\n\n\n\napi.q\n\n\nThis provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order.\n\n\nDefinitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition.\n\n\nWhether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace.\n\n\n.api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done.\n\n\n\n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 \n ..\n mmax | function .q 1 \n ..\n .clients.MAXIDLE | variable .clients 0 \n ..\n .access.MAXSIZE | variable .access 0 \n ..\n .cache.maxsize | variable .cache 1 \nThe maximum size in..\n .cache.maxindividual| variable .cache 1 \nThe maximum size in..\n max | primitive 1 \n ..\n q).api.f\nmax*\n \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n \n \n \n max | primitive 1 \n \n \n \n\n\n\n\n\n.api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches.\n\n\n.api.s is used to search function definitions for specific values.\n\n\nq).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE\ns:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n..\n\n\n\n.api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views.\n\n\nq).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n..\n\n\n\n.api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging.\n\n\nq)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g\n\n\n\n\n\ntimer.q\n\n\nkdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms).\n\n\nThere are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen\n\n\n\n\n\n\nmode 0 will reschedule for T0+P;\n\n\n\n\n\n\nmode 1 will reschedule for T1+P;\n\n\n\n\n\n\nmode 2 will reschedule for T2+P.\n\n\n\n\n\n\nBoth mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.\n\n\n\n\nasync.q\n\n\nkdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway):\n\n\n\n\n\n\ndeferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed;\n\n\n\n\n\n\nasynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result.\n\n\n\n\n\n\nThe code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results).\n\n\nq).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\"\n\n\n\n.async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready.\n\n\nq).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3\n\n\n\nFor more details, see .api.p\u201c.async.*\u201d.\n\n\n\n\ncache.q\n\n\ncache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries.\n\n\nThe result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold:\n\n\n\n\n\n\nthe function is run multiple times with the same parameters (perhaps\n different clients all want the same result set);\n\n\n\n\n\n\nthe result set changes infrequently or the clients can accept\n slightly out-of-date values;\n\n\n\n\n\n\nthe result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts.\n\n\n\n\n\n\nThe cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size.\n\n\nIf a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored.\n\n\nThe main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache.\n\n\nThe function is run and the result placed in the cache:\n\n\nq)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3\n\n\n\nThe second time round, the result set is returned immediately from the\ncache as we are within the staletime value:\n\n\nq)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3\n\n\n\nIf the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned:\n\n\nq)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3\n\n\n\nThe cache performance is tracked:\n\n\nq).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2\n\n\n\nSee .api.p.cache.*for more details.\n\n\n\n\nemail.q\n\n\nA library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details.\n\n\nThe main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nurl\n\n\nY\n\n\nsymbol\n\n\nURL of mail server e.g. smtp://mail.example.com\n\n\n\n\n\n\nuser\n\n\nY\n\n\nsymbol\n\n\nUsername of user to login as\n\n\n\n\n\n\npassword\n\n\nY\n\n\nsymbol\n\n\nPassword for user\n\n\n\n\n\n\nusessl\n\n\nN\n\n\nboolean\n\n\nConnect using SSL/TLS, defaults to false\n\n\n\n\n\n\nfrom\n\n\nN\n\n\nsymbol\n\n\nEmail from field, defaults to torq@aquaq.co.uk\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i\n\n\n\nThe email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure.\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nto\n\n\nY\n\n\nsymbol (list)\n\n\naddresses to send to\n\n\n\n\n\n\nsubject\n\n\nY\n\n\nchar list\n\n\nemail subject\n\n\n\n\n\n\nbody\n\n\nY\n\n\nlist of char lists\n\n\nemail body\n\n\n\n\n\n\ncc\n\n\nN\n\n\nsymbol (list)\n\n\ncc list\n\n\n\n\n\n\nbodyType\n\n\nN\n\n\nsymbol\n\n\ntype of email body. Can be `text or `html. Default is `text\n\n\n\n\n\n\ndebug\n\n\nN\n\n\ninteger\n\n\nDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1\n\n\n\n\n\n\n\n\nAn example is:\n\n\nq).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i\n\n\n\nNote that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time.\n\n\nTwo further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection.\n\n\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i\n\n\n\n.email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information.\n\n\nq).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n...\n\n\n\nAdditionally functions are available within the email library. See\n.api.p.email.*for more details.\n\n\nEmails with SSL certificates from Windows\n\n\nIf you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are:\n\n\n\n\n\n\ndownload\n \nthis\n\n and save it to your PC\n\n\n\n\n\n\nset\n\n\n CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt\n\n\n\n\n\n\n\nMore information is available\n\nhere\n\nand \nhere\n\n\n\n\ntimezone.q\n\n\nA slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.\n\n\n\n\ncompress.q\n\n\ncompress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table.\n\n\nThe utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed.\n\n\nCompression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.)\n\n\nThe compressionconfig.csv file should have the following format:\n\n\ntable,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7\n\n\n\nThis file can be placed in the config folder, or a path to the file\ngiven at run time.\n\n\nThe compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file.\n\n\nThis utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed:\n\n\n.cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nThis function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already.\n\n\nfullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n....\n\n\n\nTo then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles):\n\n\n.cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file\n\n\n\nTo run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use:\n\n\n.cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file\n\n\n\nLogs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio:\n\n\n|comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file.\n\n\n\nA table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab:\n\n\nfile algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n.....\n\n\n\nA note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.\n\n\n\n\ndataloader.q\n\n\nThis script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of \nthe data loader example on\ncode.kx\n.\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields:\n\n\n\n\n\n\n\n\nParameter\n\n\nReq\n\n\nType\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\nheaders\n\n\nY\n\n\nsymbol list\n\n\nNames of the header columns in the file\n\n\n\n\n\n\ntypes\n\n\nY\n\n\nchar list\n\n\nData types to read from the file\n\n\n\n\n\n\nseparator\n\n\nY\n\n\nchar[list]\n\n\nDelimiting character. Enlist it if first line of file is header data\n\n\n\n\n\n\ntablename\n\n\nY\n\n\nsymbol\n\n\nName of table to write data to\n\n\n\n\n\n\ndbdir\n\n\nY\n\n\nsymbol\n\n\nDirectory to write data to\n\n\n\n\n\n\npartitiontype\n\n\nN\n\n\nsymbol\n\n\nPartitioning to use. Must be one of\n\n\n\n\n\n\n`date`month`year`int. Default is `date\n\n\n\n\n\n\n\n\n\n\n\n\npartitioncol\n\n\nN\n\n\nsymbol\n\n\nColumn to use to extract partition information.Default is `time\n\n\n\n\n\n\ndataprocessfunc\n\n\nN\n\n\nfunction\n\n\nDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}\n\n\n\n\n\n\nchunksize\n\n\nN\n\n\nint\n\n\nData size in bytes to read in one chunk. Default is 100 MB\n\n\n\n\n\n\ncompression\n\n\nN\n\n\nint list\n\n\nCompression parameters to use e.g. 17 2 6. Default is empty list for no compression\n\n\n\n\n\n\ngc\n\n\nN\n\n\nboolean\n\n\nWhether to run garbage collection at appropriate points. Default is 0b (false)\n\n\n\n\n\n\n\n\nExample usage:\n\n\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]\n\n\n\n\n\nsubscriptions.q\n\n\nThe subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions).\n\n\n.sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant:\n\n\n.sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\n.sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants:\n\n\n.sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nThe subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants:\n\n\n.sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]\n\n\n\nSee .api.p\u201c.sub.*\u201d for more details.\n\n\n\n\npubsub.q\n\n\npubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.\n\n\n\n\ntplogutils.q\n\n\ntplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.\n\n\n\n\nmonitoringchecks.q\n\n\nmonitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure:\n\n\n\n\n\n\ntable sizes are increasing during live capture\n\n\n\n\n\n\nthe HDB data saves down correctly\n\n\n\n\n\n\nthe allocated memory of a process does not increase past a certain\n size\n\n\n\n\n\n\nthe size of the symbol list in memory doesn\u2019t grow to big\n\n\n\n\n\n\nthe process does not have too much on its pending subscriber queue\n\n\n\n\n\n\nThese checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.\n\n\n\n\nheartbeat.q\n\n\nheartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.\n\n\n\n\ndbwriteutils.q\n\n\nThis contains a set of utility functions for writing data to historic\ndatabases.\n\n\nSorting and Attributes\n\n\nThe sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration).\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\n\n\n\nAs an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true):\n\n\naquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0\n\n\n\nTo invoke the sort utilities, supply a list of (tablename; partitions)\ne.g.\n\n\nq).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table\n\n\n\nA different sort configuration file can be loaded with\n\n\n.sort.getsortcsv[`:file]\n\n\n\nGarbage Collection\n\n\nThe garbage collection utility prints some debug information before and\nafter the garbage collection.\n\n\nq).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n\n\n\nTable Manipulation\n\n\nThe table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.\n\n\n\n\nhelp.q\n\n\nThe standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[\ncode.kx\n].\n\n\nq)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date \n time casts\nverbs | verbs/functions\n\n\n\n\n\nhtml.q\n\n\nAn HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the \n.html\n namespace.\n\n\nModified u.q\n\n\nStarting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.\n\n\n\n\nFull API\n\n\nThe full public api can be found by running\n\n\nq).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n..\n\n\n\nCombined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions.\n\n\n\n\n\n\n\n\nNamespace\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.proc\n\n\nProcess API\n\n\n\n\n\n\n.lg\n\n\nStandard out/error logging API\n\n\n\n\n\n\n.err\n\n\nError throwing API\n\n\n\n\n\n\n.usage\n\n\nUsage logging API\n\n\n\n\n\n\n.access\n\n\nPermissions API\n\n\n\n\n\n\n.clients\n\n\nClient tracking API\n\n\n\n\n\n\n.servers\n\n\nServer tracking API\n\n\n\n\n\n\n.async\n\n\nAsync communication API\n\n\n\n\n\n\n.timer\n\n\nTimer API\n\n\n\n\n\n\n.cache\n\n\nCaching API\n\n\n\n\n\n\n.tz\n\n\nTimezone conversions API\n\n\n\n\n\n\n.checks\n\n\nMonitoring API\n\n\n\n\n\n\n.cmp\n\n\nCompression API\n\n\n\n\n\n\n.ps\n\n\nPublish and Subscribe API\n\n\n\n\n\n\n.hb\n\n\nHeartbeating API\n\n\n\n\n\n\n.loader\n\n\nData Loader API\n\n\n\n\n\n\n.sort\n\n\nData sorting and attribute setting API\n\n\n\n\n\n\n.sub\n\n\nSubscription API\n\n\n\n\n\n\n.gc\n\n\nGarbage Collection API\n\n\n\n\n\n\n.tplog\n\n\nTickerplant Log Replay API\n\n\n\n\n\n\n.api\n\n\nAPI management API\n\n\n\n\n\n\n\n\nAPI Table\n\n\n\n\n\n\n\n\nname\n\n\nvartype\n\n\nnamespace\n\n\ndescrip\n\n\nparams\n\n\nreturn\n\n\n\n\n\n\n\n\n\n\n.proc.createlog\n\n\nfunction\n\n\n.proc\n\n\nCreate the standard out and standard err log files. Redirect to them\n\n\n[string: log directory; string: name of the log file;mixed: timestamp suffix for the file (can be null); boolean: suppress the generation of an alias link]\n\n\nnull\n\n\n\n\n\n\n.proc.rolllogauto\n\n\nfunction\n\n\n.proc\n\n\nRoll the standard out/err log files\n\n\n[]\n\n\nnull\n\n\n\n\n\n\n.proc.loadf\n\n\nfunction\n\n\n.proc\n\n\nLoad the specified file\n\n\n[string: filename]\n\n\nnull\n\n\n\n\n\n\n.proc.loaddir\n\n\nfunction\n\n\n.proc\n\n\nLoad all the .q and .k files in the specified directory. If order.txt is found in the directory, use the ordering found in that file\n\n\n[string: name of directory]\n\n\nnull\n\n\n\n\n\n\n.proc.getattributes\n\n\nfunction\n\n\n.proc\n\n\nCalled by external processes to retrieve the attributes (advertised functionality) of this process\n\n\n[]\n\n\ndictionary of attributes\n\n\n\n\n\n\n.proc.override\n\n\nfunction\n\n\n.proc\n\n\nOverride configuration varibles with command line parameters. For example, if you set -.servers.HOPENTIMEOUT 5000 on the command line and call this function, then the command line value will be used\n\n\n[]\n\n\nnull\n\n\n\n\n\n\n.proc.overrideconfig\n\n\nfunction\n\n\n.proc\n\n\nOverride configuration varibles with values in supplied parameter dictionary. Generic version of .proc.override\n\n\n[dictionary: command line parameters. .proc.params should be used]\n\n\nnull\n\n\n\n\n\n\n.lg.o\n\n\nfunction\n\n\n.lg\n\n\nLog to standard out\n\n\n[symbol: id of log message; string: message]\n\n\nnull\n\n\n\n\n\n\n.lg.e\n\n\nfunction\n\n\n.lg\n\n\nLog to standard err\n\n\n[symbol: id of log message; string: message]\n\n\nnull\n\n\n\n\n\n\n.lg.l\n\n\nfunction\n\n\n.lg\n\n\nLog to either standard error or standard out, depending on the log level\n\n\n[symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters, used in the logging extension function]\n\n\nnull\n\n\n\n\n\n\n.lg.err\n\n\nfunction\n\n\n.lg\n\n\nLog to standard err\n\n\n[symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters, used in the logging extension function]\n\n\nnull\n\n\n\n\n\n\n.lg.ext\n\n\nfunction\n\n\n.lg\n\n\nExtra function invoked in standard logging function .lg.l. Can be used to do more with the log message, e.g. publish externally\n\n\n[symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters]\n\n\nnull\n\n\n\n\n\n\n.err.ex\n\n\nfunction\n\n\n.err\n\n\nLog to standard err, exit\n\n\n[symbol: id of log message; string: message; int: exit code]\n\n\nnull\n\n\n\n\n\n\n.err.usage\n\n\nfunction\n\n\n.err\n\n\nThrow a usage error and exit\n\n\n[]\n\n\nnull\n\n\n\n\n\n\n.err.param\n\n\nfunction\n\n\n.err\n\n\nCheck a dictionary for a set of required parameters. Print an error and exit if not all required are supplied\n\n\n[dict: parameters; symbol list: the required param values]\n\n\nnull\n\n\n\n\n\n\n.err.env\n\n\nfunction\n\n\n.err\n\n\nCheck if a list of required environment variables are set. If not, print an error and exit\n\n\n[symbol list: list of required environment variables]\n\n\nnull\n\n\n\n\n\n\n.usage.rolllogauto\n\n\nfunction\n\n\n.usage\n\n\nRoll the .usage txt files\n\n\n[]\n\n\nnull\n\n\n\n\n\n\n.usage.readlog\n\n\nfunction\n\n\n.usage\n\n\nRead and return a usage log file as a table\n\n\n[string: name of log file]\n\n\nnull\n\n\n\n\n\n\n.usage.logtodisk\n\n\nvariable\n\n\n.usage\n\n\nwhether to log to disk\n\n\n\n\n\n\n\n\n\n\n.usage.logtomemory\n\n\nvariable\n\n\n.usage\n\n\nwhether to log to .usage.usage\n\n\n\n\n\n\n\n\n\n\n.usage.ignore\n\n\nvariable\n\n\n.usage\n\n\nwhether to check the ignore list for functions to ignore\n\n\n\n\n\n\n\n\n\n\n.usage.ignorelist\n\n\nvariable\n\n\n.usage\n\n\nthe list of functions to ignore\n\n\n\n\n\n\n\n\n\n\n.usage.logroll\n\n\nvariable\n\n\n.usage\n\n\nwhether to automatically roll the log file\n\n\n\n\n\n\n\n\n\n\n.usage.usage\n\n\ntable\n\n\n.usage\n\n\nlog of messages through the message handlers\n\n\n\n\n\n\n\n\n\n\n.clients.clients\n\n\ntable\n\n\n.clients\n\n\ntable containing client handles and session values\n\n\n\n\n\n\n\n\n\n\n.sub.getsubscriptionhandles\n\n\nfunction\n\n\n.sub\n\n\nConnect to a list of processes of a specified type\n\n\n[symbol: process type to match; symbol: process name to match; dictionary:attributes of process]\n\n\ntable of process names, types and the handle connected on\n\n\n\n\n\n\n.sub.subscribe\n\n\nfunction\n\n\n.sub\n\n\nSubscribe to a table or list of tables and specified instruments\n\n\n[symbol (list):table names; symbol (list): instruments; boolean: whether to set the schema from the server; boolean: wether to replay the logfile; dictionary: procname,proctype,handle\n\n\n\n\n\n\n\n\n.pm.adduser\n\n\nfunction\n\n\n.pm\n\n\nAdds a user to be permissioned as well as setting their password and the method used to hash it.\n\n\n[symbol: the username; symbol: method used to authenticate; symbol: method used to hash the password; string: password, hashed using the proper method]\n\n\nnull\n\n\n\n\n\n\n.pm.addgroup\n\n\nfunction\n\n\n.pm\n\n\nAdd a group which will have access to certain tables and variables\n\n\n[symbol: the name of the group; string: a description of the group]\n\n\nnull\n\n\n\n\n\n\n.pm.addrole\n\n\nfunction\n\n\n.pm\n\n\nAdd a role which will have access to certain functions\n\n\n[symbol: the name of the role; string: a description of the role]\n\n\nnull\n\n\n\n\n\n\n.pm.addtogroup\n\n\nfunction\n\n\n.pm\n\n\nAdd a user to a group, giving them access to all of its variables\n\n\n[symbol: the name of the user to add; symbol: group the user is to be added to]\n\n\nnull\n\n\n\n\n\n\n.pm.assignrole\n\n\nfunction\n\n\n.pm\n\n\nAssign a user a role, giving them access to all of its functions\n\n\n[symbol: the name of the user to add; symbol: role the user is to be assigned to]\n\n\nnull\n\n\n\n\n\n\n.pm.grantaccess\n\n\nfunction\n\n\n.pm\n\n\nGive a group access to a variable\n\n\n[symbol: the name of the variable the group should get access to; symbol: group that is to be given this access; symbol: the type of access that should be given, eg. read, write]\n\n\nnull\n\n\n\n\n\n\n.pm.grantfunction\n\n\nfunction\n\n\n.pm\n\n\nGive a role access to a function\n\n\nsymbol: name of the function to be added; symbol: role that is to be given this access; TO CLARIFY\n\n\nnull\n\n\n\n\n\n\n.pm.createvirtualtable\n\n\nfunction\n\n\n.pm\n\n\nCreate a virtual table that a group might be able to access instead of the full table\n\n\n[symbol: new name of the table; symbol: name of the actual table t add; TO CLARIFY]\n\n\nnull\n\n\n\n\n\n\n.pm.cloneuser\n\n\nfunction\n\n\n.pm\n\n\nAdd a new user that is identical to another user\n\n\n[symbol: name of the new user; symbol: name of the user to be cloned; string: password of the new user]\n\n\nnull\n\n\n\n\n\n\n.access.addsuperuser\n\n\nfunction\n\n\n.access\n\n\nAdd a super user\n\n\n[symbol: user]\n\n\nnull\n\n\n\n\n\n\n.access.addpoweruser\n\n\nfunction\n\n\n.access\n\n\nAdd a power user\n\n\n[symbol: user]\n\n\nnull\n\n\n\n\n\n\n.access.adddefaultuser\n\n\nfunction\n\n\n.access\n\n\nAdd a default user\n\n\n[symbol: user]\n\n\nnull\n\n\n\n\n\n\n.access.readpermissions\n\n\nfunction\n\n\n.access\n\n\nRead the permissions from a directory\n\n\n[string: directory containing the permissions files]\n\n\nnull\n\n\n\n\n\n\n.access.USERS\n\n\ntable\n\n\n.access\n\n\nTable of users and their types\n\n\n\n\n\n\n\n\n\n\n.servers.opencon\n\n\nfunction\n\n\n.servers\n\n\nopen a connection to a process using the default timeout. If no user:pass supplied, the default one will be added if set\n\n\n[symbol: the host:port[:user:pass]]\n\n\nint: the process handle, null if the connection failed\n\n\n\n\n\n\n.servers.addh\n\n\nfunction\n\n\n.servers\n\n\nopen a connection to a server, store the connection details\n\n\n[symbol: the host:port:user:pass connection symbol]\n\n\nint: the server handle\n\n\n\n\n\n\n.servers.addw\n\n\nfunction\n\n\n.servers\n\n\nadd the connection details of a process behind the handle\n\n\n[int: server handle]\n\n\nnull\n\n\n\n\n\n\n.servers.addnthawc\n\n\nfunction\n\n\n.servers\n\n\nadd the details of a connection to the table\n\n\n[symbol: process name; symbol: process type; hpup: host:port:user:pass connection symbol; dict: attributes of the process; int: handle to the process;boolean: whether to check the handle is valid on insert\n\n\nint: the handle of the process\n\n\n\n\n\n\n.servers.getservers\n\n\nfunction\n\n\n.servers\n\n\nget a table of servers which match the given criteria\n\n\n[symbol: pick the server based on the name value or the type value. Can be either `procname`proctype; symbol(list): lookup values. ` for any; dict: requirements dictionary; boolean: whether to automatically open dead connections for the specified lookup values; boolean: if only one of each of the specified lookup values is required (means dead connections aren't opened if there is one available)]\n\n\ntable: processes details and requirements matches\n\n\n\n\n\n\n.servers.gethandlebytype\n\n\nfunction\n\n\n.servers\n\n\nget a server handle for the supplied type\n\n\n[symbol: process type; symbol: selection criteria. One of `roundrobin`any`last]\n\n\nint: handle of server\n\n\n\n\n\n\n.servers.gethpbytype\n\n\nfunction\n\n\n.servers\n\n\nget a server hpup connection symbol for the supplied type\n\n\n[symbol: process type; symbol: selection criteria. One of `roundrobin`any`last]\n\n\nsymbol: h:p:u:p connection symbol of server\n\n\n\n\n\n\n.servers.startup\n\n\nfunction\n\n\n.servers\n\n\ninitialise all the connections. Must processes should call this during initialisation\n\n\n[]\n\n\nnull\n\n\n\n\n\n\n.servers.refreshattributes\n\n\nfunction\n\n\n.servers\n\n\nrefresh the attributes registered with the discovery service. Should be called whenever they change e.g. end of day for an HDB\n\n\n[]\n\n\nnull\n\n\n\n\n\n\n.servers.SERVERS\n\n\ntable\n\n\n.servers\n\n\ntable containing server handles and session values\n\n\n\n\n\n\n\n\n\n\n.timer.repeat\n\n\nfunction\n\n\n.timer\n\n\nAdd a repeating timer with default next schedule\n\n\n[timestamp: start time; timestamp: end time; timespan: period; mixedlist: (function and argument list); string: description string]\n\n\nnull\n\n\n\n\n\n\n.timer.once\n\n\nfunction\n\n\n.timer\n\n\nAdd a one-off timer to fire at a specific time\n\n\n[timestamp: execute time; mixedlist: (function and argument list); string: description string]\n\n\nnull\n\n\n\n\n\n\n.timer.remove\n\n\nfunction\n\n\n.timer\n\n\nDelete a row from the timer schedule\n\n\n[int: timer id to delete]\n\n\nnull\n\n\n\n\n\n\n.timer.removefunc\n\n\nfunction\n\n\n.timer\n\n\nDelete a specific function from the timer schedule\n\n\n[mixedlist: (function and argument list)]\n\n\nnull\n\n\n\n\n\n\n.timer.rep\n\n\nfunction\n\n\n.timer\n\n\nAdd a repeating timer - more flexibility than .timer.repeat\n\n\n[timestamp: execute time; mixedlist: (function and argument list); short: scheduling algorithm for next timer; string: description string; boolean: whether to check if this new function is already present on the schedule]\n\n\nnull\n\n\n\n\n\n\n.timer.one\n\n\nfunction\n\n\n.timer\n\n\nAdd a one-off timer to fire at a specific time - more flexibility than .timer.once\n\n\n[timestamp: execute time; mixedlist: (function and argument list); string: description string; boolean: whether to check if this new function is already present on the schedule]\n\n\nnull\n\n\n\n\n\n\n.timer.timer\n\n\ntable\n\n\n.timer\n\n\nThe table containing the timer information\n\n\n\n\n\n\n\n\n\n\n.cache.execute\n\n\nfunction\n\n\n.cache\n\n\nCheck the cache for a valid result set, return the results if found, execute the function, cache it and return if not\n\n\n[mixed: function or string to execute;timespan: maximum allowable age of cache item if found in cache]\n\n\nmixed: result of function\n\n\n\n\n\n\n.cache.getperf\n\n\nfunction\n\n\n.cache\n\n\nReturn the performance statistics of the cache\n\n\n[]\n\n\ntable: cache performance\n\n\n\n\n\n\n.cache.maxsize\n\n\nvariable\n\n\n.cache\n\n\nThe maximum size in MB of the cache. This is evaluated using -22!, so may be incorrect due to power of 2 memory allocation. To be conservative and ensure it isn't exceeded, set max size to half of the actual max size that you want\n\n\n\n\n\n\n\n\n\n\n.cache.maxindividual\n\n\nvariable\n\n\n.cache\n\n\nThe maximum size in MB of an individual item in the cache. This is evaluated using -22!, so may be incorrect due to power of 2 memory allocation. To be conservative and ensure it isn't exceeded, set max size to half of the actual max size that you want\n\n\n\n\n\n\n\n\n\n\n.tz.dg\n\n\nfunction\n\n\n.tz\n\n\ndefault from GMT. Convert a timestamp from GMT to the default timezone\n\n\n[timestamp (list): timestamps to convert]\n\n\ntimestamp atom or list\n\n\n\n\n\n\n.tz.lg\n\n\nfunction\n\n\n.tz\n\n\nlocal from GMT. Convert a timestamp from GMT to the specified local timezone\n\n\n[symbol (list): timezone ids;timestamp (list): timestamps to convert]\n\n\ntimestamp atom or list\n\n\n\n\n\n\n.tz.gd\n\n\nfunction\n\n\n.tz\n\n\nGMT from default. Convert a timestamp from the default timezone to GMT\n\n\n[timestamp (list): timestamps to convert]\n\n\ntimestamp atom or list\n\n\n\n\n\n\n.tz.gl\n\n\nfunction\n\n\n.tz\n\n\nGMT from local. Convert a timestamp from the specified local timezone to GMT\n\n\n[symbol (list): timezone ids; timestamp (list): timestamps to convert]\n\n\ntimestamp atom or list\n\n\n\n\n\n\n.tz.ttz\n\n\nfunction\n\n\n.tz\n\n\nConvert a timestamp from a specified timezone to a specified destination timezone\n\n\n[symbol (list): destination timezone ids; symbol (list): source timezone ids; timestamp (list): timestamps to convert]\n\n\ntimestamp atom or list\n\n\n\n\n\n\n.tz.default\n\n\nvariable\n\n\n.tz\n\n\nDefault timezone\n\n\n\n\n\n\n\n\n\n\n.tz.t\n\n\ntable\n\n\n.tz\n\n\nTable of timestamp information\n\n\n\n\n\n\n\n\n\n\n.email.connectdefault\n\n\nfunction\n\n\n.email\n\n\nconnect to the default mail server specified in configuration\n\n\n[]\n\n\n\n\n\n\n\n\n.email.senddefault\n\n\nfunction\n\n\n.email\n\n\nconnect to email server if not connected. Send email using default settings\n\n\n[dictionary of email parameters. Required dictionary keys are to (symbol (list) of email address to send to), subject (character list), body (list of character arrays). Optional parameters are cc (symbol(list) of addresses to cc), bodyType (can be `html, default is `text), attachment (symbol (list) of files to attach), image (symbol of image to append to bottom of email. `none is no image), debug (int flag for debug level of connection library. 0i=no info, 1i=normal. 2i=verbose)]\n\n\nsize in bytes of sent email. -1 if failure\n\n\n\n\n\n\n.email.test\n\n\nfunction\n\n\n.email\n\n\nsend a test email\n\n\n[symbol(list):email address to send test email to]\n\n\nsize in bytes of sent email. -1 if failure\n\n\n\n\n\n\n.hb.addprocs\n\n\nfunction\n\n\n.hb\n\n\nAdd a set of process types and names to the heartbeat table to actively monitor for heartbeats. Processes will be automatically added and monitored when the heartbeats are subscribed to, but this is to allow for the case where a process might already be dead and so can't be subscribed to\n\n\n[symbol(list): process types; symbol(list): process names]\n\n\n\n\n\n\n\n\n.hb.processwarning\n\n\nfunction\n\n\n.hb\n\n\nCallback invoked if any process goes into a warning state. Default implementation is to do nothing - modify as required\n\n\n[table: processes currently in warning state]\n\n\n\n\n\n\n\n\n.hb.processerror\n\n\nfunction\n\n\n.hb\n\n\nCallback invoked if any process goes into an error state. Default implementation is to do nothing - modify as required\n\n\n[table: processes currently in error state]\n\n\n\n\n\n\n\n\n.hb.storeheartbeat\n\n\nfunction\n\n\n.hb\n\n\nStore a heartbeat update. This function should be added to you update callback when a heartbeat is received\n\n\n[table: the heartbeat table data to store]\n\n\n\n\n\n\n\n\n.hb.warningperiod\n\n\nfunction\n\n\n.hb\n\n\nReturn the warning period for a particular process type. Default is to return warningtolerance * publishinterval. Can be overridden as required\n\n\n[symbollist: the process types to return the warning period for]\n\n\ntimespan list of warning period\n\n\n\n\n\n\n.hb.errorperiod\n\n\nfunction\n\n\n.hb\n\n\nReturn the error period for a particular process type. Default is to return errortolerance * publishinterval. Can be overridden as required\n\n\n[symbollist: the process types to return the error period for]\n\n\ntimespan list of error period\n\n\n\n\n\n\n.rdb.moveandclear\n\n\nfunction\n\n\n.rdb\n\n\nMove a variable (table) from one namespace to another, deleting its contents. Useful during the end-of-day roll down for tables you do not want to save to the HDB\n\n\n[symbol: the namespace to move the table from; symbol:the namespace to move the variable to; symbol: the name of the variable]\n\n\nnull\n\n\n\n\n\n\n.api.f\n\n\nfunction\n\n\n.api\n\n\nFind a function/variable/table/view in the current process\n\n\n[string:search string]\n\n\ntable of matching elements\n\n\n\n\n\n\n.api.p\n\n\nfunction\n\n\n.api\n\n\nFind a public function/variable/table/view in the current process\n\n\n[string:search string]\n\n\ntable of matching public elements\n\n\n\n\n\n\n.api.u\n\n\nfunction\n\n\n.api\n\n\nFind a non-standard q public function/variable/table/view in the current process. This excludes the .q, .Q, .h, .o namespaces\n\n\n[string:search string]\n\n\ntable of matching public elements\n\n\n\n\n\n\n.api.s\n\n\nfunction\n\n\n.api\n\n\nSearch all function definitions for a specific string\n\n\n[string: search string]\n\n\ntable of matching functions and definitions\n\n\n\n\n\n\n.api.find\n\n\nfunction\n\n\n.api\n\n\nGeneric method for finding functions/variables/tables/views. f,p and u are based on this\n\n\n[string: search string; boolean (list): public flags to include; boolean: whether the search is context senstive\n\n\ntable of matching elements\n\n\n\n\n\n\n.api.search\n\n\nfunction\n\n\n.api\n\n\nGeneric method for searching all function definitions for a specific string. s is based on this\n\n\n[string: search string; boolean: whether the search is context senstive\n\n\ntable of matching functions and definitions\n\n\n\n\n\n\n.api.add\n\n\nfunction\n\n\n.api\n\n\nAdd a function to the api description table\n\n\n[symbol:the name of the function; boolean:whether it should be called externally; string:the description; dict or string:the parameters for the function;string: what the function returns]\n\n\nnull\n\n\n\n\n\n\n.api.fullapi\n\n\nfunction\n\n\n.api\n\n\nReturn the full function api table\n\n\n[]\n\n\napi table\n\n\n\n\n\n\n.api.m\n\n\nfunction\n\n\n.api\n\n\nReturn the ordered approximate memory usage of each variable and view in the process. Views will be re-evaluated if required\n\n\n[]\n\n\nmemory usage table\n\n\n\n\n\n\n.api.mem\n\n\nfunction\n\n\n.api\n\n\nReturn the ordered approximate memory usage of each variable and view in the process. Views are only returned if view flag is set to true. Views will be re-evaluated if required\n\n\n[boolean:return views]\n\n\nmemory usage table\n\n\n\n\n\n\n.api.whereami\n\n\nfunction\n\n\n.api\n\n\nGet the name of a supplied function definition. Can be used in the debugger e.g. .api.whereami[.z.s]\n\n\nfunction definition\n\n\nsymbol: the name of the current function\n\n\n\n\n\n\n.ps.publish\n\n\nfunction\n\n\n.ps\n\n\nPublish a table of data\n\n\n[symbol: name of table; table: table of data]\n\n\n\n\n\n\n\n\n.ps.subscribe\n\n\nfunction\n\n\n.ps\n\n\nSubscribe to a table and list of instruments\n\n\n[symbol(list): table name. ` for all; symbol(list): symbols to subscribe to. ` for all]\n\n\nmixed type list of table names and schemas\n\n\n\n\n\n\n.ps.initialise\n\n\nfunction\n\n\n.ps\n\n\nInitialise the pubsub routines. Any tables that exist in the top level can be published\n\n\n[]\n\n\n\n\n\n\n\n\n.async.deferred\n\n\nfunction\n\n\n.async\n\n\nUse async messaging to simulate sync communication\n\n\n[int(list): handles to query; query]\n\n\n(boolean list:success status; result list)\n\n\n\n\n\n\n.async.postback\n\n\nfunction\n\n\n.async\n\n\nSend an async message to a process and the results will be posted back within the postback function call\n\n\n[int(list): handles to query; query; postback function]\n\n\nboolean list: successful send status\n\n\n\n\n\n\n.cmp.showcomp\n\n\nfunction\n\n\n.cmp\n\n\nShow which files will be compressed and how; driven from csv file\n\n\n[`:/path/to/database; `:/path/to/configcsv; maxagefilestocompress]\n\n\ntable of files to be compressed\n\n\n\n\n\n\n.cmp.compressmaxage\n\n\nfunction\n\n\n.cmp\n\n\nRun compression on files using parameters specified in configuration csv file, and specifying the maximum age of files to compress\n\n\n[`:/path/to/database; `:/path/to/configcsv; maxagefilestocompress]\n\n\n\n\n\n\n\n\n.cmp.docompression\n\n\nfunction\n\n\n.cmp\n\n\nRun compression on files using parameters specified in configuration csv file\n\n\n[`:/path/to/database; `:/path/to/configcsv]\n\n\n\n\n\n\n\n\n.loader.loadallfiles\n\n\nfunction\n\n\n.loader\n\n\nGeneric loader function to read a directory of files in chunks and write them out to disk\n\n\n[dictionary of load parameters. Should have keys of headers (symbol list), types (character list), separator (character), tablename (symbol), dbdir (symbol). Optional params of dataprocessfunc (diadic function), datecol (name of column to extract date from: symbol), chunksize (amount of data to read at once:int), compression (compression parameters to use e.g. 16 1 0:int list), gc (boolean flag of whether to run garbage collection:boolean); directory containing files to load (symbol)]\n\n\n\n\n\n\n\n\n.sort.sorttab\n\n\nfunction\n\n\n.sort\n\n\nSort and set the attributes for a table and set of partitions based on a configuration file (default is $KDBCONFIG/sort.csv)\n\n\n[2 item list of (tablename e.g. `trade; partitions to sort and apply attributes to e.g. `:/hdb/2000.01.01/trade`:hdb/2000.01.02/trade)]\n\n\n\n\n\n\n\n\n.sort.getsortcsv\n\n\nfunction\n\n\n.sort\n\n\nRead in the sort csv from the specified location\n\n\n[symbol: the location of the file e.g. `:config/sort.csv]\n\n\n\n\n\n\n\n\n.gc.run\n\n\nfunction\n\n\n.gc\n\n\nRun garbage collection, print debug info before and after\n\n\n\n\n\n\n\n\n\n\n.mem.objsize\n\n\nfunction\n\n\n.mem\n\n\nReturns the calculated memory size in bytes used by an object. It may take a little bit of time for objects with lots of nested structures (e.g. lots of nested columns)\n\n\n[q object]\n\n\nsize of the object in bytes\n\n\n\n\n\n\n.tplog.check\n\n\nfunction\n\n\n.tplog\n\n\nChecks if tickerplant log can be replayed. If it can or can replay the first X messages, then returns the log handle, else it will read log as byte stream and create a good log and then return the good log handle\n\n\n[logfile (symbol), handle to the log file to check; lastmsgtoreplay (long), the index of the last message to be replayed from log ]\n\n\nhandle to log file, will be either the input log handle or handle to repaired log, depends on whether the log was corrupt", - "title": "Utilities" - }, - { - "location": "/utilities/#utilities", - "text": "We have provided several utility scripts, which either implement\ndeveloper aids or standard operations which are useful across processes.", - "title": "Utilities" - }, - { - "location": "/utilities/#apiq", - "text": "This provides a mechanism for documenting and publishing\nfunction/variable/table or view definitions within the kdb+ process. It\nprovides a search facility both by name and definition (in the case of\nfunctions). There is also a function for returning the approximate\nmemory usage of each variable in the process in descending order. Definitions are added using the .api.add function. A variable can be\nmarked as public or private, and given a description, parameter list and\nreturn type. The search functions will return all the values found which\nmatch the pattern irrespective of them having a pre-defined definition. Whether a value is public or private is defined in the definitions\ntable. If not found then by default all values are private, except those\nwhich live in the .q or top level namespace. .api.f is used to find a function, variable, table or view based on a\ncase-insensitive pattern search. If a symbol parameter is supplied, a\nwildcard search of *[suppliedvalue]* is done. If a string is\nsupplied, the value is used as is, meaning other non-wildcard regex\npattern matching can be done. \n q).api.f`max \n name | vartype namespace public descrip ..\n --------------------| -----------------------------------------------..\n maxs | function .q 1 ..\n mmax | function .q 1 ..\n .clients.MAXIDLE | variable .clients 0 ..\n .access.MAXSIZE | variable .access 0 ..\n .cache.maxsize | variable .cache 1 The maximum size in..\n .cache.maxindividual| variable .cache 1 The maximum size in..\n max | primitive 1 ..\n q).api.f max* \n name| vartype namespace public descrip params return\n ----| ------------------------------------------------\n maxs| function .q 1 \n max | primitive 1 .api.p is the same as .api.f, but only returns public functions. .api.u\nis as .api.p, but only includes user defined values i.e. it excludes q\nprimitives and values found in the .q, .Q, .h and .o namespaces.\n.api.find is a more general version of .api.f which can be used to do\ncase sensitive searches. .api.s is used to search function definitions for specific values. q).api.s\"*max*\" \nfunction definition ..\n---------------------------------------------------------------------..\n.Q.w \"k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\\\"..\n.clients.cleanup \"{if[count w0:exec w from`.clients.clients where ..\n.access.validsize \"{[x;y;z] $[superuser .z.u;x;MAXSIZE s:-22!x;x;'\\..\n.servers.getservers \"{[nameortype;lookups;req;autoopen;onlyone]\\n r:$..\n.cache.add \"{[function;id;status]\\n \\n res:value function;\\n.. .api.m is used to return the approximate memory usage of variables and\nviews in the process, retrieved using -22!. Views will be re-evaluated\nif required. Use .api.mem[0b] if you do not want to evaluate and\nreturn views. q).api.m[] \nvariable size sizeMB\n--------------------------------\n.tz.t 1587359 2 \n.help.TXT 15409 0 \n.api.detail 10678 0 \n.proc.usage 3610 0 \n.proc.configusage 1029 0 \n.. .api.whereami[lambda] can be used to retrieve the name of a function\ngiven its definition. This can be useful in debugging. q)g:{x+y} \nq)f:{20 + g[x;10]} \nq)f[10] \n40\nq)f[`a] \n{x+y}\n`type\n+\n`a\n10\nq)).api.whereami[.z.s] \n`..g", - "title": "api.q" - }, - { - "location": "/utilities/#timerq", - "text": "kdb+ provides a single timer function, .z.ts which is triggered with the\nfrequency specified by -t. We have provided an extension to allow\nmultiple functions to be added to the timer and fired when required. The\nbasic concept is that timer functions are registered in a table, with\n.z.ts periodically checking the table and running whichever functions\nare required. This is not a suitable mechanism where very high frequency\ntimers are required (e.g. sub 500ms). There are two ways a function can be added to a timer- either as a\nrepeating timer, or to fire at a specific time. When a repeating timer\nis specified, there are three options as to how the timer can be\nrescheduled. Assuming that a timer function with period P is scheduled\nto fire at time T0, actually fires at time T1 and finishes at time T2,\nthen mode 0 will reschedule for T0+P; mode 1 will reschedule for T1+P; mode 2 will reschedule for T2+P. Both mode 0 and mode 1 have the potential for causing the timer to back\nup if the finish time T2 is after the next schedule time. See\n.api.p\u201c.timer.*\u201dfor more details.", - "title": "timer.q" - }, - { - "location": "/utilities/#asyncq", - "text": "kdb+ processes can communicate with each using either synchronous or\nasynchronous calls. Synchronous calls expect a response and so the\nserver must process the request when it is received to generate the\nresult and return it to the waiting client. Asynchronous calls do not\nexpect a response so allow for greater flexibility. The effect of\nsynchronous calls can be replicated with asynchronous calls in one of\ntwo ways (further details in section\u00a0gateway): deferred synchronous: the client sends an async request, then blocks\n on the handle waiting for the result. This allows the server more\n flexibility as to how and when the query is processed; asynchronous postback: the client sends an async request which is\n wrapped in a function to be posted back to the client when the\n result is ready. This allows the server flexibility as to how and\n when the query is processed, and allows the client to continue\n processing while the server is generating the result. The code for both of these can get a little tricky, largely due to the\namount of error trapping required. We have provided two functions to\nallow these methods to be used more easily. .async.deferred takes a list\nof handles and a query, and will return a two item list of\n(success;results). q).async.deferred[3 5;({system\"sleep 1\";system\"p\"};())] \n1 1 \n9995 9996\nq).async.deferred[3 5;({x+y};1;2)] \n1 1\n3 3\nq).async.deferred[3 5;({x+y};1;`a)] \n0 0 \n\"error: server fail:type\" \"error: server fail:type\"\nq).async.deferred[3 5 87;({system\"sleep 1\";system\"p\"};())] \n1 1 0 \n9995i 9996i \"error: comm fail: failed to send query\" .async.postback takes a list of handles, a query, and the name or lambda\nof the postback function to return the result to. It will immediately\nreturn a success vector, and the results will be posted back to the\nclient when ready. q).async.postback[3 5;({system\"sleep 1\";system\"p\"};());`showresult] \n11b\nq) \nq)9995i\n9996i\n\nq).async.postback[3 5;({x+y};1;2);`showresult] \n11b\nq)3\n3\n\nq).async.postback[3 5;({x+y};1;`a);`showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5;({x+y};1;`a);showresult] \n11b\nq)\"error: server fail:type\"\n\"error: server fail:type\"\n\nq).async.postback[3 5 87;({x+y};1;2);showresult] \n110b\nq)3\n3 For more details, see .api.p\u201c.async.*\u201d.", - "title": "async.q" - }, - { - "location": "/utilities/#cacheq", - "text": "cache.q provides a mechanism for storing function results in a cache and\nreturning them from the cache if they are available and non stale. This\ncan greatly boost performance for frequently run queries. The result set cache resides in memory and as such takes up space. It is\nup to the programmer to determine which functions are suitable for\ncaching. Likely candidates are those where some or all of the following\nconditions hold: the function is run multiple times with the same parameters (perhaps\n different clients all want the same result set); the result set changes infrequently or the clients can accept\n slightly out-of-date values; the result set is not too large and/or is relatively expensive to\n produce. For example, it does not make sense to cache raw data\n extracts. The cache has a maximum size and a minimum size for any individual\nresult set, both of which are defined in the configuration file. Size\nchecks are done with -22! which will give an approximation (but\nunderestimate) of the result set size. In the worst case the estimate\ncould be half the size of the actual size. If a new result set is to be cached, the size is checked. Assuming it\ndoes not exceed the maximum individual size then it is placed in the\ncache. If the new cache size would exceed the maximum allowed space,\nother result sets are evicted from the cache. The current eviction\npolicy is to remove the least recently accessed result sets until the\nrequired space is freed. The cache performance is tracked in a table.\nCache adds, hits, fails, reruns and evictions are monitored. The main function to use the cache is .cache.execute[function;\nstaletime]. If the function has been executed within the last\nstaletime, then the result is returned from the cache. Otherwise the\nfunction is executed and placed in the cache. The function is run and the result placed in the cache: q)\\t r:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n2023\nq)r \n3 The second time round, the result set is returned immediately from the\ncache as we are within the staletime value: q)\\t r1:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:01] \n0\nq)r1 \n3 If the time since the last execution is greater than the required stale\ntime, the function is re-run, the cached result is updated, and the\nresult returned: q)\\t r2:.cache.execute[({system\"sleep 2\"; x+y};1;2);0D00:00] \n2008\nq)r2 \n3 The cache performance is tracked: q).cache.getperf[] \ntime id status function \n------------------------------------------------------------------\n2013.11.06D12:41:53.103508000 2 add {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:01.647731000 2 hit {system\"sleep 2\"; x+y} 1 2\n2013.11.06D12:42:53.930404000 2 rerun {system\"sleep 2\"; x+y} 1 2 See .api.p.cache.*for more details.", - "title": "cache.q" - }, - { - "location": "/utilities/#emailq", - "text": "A library file is provided to allow TorQ processes to send emails using\nan SMTP server. This is a wrapper around the standard libcurl library.\nThe library file is currently available for Windows (32 bit), Linux (32\nand 64 bit) and OSX (32 and 64 bit). The associated q script contains\ntwo main methods for creating a connection and sending emails. The email\nlibrary requires a modification to the path to find the required libs -\nsee the top of email.q for details. The main connection method .email.connect takes a single dictionary\nparameter and returns 0i for success and -1i for failure. Parameter Req Type Description url Y symbol URL of mail server e.g. smtp://mail.example.com user Y symbol Username of user to login as password Y symbol Password for user usessl N boolean Connect using SSL/TLS, defaults to false from N symbol Email from field, defaults to torq@aquaq.co.uk debug N integer Debug level. 0=no output, 1=normal output, 2=verbose output. Default is 1 An example is: q).email.connect[`url`user`password`from`usessl`debug!(`$\"smtp://mail.example.com:80\";`$\"torquser@aquaq.co.uk\";`hello;`$\"torquser@aquaq.co.uk\";0b;1i)]\n02 Jan 2015 11:45:19 emailConnect: url is set to smtp://mail.example.com:80\n02 Jan 2015 11:45:19 emailConnect: user is set to torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: password is set\n02 Jan 2015 11:45:19 emailConnect: from is set torquser@aquaq.co.uk\n02 Jan 2015 11:45:19 emailConnect: trying to connect\n02 Jan 2015 11:45:19 emailConnect: connected, socket is 5\n0i The email sending function .email.send takes a single dictionary\nparameter containing the details of the email to send. A connection must\nbe established before an email can be sent. The send function returns an\ninteger of the email length on success, or -1 on failure. Parameter Req Type Description to Y symbol (list) addresses to send to subject Y char list email subject body Y list of char lists email body cc N symbol (list) cc list bodyType N symbol type of email body. Can be `text or `html. Default is `text debug N integer Debug level. 0=no output, 1=normal output,2=verbose output. Default is 1 An example is: q).email.send[`to`subject`body`debug!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\");1i)]\n02 Jan 2015 12:39:29 sending email with subject: test email\n02 Jan 2015 12:39:29 email size in bytes is 16682\n02 Jan 2015 12:39:30 emailSend: email sent\n16682i Note that if emails are sent infrequently the library must re-establish\nthe connection to the mail server (this will be done automatically after\nthe initial connection). In some circumstances it may be better to batch\nemails together to send, or to offload email sending to separate\nprocesses as communication with the SMTP server can take a little time. Two further functions are available, .email.connectdefault and\n.email.senddefault. These are as above but will use the default\nconfiguration defined within the configuration files as the relevant\nparameters passed to the methods. In addition, .email.senddefault will\nautomatically establish a connection. q).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email\n2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful\n2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent\n16673i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\"))]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n16675i\nq).email.senddefault[`to`subject`body!(`$\"test@aquaq.co.uk\";\"test email 2\";(\"hi\";\"this is an email from torq\");`\"$/home/ashortt/example.txt\")]\n2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email\n2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent\n47338i .email.test will attempt to establish a connection to the default\nconfigured email server and send a test email to the specified address.\ndebug should be set to 2i (verbose) to extract the full information. q).email.debug:2i\nq).email.test `$\"test@aquaq.co.uk\"\n... Additionally functions are available within the email library. See\n.api.p.email.*for more details.", - "title": "email.q" - }, - { - "location": "/utilities/#emails-with-ssl-certificates-from-windows", - "text": "If you wish to send emails via an account which requires authentication\nfrom Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps\nas usessl must be true and Windows does not usually find the correct\ncertificate. The steps are: download\n this \n and save it to your PC set CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt More information is available here \nand here", - "title": "Emails with SSL certificates from Windows" - }, - { - "location": "/utilities/#timezoneq", - "text": "A slightly customised version of the timezone conversion functionality\nfrom code.kx. It loads a table of timezone information from\n$KDBCONFIG. See .api.p.tz.*for more details.", - "title": "timezone.q" - }, - { - "location": "/utilities/#compressq", - "text": "compress.q applies compression to any kdb+ database, handles all\npartition types including date, month, year, int, and can deal with top\nlevel splayed tables. It will also decompress files as required. Once\nthe compression/decompression is complete, summary statistics are\nreturned, with detailed statistics for each compressed or decompressed\nfile held in a table. The utility is driven by the configuration specified within a csv file.\nDefault parameters can be given, and these can be used to compress all\nfiles within the database. However, the compress.q utility also provides\nthe flexibility to compress different tables with different compression\nparameters, and different columns within tables using different\nparameters. A function is provided which will return a table showing\neach file in the database to be compressed, and how, before the\ncompression is performed. Compression is performed using the -19! operator, which takes 3\nparameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2\n- gzip), the compression blocksize as a power of 2 (between 12 and 19),\n and the level of compression to apply (from 0 - 9, applicable only for\n gzip). (For further information on -19! and the parameters used, see\n code.kx.com.) The compressionconfig.csv file should have the following format: table,minage,column,calgo,cblocksize,clevel\ndefault,20,default,2,17,6\ntrades,20,default,1,17,0\nquotes,20,asize,2,17,7\nquotes,20,bsize,2,17,7 This file can be placed in the config folder, or a path to the file\ngiven at run time. The compression utility compresses all tables and columns present in the\nHDB but not specified in the driver file according the default\nparameters. In effect, to compress an entire HDB using the same\ncompression parameters, a single row with name default would suffice. To\nspecify that a particular table should be compressed in a certain\ndifferent manner, it should be listed in the table. If default is given\nas the column for this table, then all of the columns of that table will\nbe compressed accordingly. To specify the compression parameters for\nparticular columns, these should be listed individually. For example,\nthe file above will compress trades tables 20 days old or more with an\nalgorithm of 1, and a blocksize of 17. The asize and bsize columns of\nany quotes tables older than 20 days old will be compressed using\nalgorithm 2, blocksize 17 and level 7. All other files present will be\ncompressed according to the default, using an algorithm 2, blocksize 17\nand compression level 6. To leave files uncompressed, you must specify\nthem explicitly in the table with a calgo of 0. If the file is already\ncompressed, note that an algorithm of 0 will decompress the file. This utility should be used with caution. Before running the compression\nit is recommended to run the function .cmp.showcomp, which takes three\nparameters - the path to the database, the path to the csv file, and the\nmaximum age of the files to be compressed: .cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file This function produces a table of the files to be compressed, the\nparameters with which they will be compressed, and the current size of\nthe file. Note that the current size column is calculated using hcount;\non a file which is already compressed this returns the uncompressed\nlength, i.e. this cannot be used as a signal as to whether the file is\ncompressed already. fullpath column table partition age calgo cblocksize clevel compressage currentsize\n-------------------------------------------------------------------------------------\n:/home/hdb/2013.11.05/depth/asize1 asize1 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize2 asize2 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/asize3 asize3 depth 2013.11.05 146 0 17 8 1 787960\n:/home/hdb/2013.11.05/depth/ask1 ask1 depth 2013.11.05 146 0 17 8 1 1575904\n.... To then run the compression function, use .cmp.compressmaxage with the\nsame parameters as .cmp.showcomp (hdb path, csv path, maximum age of\nfiles): .cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage] \n /- for using the csv file in the config folder\n.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage] \n /- to specify a file To run compression on all files in the database disregarding the maximum\nage of the files (i.e. from minage as specified in the configuration\nfile to infinitely old), then use: .cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv] \n /- for using the csv file in the config folder\n.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile] \n /- to specify a file Logs are produced for each file which is compressed or decompressed.\nOnce the utility is complete, the statistics of the compression are also\nlogged. This includes the memory savings in MB from compression, the\nadditional memory usage in MB for decompression, the total compression\nratio, and the total decompression ratio: |comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.\n|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .\n|comp1|INF|compression|Check .cmp.statstab for info on each file. A table with the compressed and decompressed length for each individual\nfile, in descending order of compression ratio, is also produced. This\ncan be found in .cmp.statstab: file algo compressedLength uncompressedLength compressionratio\n-----------------------------------------------------------------------------------\n:/hdb/2014.03.05/depth/asize1 2 89057 772600 8.675343\n:/hdb/2014.01.06/depth/asize1 2 114930 995532 8.662073\n:/hdb/2014.03.05/depth/bsize1 2 89210 772600 8.660464\n:/hdb/2014.03.12/depth/bsize1 2 84416 730928 8.658643\n:/hdb/2014.01.06/depth/bsize1 2 115067 995532 8.651759\n..... A note for windows users - windows supports compression only with a\ncompression blocksize of 16 or more.", - "title": "compress.q" - }, - { - "location": "/utilities/#dataloaderq", - "text": "This script contains some utility functions to assist in loading data\nfrom delimited files (e.g. comma separated, tab delimited). It is a more\ngeneric version of the data loader example on\ncode.kx .\nThe supplied functions allow data to be read in configurable size chunks\nand written out to the database. When all the data is written, the\non-disk data is re-sorted and the attributes are applied. The main\nfunction is .loader.loadalldata which takes two parameters- a dictionary\nof loading parameters and a directory containing the files to read. The\ndictionary should/can have the following fields: Parameter Req Type Description headers Y symbol list Names of the header columns in the file types Y char list Data types to read from the file separator Y char[list] Delimiting character. Enlist it if first line of file is header data tablename Y symbol Name of table to write data to dbdir Y symbol Directory to write data to partitiontype N symbol Partitioning to use. Must be one of `date`month`year`int. Default is `date partitioncol N symbol Column to use to extract partition information.Default is `time dataprocessfunc N function Diadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y} chunksize N int Data size in bytes to read in one chunk. Default is 100 MB compression N int list Compression parameters to use e.g. 17 2 6. Default is empty list for no compression gc N boolean Whether to run garbage collection at appropriate points. Default is 0b (false) Example usage: .loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;\"SP FI\";\",\";`trade;`:hdb); `:TDC/toload]\n.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;\"SP FI\";enlist\",\";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]", - "title": "dataloader.q" - }, - { - "location": "/utilities/#subscriptionsq", - "text": "The subscription utilities allow multiple subscriptions to different\ndata sources to be managed and maintained. Automatic resubscriptions in\nthe event of failure are possible, along as specifying whether the\nprocess will get the schema and replay the log file from the remote\nsource (e.g. in the case of tickerplant subscriptions). .sub.getsubscriptionhandles is used to get a table of processes to\nsubscribe to. The following can be used to return a table of all\nconnected processes of type tickerplant: .sub.getsubscriptionhandles[`tickerplant;`;()!()] .sub.subscribe is used to subscribe to a process for the supplied list\nof tables and instruments. For example, to subscribe to instruments A, B\nand C for the quote table from all tickerplants: .sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] The subscription method uses backtick for \u201call\u201d (which is the same as\nkdb+tick). To subscribe to all tables, all instruments, from all\ntickerplants: .sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()] See .api.p\u201c.sub.*\u201d for more details.", - "title": "subscriptions.q" - }, - { - "location": "/utilities/#pubsubq", - "text": "pubsub.q is essentially a placeholder script to allow publish and\nsubscribe functionality to be implemented. Licenced kdb+tick users can\nuse the publish and subscribe functionality implemented in u.[k|q]. If\nu.[k|q] is placed in the common code directory and loaded before\npubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt)\nthen publish and subscribe will be implemented. You can also build out\nthis file to add your own publish and subscribe routines as required.", - "title": "pubsub.q" - }, - { - "location": "/utilities/#tplogutilsq", - "text": "tplogutils.q contains functions for recovering tickerplant log files.\nUnder certain circumstances the tickerplant log file can become corrupt\nby having an invalid sequence of bytes written to it. A log file can be\nrecovered using a simple recovery method. However, this will only\nrecover messages up to the first invalid message. The recovery functions\ndefined in tplogutils.q allow all valid messages to be recovered from\nthe tickerplant log file.", - "title": "tplogutils.q" - }, - { - "location": "/utilities/#monitoringchecksq", - "text": "monitoringchecks.q implements a set of standard, basic monitoring\nchecks. They include checks to ensure: table sizes are increasing during live capture the HDB data saves down correctly the allocated memory of a process does not increase past a certain\n size the size of the symbol list in memory doesn\u2019t grow to big the process does not have too much on its pending subscriber queue These checks are intended to be run by the reporter process on a\nschedule, and any alerts emailed to an appropriate recipient list.", - "title": "monitoringchecks.q" - }, - { - "location": "/utilities/#heartbeatq", - "text": "heartbeat.q implements heartbeating, and relies on both timer.q and\npubsub.q. A table called heartbeat will be published periodically,\nallowing downstream processes to detect the availability of upstream\ncomponents. The heartbeat table contains a heartbeat time and counter.\nThe heartbeat script contains functions to handle and process heartbeats\nand manage upstream process failures. See .api.p.hb.*for details.", - "title": "heartbeat.q" - }, - { - "location": "/utilities/#dbwriteutilsq", - "text": "This contains a set of utility functions for writing data to historic\ndatabases.", - "title": "dbwriteutils.q" - }, - { - "location": "/utilities/#sorting-and-attributes", - "text": "The sort utilities allow the sort order and attributes of tables to be\nglobally defined. This helps to manage the code base when the data can\npotentially be written from multiple locations (e.g. written from the\nRDB, loaded from flat file, replayed from the tickerplant log). The\nconfiguration is defined in a csv which defaults to $KDBCONFG/sort.csv.\nThe default setup is that every table is sorted by sym and time, with a\np attribute on sym (this is the standard kdb+ tick configuration). aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1 As an example, assume we have an optiontrade table which we want to be\ndifferent from the standard set up. We would like the table to be sorted\nby optionticker and then time, with a p attribute on optionticker. We\nalso have a column called underlyingticker which we can put an attribute\non as it is derived from optionticker (so there is an element of\nde-normalisation present in the table). We also have an exchange field\nwhich we would like to put a g attribute on. All other tables we want to\nbe sorted and parted in the standard way. The configuration file would\nlook like this (sort order is derived from the order within the file\ncombined with the sort flag being set to true): aquaq$ tail config/sort.csv \ntabname,att,column,sort\ndefault,p,sym,1\ndefault,,time,1\noptiontrade,p,optionticker,1\noptiontrade,,exchtime,1\noptiontrade,p,underlyingticker,0\noptiontrade,g,exchange,0 To invoke the sort utilities, supply a list of (tablename; partitions)\ne.g. q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)\n2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table\n2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters\n2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/\n2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time\n2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/\n2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table A different sort configuration file can be loaded with .sort.getsortcsv[`:file]", - "title": "Sorting and Attributes" - }, - { - "location": "/utilities/#garbage-collection", - "text": "The garbage collection utility prints some debug information before and\nafter the garbage collection. q).gc.run[] \n2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB\n2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB", - "title": "Garbage Collection" - }, - { - "location": "/utilities/#table-manipulation", - "text": "The table manipulation utilities allow table manipulation routines to be\ndefined in a single place. This is useful when data can be written from\nmutliple different processes e.g. RDB, WDB, or tickerplant log replay.\nInstead of having to create a separate definition of customised\nmanipulation in each process, it can be done in a single location and\ninvokved in each process.", - "title": "Table Manipulation" - }, - { - "location": "/utilities/#helpq", - "text": "The standard help.q from code.kx provides help utilities in the console.\nThis should be kept up to date with\n[ code.kx ]. q)help` \nadverb | adverbs/operators\nattributes| data attributes\ncmdline | command line parameters\ndata | data types\ndefine | assign, define, control and debug\ndotz | .z locale contents\nerrors | error messages\nsave | save/load tables\nsyscmd | system commands\ntemporal | temporal - date time casts\nverbs | verbs/functions", - "title": "help.q" - }, - { - "location": "/utilities/#htmlq", - "text": "An HTML utility has been added to accompany the HTML5 front end for the\nMonitoring process. It includes functions to format dates, tables to csv\nto configure the HTML file to work on the correct process. It is\naccessible from the .html namespace.", - "title": "html.q" - }, - { - "location": "/utilities/#modified-uq", - "text": "Starting in kdb+ v3.4, the new broadcast feature has some performance\nbenefits. It works by serialising a message once before sending it\nasynchronously to a list of subscribers whereas the previous method\nwould serialise it separately for each subscriber. To take advantage of\nthis, we\u2019ve modified u.q. This can be turned off by setting .u.broadcast\nto false. It is enabled by default, but will only override default\npublishing if the kdb+ version being used is 3.4 or after.", - "title": "Modified u.q" - }, - { - "location": "/utilities/#full-api", - "text": "The full public api can be found by running q).api.u` \nname | vartype namespace public descrip ..\n-----------------| --------------------------------------------------..\n.proc.createlog | function .proc 1 \"Create the standard out..\n.proc.rolllogauto| function .proc 1 \"Roll the standard out/e..\n.proc.loadf | function .proc 1 \"Load the specified file..\n.proc.loaddir | function .proc 1 \"Load all the .q and .k ..\n.lg.o | function .lg 1 \"Log to standard out\" ..\n.. Combined with the commented configuration file, this should give a good\noverview of the functionality available. A description of the individual\nnamespaces is below- run .api.u namespace*to list the functions. Namespace Description .proc Process API .lg Standard out/error logging API .err Error throwing API .usage Usage logging API .access Permissions API .clients Client tracking API .servers Server tracking API .async Async communication API .timer Timer API .cache Caching API .tz Timezone conversions API .checks Monitoring API .cmp Compression API .ps Publish and Subscribe API .hb Heartbeating API .loader Data Loader API .sort Data sorting and attribute setting API .sub Subscription API .gc Garbage Collection API .tplog Tickerplant Log Replay API .api API management API", - "title": "Full API" - }, - { - "location": "/utilities/#api-table", - "text": "name vartype namespace descrip params return .proc.createlog function .proc Create the standard out and standard err log files. Redirect to them [string: log directory; string: name of the log file;mixed: timestamp suffix for the file (can be null); boolean: suppress the generation of an alias link] null .proc.rolllogauto function .proc Roll the standard out/err log files [] null .proc.loadf function .proc Load the specified file [string: filename] null .proc.loaddir function .proc Load all the .q and .k files in the specified directory. If order.txt is found in the directory, use the ordering found in that file [string: name of directory] null .proc.getattributes function .proc Called by external processes to retrieve the attributes (advertised functionality) of this process [] dictionary of attributes .proc.override function .proc Override configuration varibles with command line parameters. For example, if you set -.servers.HOPENTIMEOUT 5000 on the command line and call this function, then the command line value will be used [] null .proc.overrideconfig function .proc Override configuration varibles with values in supplied parameter dictionary. Generic version of .proc.override [dictionary: command line parameters. .proc.params should be used] null .lg.o function .lg Log to standard out [symbol: id of log message; string: message] null .lg.e function .lg Log to standard err [symbol: id of log message; string: message] null .lg.l function .lg Log to either standard error or standard out, depending on the log level [symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters, used in the logging extension function] null .lg.err function .lg Log to standard err [symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters, used in the logging extension function] null .lg.ext function .lg Extra function invoked in standard logging function .lg.l. Can be used to do more with the log message, e.g. publish externally [symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters] null .err.ex function .err Log to standard err, exit [symbol: id of log message; string: message; int: exit code] null .err.usage function .err Throw a usage error and exit [] null .err.param function .err Check a dictionary for a set of required parameters. Print an error and exit if not all required are supplied [dict: parameters; symbol list: the required param values] null .err.env function .err Check if a list of required environment variables are set. If not, print an error and exit [symbol list: list of required environment variables] null .usage.rolllogauto function .usage Roll the .usage txt files [] null .usage.readlog function .usage Read and return a usage log file as a table [string: name of log file] null .usage.logtodisk variable .usage whether to log to disk .usage.logtomemory variable .usage whether to log to .usage.usage .usage.ignore variable .usage whether to check the ignore list for functions to ignore .usage.ignorelist variable .usage the list of functions to ignore .usage.logroll variable .usage whether to automatically roll the log file .usage.usage table .usage log of messages through the message handlers .clients.clients table .clients table containing client handles and session values .sub.getsubscriptionhandles function .sub Connect to a list of processes of a specified type [symbol: process type to match; symbol: process name to match; dictionary:attributes of process] table of process names, types and the handle connected on .sub.subscribe function .sub Subscribe to a table or list of tables and specified instruments [symbol (list):table names; symbol (list): instruments; boolean: whether to set the schema from the server; boolean: wether to replay the logfile; dictionary: procname,proctype,handle .pm.adduser function .pm Adds a user to be permissioned as well as setting their password and the method used to hash it. [symbol: the username; symbol: method used to authenticate; symbol: method used to hash the password; string: password, hashed using the proper method] null .pm.addgroup function .pm Add a group which will have access to certain tables and variables [symbol: the name of the group; string: a description of the group] null .pm.addrole function .pm Add a role which will have access to certain functions [symbol: the name of the role; string: a description of the role] null .pm.addtogroup function .pm Add a user to a group, giving them access to all of its variables [symbol: the name of the user to add; symbol: group the user is to be added to] null .pm.assignrole function .pm Assign a user a role, giving them access to all of its functions [symbol: the name of the user to add; symbol: role the user is to be assigned to] null .pm.grantaccess function .pm Give a group access to a variable [symbol: the name of the variable the group should get access to; symbol: group that is to be given this access; symbol: the type of access that should be given, eg. read, write] null .pm.grantfunction function .pm Give a role access to a function symbol: name of the function to be added; symbol: role that is to be given this access; TO CLARIFY null .pm.createvirtualtable function .pm Create a virtual table that a group might be able to access instead of the full table [symbol: new name of the table; symbol: name of the actual table t add; TO CLARIFY] null .pm.cloneuser function .pm Add a new user that is identical to another user [symbol: name of the new user; symbol: name of the user to be cloned; string: password of the new user] null .access.addsuperuser function .access Add a super user [symbol: user] null .access.addpoweruser function .access Add a power user [symbol: user] null .access.adddefaultuser function .access Add a default user [symbol: user] null .access.readpermissions function .access Read the permissions from a directory [string: directory containing the permissions files] null .access.USERS table .access Table of users and their types .servers.opencon function .servers open a connection to a process using the default timeout. If no user:pass supplied, the default one will be added if set [symbol: the host:port[:user:pass]] int: the process handle, null if the connection failed .servers.addh function .servers open a connection to a server, store the connection details [symbol: the host:port:user:pass connection symbol] int: the server handle .servers.addw function .servers add the connection details of a process behind the handle [int: server handle] null .servers.addnthawc function .servers add the details of a connection to the table [symbol: process name; symbol: process type; hpup: host:port:user:pass connection symbol; dict: attributes of the process; int: handle to the process;boolean: whether to check the handle is valid on insert int: the handle of the process .servers.getservers function .servers get a table of servers which match the given criteria [symbol: pick the server based on the name value or the type value. Can be either `procname`proctype; symbol(list): lookup values. ` for any; dict: requirements dictionary; boolean: whether to automatically open dead connections for the specified lookup values; boolean: if only one of each of the specified lookup values is required (means dead connections aren't opened if there is one available)] table: processes details and requirements matches .servers.gethandlebytype function .servers get a server handle for the supplied type [symbol: process type; symbol: selection criteria. One of `roundrobin`any`last] int: handle of server .servers.gethpbytype function .servers get a server hpup connection symbol for the supplied type [symbol: process type; symbol: selection criteria. One of `roundrobin`any`last] symbol: h:p:u:p connection symbol of server .servers.startup function .servers initialise all the connections. Must processes should call this during initialisation [] null .servers.refreshattributes function .servers refresh the attributes registered with the discovery service. Should be called whenever they change e.g. end of day for an HDB [] null .servers.SERVERS table .servers table containing server handles and session values .timer.repeat function .timer Add a repeating timer with default next schedule [timestamp: start time; timestamp: end time; timespan: period; mixedlist: (function and argument list); string: description string] null .timer.once function .timer Add a one-off timer to fire at a specific time [timestamp: execute time; mixedlist: (function and argument list); string: description string] null .timer.remove function .timer Delete a row from the timer schedule [int: timer id to delete] null .timer.removefunc function .timer Delete a specific function from the timer schedule [mixedlist: (function and argument list)] null .timer.rep function .timer Add a repeating timer - more flexibility than .timer.repeat [timestamp: execute time; mixedlist: (function and argument list); short: scheduling algorithm for next timer; string: description string; boolean: whether to check if this new function is already present on the schedule] null .timer.one function .timer Add a one-off timer to fire at a specific time - more flexibility than .timer.once [timestamp: execute time; mixedlist: (function and argument list); string: description string; boolean: whether to check if this new function is already present on the schedule] null .timer.timer table .timer The table containing the timer information .cache.execute function .cache Check the cache for a valid result set, return the results if found, execute the function, cache it and return if not [mixed: function or string to execute;timespan: maximum allowable age of cache item if found in cache] mixed: result of function .cache.getperf function .cache Return the performance statistics of the cache [] table: cache performance .cache.maxsize variable .cache The maximum size in MB of the cache. This is evaluated using -22!, so may be incorrect due to power of 2 memory allocation. To be conservative and ensure it isn't exceeded, set max size to half of the actual max size that you want .cache.maxindividual variable .cache The maximum size in MB of an individual item in the cache. This is evaluated using -22!, so may be incorrect due to power of 2 memory allocation. To be conservative and ensure it isn't exceeded, set max size to half of the actual max size that you want .tz.dg function .tz default from GMT. Convert a timestamp from GMT to the default timezone [timestamp (list): timestamps to convert] timestamp atom or list .tz.lg function .tz local from GMT. Convert a timestamp from GMT to the specified local timezone [symbol (list): timezone ids;timestamp (list): timestamps to convert] timestamp atom or list .tz.gd function .tz GMT from default. Convert a timestamp from the default timezone to GMT [timestamp (list): timestamps to convert] timestamp atom or list .tz.gl function .tz GMT from local. Convert a timestamp from the specified local timezone to GMT [symbol (list): timezone ids; timestamp (list): timestamps to convert] timestamp atom or list .tz.ttz function .tz Convert a timestamp from a specified timezone to a specified destination timezone [symbol (list): destination timezone ids; symbol (list): source timezone ids; timestamp (list): timestamps to convert] timestamp atom or list .tz.default variable .tz Default timezone .tz.t table .tz Table of timestamp information .email.connectdefault function .email connect to the default mail server specified in configuration [] .email.senddefault function .email connect to email server if not connected. Send email using default settings [dictionary of email parameters. Required dictionary keys are to (symbol (list) of email address to send to), subject (character list), body (list of character arrays). Optional parameters are cc (symbol(list) of addresses to cc), bodyType (can be `html, default is `text), attachment (symbol (list) of files to attach), image (symbol of image to append to bottom of email. `none is no image), debug (int flag for debug level of connection library. 0i=no info, 1i=normal. 2i=verbose)] size in bytes of sent email. -1 if failure .email.test function .email send a test email [symbol(list):email address to send test email to] size in bytes of sent email. -1 if failure .hb.addprocs function .hb Add a set of process types and names to the heartbeat table to actively monitor for heartbeats. Processes will be automatically added and monitored when the heartbeats are subscribed to, but this is to allow for the case where a process might already be dead and so can't be subscribed to [symbol(list): process types; symbol(list): process names] .hb.processwarning function .hb Callback invoked if any process goes into a warning state. Default implementation is to do nothing - modify as required [table: processes currently in warning state] .hb.processerror function .hb Callback invoked if any process goes into an error state. Default implementation is to do nothing - modify as required [table: processes currently in error state] .hb.storeheartbeat function .hb Store a heartbeat update. This function should be added to you update callback when a heartbeat is received [table: the heartbeat table data to store] .hb.warningperiod function .hb Return the warning period for a particular process type. Default is to return warningtolerance * publishinterval. Can be overridden as required [symbollist: the process types to return the warning period for] timespan list of warning period .hb.errorperiod function .hb Return the error period for a particular process type. Default is to return errortolerance * publishinterval. Can be overridden as required [symbollist: the process types to return the error period for] timespan list of error period .rdb.moveandclear function .rdb Move a variable (table) from one namespace to another, deleting its contents. Useful during the end-of-day roll down for tables you do not want to save to the HDB [symbol: the namespace to move the table from; symbol:the namespace to move the variable to; symbol: the name of the variable] null .api.f function .api Find a function/variable/table/view in the current process [string:search string] table of matching elements .api.p function .api Find a public function/variable/table/view in the current process [string:search string] table of matching public elements .api.u function .api Find a non-standard q public function/variable/table/view in the current process. This excludes the .q, .Q, .h, .o namespaces [string:search string] table of matching public elements .api.s function .api Search all function definitions for a specific string [string: search string] table of matching functions and definitions .api.find function .api Generic method for finding functions/variables/tables/views. f,p and u are based on this [string: search string; boolean (list): public flags to include; boolean: whether the search is context senstive table of matching elements .api.search function .api Generic method for searching all function definitions for a specific string. s is based on this [string: search string; boolean: whether the search is context senstive table of matching functions and definitions .api.add function .api Add a function to the api description table [symbol:the name of the function; boolean:whether it should be called externally; string:the description; dict or string:the parameters for the function;string: what the function returns] null .api.fullapi function .api Return the full function api table [] api table .api.m function .api Return the ordered approximate memory usage of each variable and view in the process. Views will be re-evaluated if required [] memory usage table .api.mem function .api Return the ordered approximate memory usage of each variable and view in the process. Views are only returned if view flag is set to true. Views will be re-evaluated if required [boolean:return views] memory usage table .api.whereami function .api Get the name of a supplied function definition. Can be used in the debugger e.g. .api.whereami[.z.s] function definition symbol: the name of the current function .ps.publish function .ps Publish a table of data [symbol: name of table; table: table of data] .ps.subscribe function .ps Subscribe to a table and list of instruments [symbol(list): table name. ` for all; symbol(list): symbols to subscribe to. ` for all] mixed type list of table names and schemas .ps.initialise function .ps Initialise the pubsub routines. Any tables that exist in the top level can be published [] .async.deferred function .async Use async messaging to simulate sync communication [int(list): handles to query; query] (boolean list:success status; result list) .async.postback function .async Send an async message to a process and the results will be posted back within the postback function call [int(list): handles to query; query; postback function] boolean list: successful send status .cmp.showcomp function .cmp Show which files will be compressed and how; driven from csv file [`:/path/to/database; `:/path/to/configcsv; maxagefilestocompress] table of files to be compressed .cmp.compressmaxage function .cmp Run compression on files using parameters specified in configuration csv file, and specifying the maximum age of files to compress [`:/path/to/database; `:/path/to/configcsv; maxagefilestocompress] .cmp.docompression function .cmp Run compression on files using parameters specified in configuration csv file [`:/path/to/database; `:/path/to/configcsv] .loader.loadallfiles function .loader Generic loader function to read a directory of files in chunks and write them out to disk [dictionary of load parameters. Should have keys of headers (symbol list), types (character list), separator (character), tablename (symbol), dbdir (symbol). Optional params of dataprocessfunc (diadic function), datecol (name of column to extract date from: symbol), chunksize (amount of data to read at once:int), compression (compression parameters to use e.g. 16 1 0:int list), gc (boolean flag of whether to run garbage collection:boolean); directory containing files to load (symbol)] .sort.sorttab function .sort Sort and set the attributes for a table and set of partitions based on a configuration file (default is $KDBCONFIG/sort.csv) [2 item list of (tablename e.g. `trade; partitions to sort and apply attributes to e.g. `:/hdb/2000.01.01/trade`:hdb/2000.01.02/trade)] .sort.getsortcsv function .sort Read in the sort csv from the specified location [symbol: the location of the file e.g. `:config/sort.csv] .gc.run function .gc Run garbage collection, print debug info before and after .mem.objsize function .mem Returns the calculated memory size in bytes used by an object. It may take a little bit of time for objects with lots of nested structures (e.g. lots of nested columns) [q object] size of the object in bytes .tplog.check function .tplog Checks if tickerplant log can be replayed. If it can or can replay the first X messages, then returns the log handle, else it will read log as byte stream and create a good log and then return the good log handle [logfile (symbol), handle to the log file to check; lastmsgtoreplay (long), the index of the last message to be replayed from log ] handle to log file, will be either the input log handle or handle to repaired log, depends on whether the log was corrupt", - "title": "API Table" - }, - { - "location": "/handlers/", - "text": "Message Handlers\n\n\nThere is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to\n\ncode.kx\n.\n\n\nEvery external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file.\n\n\n\n\n\n\n\n\nScript\n\n\nNS\n\n\nDiag\n\n\nFunction\n\n\nModifies\n\n\n\n\n\n\n\n\n\n\nlogusage.q\n\n\n.usage\n\n\nY\n\n\nLog all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates\n\n\npw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer\n\n\n\n\n\n\ncontrolaccess.q\n\n\n.access\n\n\nN\n\n\nRestrict access for set of users/user groups to a list of functions, and from a defined set of servers\n\n\npw, pg, ps, ws, ph, pp, pi\n\n\n\n\n\n\ntrackclients.q\n\n\n.clients\n\n\nY\n\n\nTrack client process details including then number of requests and cumulative data size returned\n\n\npo, pg, ps, ws, pc\n\n\n\n\n\n\ntrackservers.q\n\n\n.servers\n\n\nY\n\n\nDiscover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service.\n\n\npc, timer\n\n\n\n\n\n\nzpsignore.q\n\n\n.zpsignore\n\n\nN\n\n\nOverride async message handler based on certain message patterns\n\n\nps\n\n\n\n\n\n\nwriteaccess.q\n\n\n.readonly\n\n\nN\n\n\nRestrict client write access to prevent any modification to data in place. Also disables all HTTP access.\n\n\npg, ps, ws, ph, pp\n\n\n\n\n\n\n\n\nEach customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files.\n\n\n/- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)\n\n\n\n\n\nlogusage.q\n\n\nlogusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx.\n\n\nIn its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because:\n\n\n\n\n\n\nlogging to memory enables easy interrogation of client interaction;\n\n\n\n\n\n\nlogging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail;\n\n\n\n\n\n\nlogging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution;\n\n\n\n\n\n\nlogging after a query captures the time taken, result set size and\n resulting state;\n\n\n\n\n\n\nlogging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems.\n\n\n\n\n\n\nThe following fields are logged in .usage.usage:\n\n\n\n\n\n\n\n\nField\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\ntime\n\n\nTime the row was added to the table\n\n\n\n\n\n\nid\n\n\nID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication\n\n\n\n\n\n\ntimer\n\n\nExecution time. Null for rows with status=b (before)\n\n\n\n\n\n\nzcmd\n\n\n.z handler the query arrived through\n\n\n\n\n\n\nstatus\n\n\nQuery status. One of b, c or e (before, complete, error)\n\n\n\n\n\n\na\n\n\nAddress of sender. .dotz.ipa can be used to convert from the integer format to a hostname\n\n\n\n\n\n\nu\n\n\nUsername of sender\n\n\n\n\n\n\nw\n\n\nHandle of sender\n\n\n\n\n\n\ncmd\n\n\nCommand sent\n\n\n\n\n\n\nmem\n\n\nMemory statistics\n\n\n\n\n\n\nsz\n\n\nSize of result. Null for rows with status of b or e\n\n\n\n\n\n\nerror\n\n\nError message\n\n\n\n\n\n\n\n\n\n\ncontrolaccess.q\n\n\ncontrolaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects:\n\n\n\n\n\n\nthe host/ip address of the servers which are allowed to access the\n process;\n\n\n\n\n\n\ndefinition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do;\n\n\n\n\n\n\nthe group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions;\n\n\n\n\n\n\nthe maximum size of the result set returned to a client.\n\n\n\n\n\n\nThe access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions.\n\n\n\n\n\n\n\n\nFile\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n*_hosts.csv\n\n\nContains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed\n\n\n\n\n\n\n*_users.csv\n\n\nContains individual users and the user groups they are are a member of\n\n\n\n\n\n\n*_functions.csv\n\n\nContains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users\n\n\n\n\n\n\n\n\nThe permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv.\n\n\nWhen a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.\n\n\n\n\ntrackclients.q\n\n\ntrackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service.\n\n\nWhenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.\n\n\n\n\ntrackservers.q\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.\n\n\n\n\nzpsignore.q\n\n\nzpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.\n\n\n\n\nwriteaccess.q\n\n\nwriteaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.\n\n\npermissions.q\n\n\npermissions.q is used to control client access to a server process. It\nallows:\n\n\n\n\n\n\nAccess control via username/password access, either in combination\n with the -u/U process flags or in place of them.\n\n\n\n\n\n\nDefinition of user groups, which control variable access.\n\n\n\n\n\n\nDefinition of user roles, which allow control over function\n execution.\n\n\n\n\n\n\nDeeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses.\n\n\n\n\n\n\nAccess restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions.\n\n\nPermissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself.\n\n\nThe access schema consists of 7 control tables:\n\n\n\n\n\n\n\n\nName\n\n\nDescriptions\n\n\n\n\n\n\n\n\n\n\nUser\n\n\nUsername, locality, encryption type and password hash\n\n\n\n\n\n\nUsergroup\n\n\nUser and their group.\n\n\n\n\n\n\nUserrole\n\n\nUser and role.\n\n\n\n\n\n\nFunctiongroup\n\n\nFunctions and their group\n\n\n\n\n\n\nFunction\n\n\nFunction names, the roles which can access them, and a lambda checking the parameters those roles can use.\n\n\n\n\n\n\nAccess\n\n\nVariable names, the groups which can access them, and the read or write access level.\n\n\n\n\n\n\nVirtualtable\n\n\nVirtual table name, main table name, and the where clause it enforces on access to that table.\n\n\n\n\n\n\n\n\nIn addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself.\n\n\nA user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g.\n\n\n\n\n\n\n\n\nTable\n\n\nGroup\n\n\nLevel\n\n\n\n\n\n\n\n\n\n\nquote\n\n\nheadtrader\n\n\nwrite\n\n\n\n\n\n\ntrade\n\n\njuniortrader\n\n\nread\n\n\n\n\n\n\n\n\nHere, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow.\n\n\nThe permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments.\n\n\nFunction access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar:\n\n\n\n\n\n\n\n\nFunction\n\n\nRole\n\n\nParam. Check\n\n\n\n\n\n\n\n\n\n\ntimedata\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\ntimedata\n\n\nnormal user\n\n\n{x[`bkttype] in `hh}\n\n\n\n\n\n\nselect\n\n\nquant\n\n\n{1b}\n\n\n\n\n\n\n\n\nThe parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check.\n\n\nFurther restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g.\n\n\n\n\n\n\n\n\nVirtual Table\n\n\nTable\n\n\nWhere Clause\n\n\n\n\n\n\n\n\n\n\ntrade_lse\n\n\ntrade\n\n\n,(in;`src;\u201cL\u201d)\n\n\n\n\n\n\nquote_new\n\n\nquote\n\n\n,(\n;`time;(-;`.z.p;01:00))\n\n\n\n\n\n\n\n\nWhen a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable.\n\n\nIf the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role.\n\n\nThe permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions.\n\n\nAdding to the groups and roles is handled by the functions:\n\n\nadduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"]\n\n\n\nwhich are further explained in the script API.\n\n\nPermission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.\n\n\nUsage Example\n\n\nTo connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so:\n\n\n.pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist(\n;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}]\n\n\n\nThis provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth.\n\n\nAdam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it.\n\n\nAdditionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined:\n\n\n.pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp]\n\n\n\nAnd then grant that role access to the .u.upd function:\n\n\n.pm.grantfunction[`.u.upd;`tp;{1b}]\n\n\n\nAlthough the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.\n\n\nGateway Example\n\n\nThe gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified.\n\n\nWithin the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}]\n\n\n\nSince .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables:\n\n\n.pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]\n\n\n\n\n\nDiagnostic Reporting\n\n\nThe message handler modifications provide a wealth of diagnostic\ninformation including:\n\n\n\n\n\n\nthe timings and memory usage for every query run on a process;\n\n\n\n\n\n\nfailed queries;\n\n\n\n\n\n\nclients trying to do things they are not permissioned for;\n\n\n\n\n\n\nthe clients which are querying often and/or regularly extracting\n large datasets;\n\n\n\n\n\n\nthe number of clients currently connected;\n\n\n\n\n\n\ntimer calls and how long they take.\n\n\n\n\n\n\nAlthough not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", - "title": "Handlers" - }, - { - "location": "/handlers/#message-handlers", - "text": "There is a separate code directory containing message handler\ncustomizations. This is found at $KDBCODE/handlers. Much of the code is\nderived from Simon Garland\u2019s contributions to code.kx . Every external interaction with a process goes through a message\nhandler, and these can be modified to, for example, log or restrict\naccess. Passing through a bespoke function defined in a message handler\nwill add extra processing time and therefore latency to the message. All\nthe customizations we have provided aim to minimise additional latency,\nbut if a bespoke process is latency sensitive then some or all of the\ncustomizations could be switched off. We would argue though that\ngenerally it is better to switch on all the message handler functions\nwhich provide diagnostic information, as for most non-latency sensitive\nprocesses (HDBs, Gateways, some RDBs etc.) the extra information upon\nfailure is worth the cost. The message handlers can be globally switched\noff by setting .proc.loadhandlers to 0b in the configuration file. Script NS Diag Function Modifies logusage.q .usage Y Log all client interaction to an ascii log file and/or in-memory table. Messages can be logged before and after they are processed. Timer calls are also logged. Exclusion function list can be applied to .z.ps to disable logging of asynchronous real time updates pw, po, pg, ps, pc, ws, ph, pp, pi, exit, timer controlaccess.q .access N Restrict access for set of users/user groups to a list of functions, and from a defined set of servers pw, pg, ps, ws, ph, pp, pi trackclients.q .clients Y Track client process details including then number of requests and cumulative data size returned po, pg, ps, ws, pc trackservers.q .servers Y Discover and track server processes including name, type and attribute information. This also contains the core of the code which can be used in conjunction with the discovery service. pc, timer zpsignore.q .zpsignore N Override async message handler based on certain message patterns ps writeaccess.q .readonly N Restrict client write access to prevent any modification to data in place. Also disables all HTTP access. pg, ps, ws, ph, pp Each customization can be turned on or off individually from the\nconfiguration file(s). Each script can be extensively customised using\nthe configuration file. Example customization for logusage.q, taken from\n$KDBCONFIG/settings/default.q is below. Please see default.q for the\nremaining configuration of the other message handler files. /- Configuration used by the usage functions - logging of client interaction\n\\d .usage\nenabled:1b /- whether the usage logging is enabled\nlogtodisk:1b /- whether to log to disk or not\nlogtomemory:1b /- write query logs to memory\nignore:1b /- check the ignore list for functions to ignore\nignorelist:(`upd;\"upd\") /- the list of functions to ignore in async calls\nflushtime:1D00 /- default value for how long to persist the\n /- in-memory logs. Set to 0D for no flushing\nsuppressalias:0b /- whether to suppress the log file alias creation\nlogtimestamp:{[].z.d} /- function to generate the log file timestamp suffix\nLEVEL:3 /- log level. 0=none;1=errors;2=errors+complete\n /- queries;3=errors+before a query+after\nlogroll:1b /- Whether or not to roll the log file\n /- automatically (on a daily schedule)", - "title": "Message Handlers" - }, - { - "location": "/handlers/#logusageq", - "text": "logusage.q is probably the most important of the scripts from a\ndiagnostic perspective. It is a modified version of the logusage.q\nscript on code.kx. In its most verbose mode it will log information to an in-memory table\n(.usage.usage) and an on-disk ASCII file, both before and after every\nclient interaction and function executed on the timer. These choices\nwere made because: logging to memory enables easy interrogation of client interaction; logging to disk allows persistence if the process fails or locks up.\n ASCII text files allow interrogation using OS tools such as vi, grep\n or tail; logging before a query ensures any query that adversely effects the\n process is definitely captured, as well as capturing some state\n information before the query execution; logging after a query captures the time taken, result set size and\n resulting state; logging timer calls ensures a full history of what the process is\n actually doing. Also, timer call performance degradation over time\n is a common source of problems in kdb+ systems. The following fields are logged in .usage.usage: Field Description time Time the row was added to the table id ID of the query. Normally before and complete rows will be consecutive but it might not be the case if the incoming call invokes further external communication timer Execution time. Null for rows with status=b (before) zcmd .z handler the query arrived through status Query status. One of b, c or e (before, complete, error) a Address of sender. .dotz.ipa can be used to convert from the integer format to a hostname u Username of sender w Handle of sender cmd Command sent mem Memory statistics sz Size of result. Null for rows with status of b or e error Error message", - "title": "logusage.q" - }, - { - "location": "/handlers/#controlaccessq", - "text": "controlaccess.q is used to restrict client access to the process. It is\nmodified version of controlaccess.q from code.kx. The script allows\ncontrol of several aspects: the host/ip address of the servers which are allowed to access the\n process; definition of three user groups (default, poweruser and superuser)\n and the actions each group is allowed to do; the group(s) each user is a member of, and any additional actions an\n individual user is allowed/disallowed outside of the group\n permissions; the maximum size of the result set returned to a client. The access restrictions are loaded from csv files. The permissions files\nare stored in $KDBCONFIG/permissions. File Description *_hosts.csv Contains hostname and ip address (patterns) for servers which are allowed or disallowed access. If a server is not found in the list, it is disallowed *_users.csv Contains individual users and the user groups they are are a member of *_functions.csv Contains individual functions and whether each user group is allowed to execute them. ; separated user list enables functions to be allowed by individual users The permissions files are loaded using a similar hierarchical approach\nas for the configuration and code loading. Three files can be provided-\ndefault_.csv, [proctype]_.csv, and [procname]_.csv. All of the\nfiles will be loaded, but permissions for the same entity (hostpattern,\nuser, or function) defined in [procname]_.csv will override those in\n[proctype]_.csv which will in turn override [procname]_.csv. When a client makes a query which is refused by the permissioning layer,\nan error will be raised and logged in .usuage.usage if it is enabled.", - "title": "controlaccess.q" - }, - { - "location": "/handlers/#trackclientsq", - "text": "trackclients.q is used to track client interaction. It is a slightly\nmodified version of trackclients.q from code.kx, and extends the\nfunctionality to handle interaction with the discovery service. Whenever a client opens a connection to the q process, it will be\nregistered in the .clients.clients table. Various details are logged,\nbut from a diagnostic perspective the most important information are the\nclient details, the number of queries it has run, the last time it ran a\nquery, the number of failed queries and the cumulative size of results\nreturned to it.", - "title": "trackclients.q" - }, - { - "location": "/handlers/#trackserversq", - "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. It is explained more in section\u00a0connectionmanagement.", - "title": "trackservers.q" - }, - { - "location": "/handlers/#zpsignoreq", - "text": "zpsignore.q is used to check incoming async calls for certain patterns\nand to bypass all further message handler checks for messages matching\nthe pattern. This is useful for handling update messages published to a\nprocess from a data source.", - "title": "zpsignore.q" - }, - { - "location": "/handlers/#writeaccessq", - "text": "writeaccess.q is used to restrict client write access to data within a\nprocess. The script uses the reval function, released in KDB+ 3.3, to\nprevent client queries from modifying any data in place. At present only\nqueries in the form of strings are passed through the reval function.\nAdditonally the script disables any form of HTTP access. If using\nversions of KDB+ prior to 3.3, this feature must be disabled. An attempt\nto use this feature on previous KDB+ versions will result in an error\nand the relevant process exiting.", - "title": "writeaccess.q" - }, - { - "location": "/handlers/#permissionsq", - "text": "permissions.q is used to control client access to a server process. It\nallows: Access control via username/password access, either in combination\n with the -u/U process flags or in place of them. Definition of user groups, which control variable access. Definition of user roles, which allow control over function\n execution. Deeper control over table subsetting through the use of \u201cvirtual\n tables\u201d, using enforced where clauses. Access restriction in TorQ can be enabled on all processes, each of\nwhich can then load the default.q in $KDBCONFIG/permissions/, which\nadds users, groups and roles allowing standard operation of TorQ. The\nadmin user and role by default can access all functions, and each of the\nsystem processes has access only to the required system functions. Permissions are enabled or disabled on a per-process basis through\nsetting .pm.enabled as 1b or 0b at process load (set to 0b by default).\nA permissioned process can safely interact with a non-permissioned\nprocess while still controlling access to itself. The access schema consists of 7 control tables: Name Descriptions User Username, locality, encryption type and password hash Usergroup User and their group. Userrole User and role. Functiongroup Functions and their group Function Function names, the roles which can access them, and a lambda checking the parameters those roles can use. Access Variable names, the groups which can access them, and the read or write access level. Virtualtable Virtual table name, main table name, and the where clause it enforces on access to that table. In addition to groupinfo and roleinfo tables, which contain the\ngroup/role name and a string describing each group and role. A user can\nbelong to multiple groups, and have multiple roles. In particular the\nschema supports group hierarchy, where a user group can be listed as a\nuser in the group table, and inherit all the permissions from another\nother group, effectively inheriting the second group itself. A user belonging to a group listed in the access table will have the\nspecified level of access (read or write) to that group\u2019s variables,\ne.g. Table Group Level quote headtrader write trade juniortrader read Here, users in headtrader will have write access to the quote table,\nwhile juniortrader group has read access to the trade table. If\nheadtraders have been set to inherit the juniortrader group, they will\nalso have read access to trade. Note that read access is distinct from\nwrite access. Headtraders in this circumstance do not have implicit read\naccess to the quote table. This control is for direct name access only.\nSelects, execs and updates are controlled via the function table, as\nbelow. The permissions script can be set to have permissive mode enabled with\npermissivemode:1b (disabled by default). When enabled at script loading,\nthis bypasses access checks on variables which are not listed in the\naccess table, effectively auto-whitelisting any variables not listed in\nthe access table for all users, which may be useful in partly restricted\ndevelopment environments. Function access is controlled through non-hierarchical roles. A user\nattempting to run a named function will have their access checked\nagainst the function table through their role, for example, trying to\nrun a function timedata[syms;bkttype], which selects from a table by a\ntime bucket type bkttype on xbar: Function Role Param. Check timedata quant {1b} timedata normal user {x[`bkttype] in `hh} select quant {1b} The parameter check in the third column must be a lambda accepting a\ndictionary of parameters and their values, which can then return a\nboolean if some parameter condition is met. Here, any normal user must\nhave their bucket type as an hour. If they try anything else, the\nfunction is not permitted. This could be extended to restriction to\ncertain syms as well, in this example, the quant can run this function\nwith any parameters. Anything passed to the param. check function\nreturns 1b. A quant having general select access is listed as having\n1b in the param. check. Further restriction of data can be achieved with virtual tables, via\nwhich users can be restricted to having a certain subset of data from a\nmain table available. To avoid the need to replicate a potentially large\nsubset of a table into a separately-controlled variable, this is done\nthrough pointing to the table under a different name via a where clause,\ne.g. Virtual Table Table Where Clause trade_lse trade ,(in;`src;\u201cL\u201d) quote_new quote ,( ;`time;(-;`.z.p;01:00)) When a select from trade_lse is performed, a select on trade is\nmodified to contain the where clause above. Access to virtual tables can\nbe controlled identically to access to real tables through the access\ntable. If the process is given the flag \u201c-public 1\u201d, it will run in public\naccess mode. This allows a user to log in without a password and be\ngiven the publicuser role and membership of the public group, which can\nbe configured as any other group or role. The permissions control has a default size restriction of 2GB, set (as\nbytes) on .pm.maxsize. This is a global restriction and is not affected\nby user permissions. Adding to the groups and roles is handled by the functions: adduser[`user;`locality;`hash type; md5\"password\"]\nremoveuser[`user]\naddgroup[`groupname; \"description\"]\nremovegroup[`groupname]\naddrole[`rolename; \"description\"]\nremoverole[`rolename]\naddtogroup[`user;`groupname]\nremovefromgroup[`user; `groupname]\nassignrole[`user; `rolename]\nunassignrole[`user; `rolename]\naddfunction[`function; `functiongroup]\nremovefunction[`function; `functiongroup]\ngrantaccess[`variable; `groupname; `level]\nrevokeaccess[`variable; `groupname; `level]\ngrantfunction[`function; `rolename; {paramCheckFn}]\nrevokefunction[`function; `rolename]\ncreatevirtualtable[`vtablename; `table; ,(whereclause)]\nremovevirtualtable[`vtablename]\ncloneuser[`user;`newuser;\"password\"] which are further explained in the script API. Permission control operates identically on the gateway. A user connected\nto the gateway must have access to the gateway, and their roles must\nhave access to the .gw.syncexec or .gw.asyncexec functions.", - "title": "permissions.q" - }, - { - "location": "/handlers/#usage-example", - "text": "To connect to a permissioned RDB in the TorQ system, a group and role\nfor the user must be established. If the RDB contains the tables trade,\nquote, and depth, and the process contains the functions getdata[syms,\nbkttype,bktsize] and hloc[table], restricted access would be\nconfigured like so: .pm.adduser[`adam;`local;`md5;md5\"pass\"]\n.pm.adduser[`bob;`local;`md5;md5\"pass\"]\n\n.pm.addtogroup[`adam;`fulluser]\n.pm.addtogroup[`bob;`partuser]\n.pm.addtogroup[`fulluser;`partuser]\n.pm.grantaccess[`quote;`fulluser;`read]\n.pm.grantaccess[`trade;`partuser;`read]\n\n.pm.createvirtualtable[`quotenew;`quote;enlist( ;`time;(-;`.z.p;01:00))]\n.pm.grantaccess[`quotenew;`partuser;`read]\n\n.pm.assignrole[`adam;`toplevel]\n.pm.assignrole[`bob;`lowlevel]\n.pm.grantfunction[`getdata;`toplevel;{1b}]\n.pm.grantfunction[`getdata;`lowlevel;{x[`syms] in `GOOG}]\n.pm.grantfunction[`hloc;`toplevel;{1b}]\n.pm.grantfunction[`hloc;`lowlevel;{x[`table] in `trade}] This provides a system in which Bob can access only the trade table,\nwhile Adam has access to the trade table and quote table (through\ninheritance from Bob\u2019s group). Through a virtual table, if Bob runs\n\u201cselect from quotenew\u201d, he is able to get a table of the last hour of\nquotes. When the system is started in normal mode, there is no IPC\naccess to the depth table, however if the system was started in\npermissive mode, in this case any user who could log in could access\ndepth. Adam can run the getdata function however he wants, and Bob can only run\nit against sym GOOG. Similarly Adam can run hloc against any table, but\nBob can only look at trade with it. Additionally, any system calls would need to be actively permissioned in\nthe same way, after defining a systemuser role (or expanding the default\nrole in TorQ). The superuser is given global function access by\nassigning them .pm.ALL in the function table, for example a tickerplant\npushing to the RDB would need to have a user and role defined: .pm.adduser[`ticker;`local;`md5;md5\"plant\"]\n.pm.assignrole[`ticker;`tp] And then grant that role access to the .u.upd function: .pm.grantfunction[`.u.upd;`tp;{1b}] Although the .u.upd function updates to a table, there is no need to\ngrant direct access to that table.", - "title": "Usage Example" - }, - { - "location": "/handlers/#gateway-example", - "text": "The gateway user will have superuser role by default. The execution of a\nfunction passed through the gateway is checked against the user who sent\nthe call. This should not be modified. Within the gateway itself, access to target processes can be controlled\nvia the function table. For example, if Adam in the previous example was\nallowed to access only the RDB with .gw.syncexec, you could use: .pm.grantfunction[`.gw.syncexec;`toplevel;{x[`1] in `rdb}] Since .gw.syncexec is a projection, the arguments supplied are checked\nin order, with dictionary keys `0`1`2... etc. This could be further\nextended to restrict access to queries with the\n.pm.allowed[user;query] function, which checks permissions of the\ncurrent user as listed on the gateway permission tables: .pm.grantfunction[`.gw.syncexec;`toplevel;\n {.pm.allowed[.z.u;x[`0]] and x[`1] in `rdb}]", - "title": "Gateway Example" - }, - { - "location": "/handlers/#diagnostic-reporting", - "text": "The message handler modifications provide a wealth of diagnostic\ninformation including: the timings and memory usage for every query run on a process; failed queries; clients trying to do things they are not permissioned for; the clients which are querying often and/or regularly extracting\n large datasets; the number of clients currently connected; timer calls and how long they take. Although not currently implemented, it would be straightforward to use\nthis information to implement reports on the behaviour of each process\nand the overall health of the system. Similarly it would be\nstraightforward to set up periodic publication to a central repository\nto have a single point for system diagnostic statistics.", - "title": "Diagnostic Reporting" - }, - { - "location": "/conn/", - "text": "Connection Management\n\n\ntrackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk\n\n\n\nConnections\n\n\nProcesses locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available.\n\n\nThe main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.\n\n\nProcess Attributes\n\n\nEach process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include:\n\n\n\n\n\n\nrange of data contained in the process;\n\n\n\n\n\n\navailable tables;\n\n\n\n\n\n\ninstrument universe;\n\n\n\n\n\n\nphysical location;\n\n\n\n\n\n\nany other fields of relevance.\n\n\n\n\n\n\nConnection Passwords\n\n\nThe password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.\n\n\nRetrieving and Using Handles\n\n\nA function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters:\n\n\n\n\n\n\ntype-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname);\n\n\n\n\n\n\ntypes-or-names: the types or names to retrieve e.g. hdb;\n\n\n\n\n\n\nrequired-attributes: the dictionary of attributes to match on;\n\n\n\n\n\n\nopen-dead-connections: whether to re-open dead connections;\n\n\n\n\n\n\nonly-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter.\n\n\n\n\n\n\n.servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes).\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\n\n\n\n.servers.getservers will try to automatically re-open connections if\nrequired.\n\n\nq).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n\n\nThere are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters:\n\n\n\n\n\n\ntypes: the type to retrieve e.g. hdb;\n\n\n\n\n\n\nselection-algorithm: can be one of any, last or roundrobin.\n\n\n\n\n\n\nConnecting To Non-TorQ Processes\n\n\nConnections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required.\n\n\nNon-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b.\n\n\nExample of nontorqprocess.csv file:\n\n\nhost,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02\n\n\n\nManually Adding And Using Connections\n\n\nConnections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.\n\n\nIPC types\n\n\nIn version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE.\n\n\nIn the settings example below, everything that connects to the\ntickerplant will use unix domain sockets.\n\n\n\\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix\n\n\n\nAttempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns.\n\n\nAt the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", - "title": "Connection Management" - }, - { - "location": "/conn/#connection-management", - "text": "trackservers.q is used to register and maintain handles to external\nservers. It is a heavily modified version of trackservers.q from\ncode.kx. All the options are described in the default config file. All\nconnections are tracked in the .servers.SERVERS table. When the handle\nis used the count and last query time are updated. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:13:10.583056000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.07D16:44:47.175757000 2014.01.07D16:44:47.174408000 ()!() \nrdb_europe_1 rdb :aquaq:9998 12 0 2014.01.07D16:46:47.897910000 2014.01.07D16:46:47.892901000 2014.01.07D16:46:44.626293000 `datacentre`country!`essex`uk\nrdb1 rdb :aquaq:5011 7 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nrdb_europe_1 hdb :aquaq:9997 0 2014.01.08D11:13:10.757801000 ()!() \nhdb1 hdb :aquaq:9999 0 2014.01.08D11:13:10.757801000 ()!() \nhdb2 hdb :aquaq:5013 8 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\nhdb1 hdb :aquaq:5012 9 0 2014.01.07D16:44:47.180684000 2014.01.07D16:44:47.176994000 `datacentre`country!`essex`uk\n\nq)last .servers.SERVERS \nprocname | `hdb2\nproctype | `hdb\nhpup | `:aquaq:5013\nw | 8i\nhits | 0i\nstartp | 2014.01.08D11:51:01.928045000\nlastp | 2014.01.08D11:51:01.925078000\nendp | 0Np\nattributes| `datacentre`country!`essex`uk", - "title": "Connection Management" - }, - { - "location": "/conn/#connections", - "text": "Processes locate other processes based on their process type. The\nlocation is done either statically using the process.csv file or\ndynamically using a discovery service. It is recommended to use the\ndiscovery service as it allows the process to be notified as new\nprocesses become available. The main configuration variable is .servers.CONNECTIONS, which dictates\nwhich process type(s) to create connections to. .servers.startup[]\nmust be called to initialise the connections. When connections are\nclosed, the connection table is automatically updated. The process can\nbe set to periodically retry connections.", - "title": "Connections" - }, - { - "location": "/conn/#process-attributes", - "text": "Each process can report a set of attributes. When process A connects to\nprocess B, process A will try to retrieve the attributes of process B.\nThe attributes are defined by the result of the .proc.getattributes\nfunction, which is by default an empty dictionary. Attributes are used\nto retrieve more detail about the capabilities of each process, rather\nthan relying on the broad brush process type and process name\ncategorization. Attributes can be used for intelligent query routing.\nPotential fields for attributes include: range of data contained in the process; available tables; instrument universe; physical location; any other fields of relevance.", - "title": "Process Attributes" - }, - { - "location": "/conn/#connection-passwords", - "text": "The password used by a process to connect to external processes is\nretrieved using the .servers.loadpassword function call. By default,\nthis will read the password from a txt file contained in\n$KDBCONFIG/passwords. A default password can be used, which is\noverridden by one for the process type, which is itself overridden by\none for the process name. For greater security, the\n.servers.loadpassword function should be modified.", - "title": "Connection Passwords" - }, - { - "location": "/conn/#retrieving-and-using-handles", - "text": "A function .servers.getservers is supplied to return a table of handle\ninformation. .servers.getservers takes five parameters: type-or-name: whether the lookup is to be done by type or name (can\n be either proctype or procname); types-or-names: the types or names to retrieve e.g. hdb; required-attributes: the dictionary of attributes to match on; open-dead-connections: whether to re-open dead connections; only-one: whether we only require one handle. So for example if 3\n services of the supplied type are registered, and we have an open\n handle to 1 of them, the open handle will be returned and the others\n left closed irrespective of the open-dead-connections parameter. .servers.getservers will compare the required parameters with the\navailable parameters for each handle. The resulting table will have an\nextra column called attribmatch which can be used to determine how good\na match the service is with the required attributes. attribmatch is a\ndictionary of (required attribute key) ! (Boolean full match;\nintersection of attributes). q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n---------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9996 0 2014.01.08D11:51:01.922390000 ()!() \ndiscovery2 discovery :aquaq:9995 6 0 2014.01.08D11:51:01.923812000 2014.01.08D11:51:01.922390000 ()!() \nrdb_europe_1 rdb :aquaq:9998 0 2014.01.08D11:51:38.347598000 ()!() \nrdb_europe_2 rdb :aquaq:9997 0 2014.01.08D11:51:38.347598000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\nhdb3 hdb :aquaq:5012 9 0 2014.01.08D11:51:38.349472000 2014.01.08D11:51:38.347598000 `datacentre`country!`essex`uk\nhdb2 hdb :aquaq:5013 8 0 2014.01.08D11:51:01.928045000 2014.01.08D11:51:01.925078000 `datacentre`country!`essex`uk\n\n/- pull back hdbs. Leave the attributes empty\nq).servers.getservers[`proctype;`hdb;()!();1b;f0b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk ()!() \nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk ()!()\n\n/- supply some attributes\nq).servers.getservers[`proctype;`hdb;(enlist`country)!enlist`uk;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk (,`country)!,(1b;,`uk)\nq).servers.getservers[`proctype;`hdb;`country`datacentre!`uk`slough;1b;0b] \nprocname proctype lastp w hpup attributes attribmatch \n-------------------------------------------------------------------------------\nhdb3 hdb 2014.01.08D11:51:38.347598000 9 :aquaq:5012 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$()))\nhdb2 hdb 2014.01.08D11:51:01.925078000 8 :aquaq:5013 `datacentre`country!`essex`uk `country`datacentre!((1b;,`uk);(0b;`symbol$())) .servers.getservers will try to automatically re-open connections if\nrequired. q).servers.getservers[`proctype;`rdb;()!();1b;0b] \n2014.01.08D12:01:06.023146000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9998\n2014.01.08D12:01:06.023581000|aquaq|gateway1|INF|conn|connection to :aquaq:9998 failed: hop: Connection refused\n2014.01.08D12:01:06.023597000|aquaq|gateway1|INF|conn|attempting to open handle to :aquaq:9997\n2014.01.08D12:01:06.023872000|aquaq|gateway1|INF|conn|connection to :aquaq:9997 failed: hop: Connection refused\nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!()\n\n/- If we only require one connection, and we have one open,then it doesn't retry connections\nq).servers.getservers[`proctype;`rdb;()!();1b;1b] \nprocname proctype lastp w hpup attributes attribmatch\n-------------------------------------------------------------------------------\nrdb1 rdb 2014.01.08D11:51:01.925078000 7 :aquaq:5011 `datacentre`country!`essex`uk ()!() There are two other functions supplied for retrieving server details,\nboth of which are based on .servers.getservers. .servers.gethandlebytype\nreturns a single handle value, .servers.gethpupbytype returns a single\nhost:port value. Both will re-open connections if there are not any\nvalid connections. Both take two parameters: types: the type to retrieve e.g. hdb; selection-algorithm: can be one of any, last or roundrobin.", - "title": "Retrieving and Using Handles" - }, - { - "location": "/conn/#connecting-to-non-torq-processes", - "text": "Connections to non-torq (external) processes can also be established.\nThis is useful if you wish to integrate TorQ with an existing\ninfrastructure. Any process can connect to external processes, or it can\nbe managed by the discovery service only. Every external process should\nhave a type and name in the same way as TorQ processes, to enable them\nto be located and used as required. Non-TorQ processes need to be listed by default in\n$KDBCONFIG/settings/nontorqprocess.csv. This file has the same format\nas the standard process.csv file. The location of the non-TorQ process\nfile can be adjusted using the .servers.NONTORQPROCESSFILE variable. To\nenable connections, set .servers.TRACKNONTORQPROCESS to 1b. Example of nontorqprocess.csv file: host,port,proctype,procname\naquaq,5533,hdb,extproc01\naquaq,5577,hdb,extproc02", - "title": "Connecting To Non-TorQ Processes" - }, - { - "location": "/conn/#manually-adding-and-using-connections", - "text": "Connections can also be manually added and used. See .api.p\u201c.servers.*\u201d\nfor details.", - "title": "Manually Adding And Using Connections" - }, - { - "location": "/conn/#ipc-types", - "text": "In version kdb+ v3.4, two new IPC connection types were added. These new\ntypes are unix domain sockets and SSL/TLS (tcps). The incoming\nconnections to a proctype can be set by updating .servers.SOCKETTYPE. In the settings example below, everything that connects to the\ntickerplant will use unix domain sockets. \\d .servers \nSOCKETTYPE:enlist[`tickerplant]!enlist `unix Attempting to open a unix domain socket connection to a process which\nhas an older kdb+ version will fail. We allow for processes to fallback\nto tcp if this happens by setting .servers.SOCKETFALLBACK to true. It\nwill not fallback if the connection error message returned is one of the\nfollowing : timeout, access. It will also not fallback for SSL/TLS\n(tcps) due to security concerns. At the time of writing, using unix domain sockets syntax on windows will\nappear to work whilst it\u2019s actually falling back to tcp in the\nbackground. This can be misleading so we disabled using them on windows.", - "title": "IPC types" - }, - { - "location": "/Processes/", - "text": "Processes\n\n\nA set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is:\n\n\naquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1\n\n\n\n\n\nDiscovery Service\n\n\nOverview\n\n\nProcesses use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections.\n\n\nThe discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery.\n\n\nTo run the discovery service, use a start line such as:\n\n\naquaq $ q torq.q -load code/processes/discovery.q -p 9995\n\n\n\nModify the configuration as required.\n\n\nOperation\n\n\n\n\n\n\nProcesses register with the discovery service.\n\n\n\n\n\n\n\n\nProcesses use the discovery service to locate other processes.\n\n\n\n\n\n\n\n\nWhen new services register, any processes which have registered an\n interest in that process type are notified.\n\n\n\n\n\n\n\n\nAvailable Processes\n\n\nThe list of available processes can be found in the .servers.SERVERS\ntable.\n\n\nq).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()\n\n\n\n\n\nGateway\n\n\nA synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.\n\n\n\n\nAsynchronous Behaviour\n\n\nAsynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens:\n\n\n\n\n\n\nthe query is placed in a queue;\n\n\n\n\n\n\nthe list of available servers is retrieved;\n\n\n\n\n\n\nthe queue is prioritised, so those queries with higher priority are\n serviced first;\n\n\n\n\n\n\nqueries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query;\n\n\n\n\n\n\nwhen all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client.\n\n\n\n\n\n\nThe two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc.\n\n\nAn asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.\n\n\nSynchronous Behaviour\n\n\nWhen using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.\n\n\nProcess Discovery\n\n\nThe gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.\n\n\nError Handling\n\n\nWhen synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when:\n\n\n\n\n\n\nthe client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately);\n\n\n\n\n\n\nthe query is timed out;\n\n\n\n\n\n\na back end server returns an error;\n\n\n\n\n\n\na back end server fails;\n\n\n\n\n\n\nthe join function fails.\n\n\n\n\n\n\nIf postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).\n\n\nClient Calls\n\n\nThere are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details.\n\n\n\n\n\n\n\n\nFunction\n\n\nDescription\n\n\n\n\n\n\n\n\n\n\n.gw.syncexec[query; servertypes]\n\n\nExecute the specified query synchronously against the required list of servers. If more than one server, the results will be razed.\n\n\n\n\n\n\n.gw.syncexecj[query; servertypes; joinfunction]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results.\n\n\n\n\n\n\n.gw.asyncexec[query; servertypes]\n\n\nExecute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results.\n\n\n\n\n\n\n.gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout]\n\n\nExecute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded.\n\n\n\n\n\n\n\n\nFor the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it.\n\n\nq).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk\n\n\n\nBoth the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB.\n\n\nq)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017\n\n\n\nRun the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line.\n\n\nq torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb\n\n\n\nStart a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds.\n\n\nq)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009\n\n\n\nIf a query is done for a server type which is not registered, an error\nis returned:\n\n\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other\n\n\n\nCustom join functions can be specified:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1\n\n\n\nCustom joins can fail with appropriate errors:\n\n\nq)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b\n\n\n\nAsynchronous queries must be sent in async and blocked:\n\n\nq)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\n\n\n\nWe can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time.\n\n\nq)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003\n\n\n\nAlternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function.\n\n\nq)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n\n\nAsynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required.\n\n\nq)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550\n\n\n\nNon kdb+ Clients\n\n\nAll the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the \nJava Grid\nViewer\n:\n\n\nimport java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n}\n\n\n\nSome of the unofficially supported APIs may only allow synchronous calls\nto be made.\n\n\n\n\nReal Time Database (RDB)\n\n\nThe Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include:\n\n\n\n\n\n\nTickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file;\n\n\n\n\n\n\nAutomatic re-connection and resubscription to tickerplant;\n\n\n\n\n\n\nList of tables to subscribe to supplied as configuration setting;\n\n\n\n\n\n\nMore pre-built flexibility in end-of-day;\n\n\n\n\n\n\nMore verbose end-of-day logging;\n\n\n\n\n\n\nReload multiple authenticated HDBs after end-of-day;\n\n\n\n\n\n\nEnd-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay\n\n\n\n\n\n\nSee the top of the file for more information.\n\n\n\n\nWrite Database (WDB)\n\n\nThe Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q:\n\n\n\n\n\n\nProvides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting;\n\n\n\n\n\n\nGreater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options;\n\n\n\n\n\n\nUse of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes;\n\n\n\n\n\n\nChecks whether to persist data to disk on a timer rather than on\n each tick;\n\n\n\n\n\n\nInforms other RDB, HDB and GW processes that end of day save and\n sort has completed;\n\n\n\n\n\n\nMore log information supplied.\n\n\n\n\n\n\nThe WDB process can broken down into two main functions:\n\n\n\n\n\n\nPeriodically saving data to disk and\n\n\n\n\n\n\nSorting data at end of day\n\n\n\n\n\n\nThe WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day).\n\n\nThe behaviour of the WDB process is controlled by the \n.wdb.mode\n\nparameter. This should be set to one of following three values:\n\n\n\n\n\n\nsaveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc.\n\n\n\n\n\n\nsave - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data\n\n\n\n\n\n\nsort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes\n\n\n\n\n\n\nWhen running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data.\n\n\nThe wdb process provides two methods for persisting data to disk and\nsorting at the end of the day.\n\n\n\n\n\n\ndefault - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to.\n\n\n\n\n\n\npartbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory.\n\n\nAt the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters.\n\n\n\n\n\n\nThe optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.\n\n\n\n\nTickerplant Log Replay\n\n\nThe Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for:\n\n\n\n\n\n\nhandling end of day save down failures;\n\n\n\n\n\n\nhandling large volumes of data (larger than can fit into RAM).\n\n\n\n\n\n\nThe process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can:\n\n\n\n\n\n\nreplay specific message ranges;\n\n\n\n\n\n\nreplay in manageable message chunks;\n\n\n\n\n\n\nrecover as many messages as possible from a log file rather than\n just stopping at the first bad message;\n\n\n\n\n\n\nignore specific tables;\n\n\n\n\n\n\nmodify the tables before or after they are saved;\n\n\n\n\n\n\napply sorting and parting after all the data is written out.\n\n\n\n\n\n\nThe process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be:\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1\n\n\n\nThe tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage.\n\n\nq torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage\n\n\n\n\n\nHousekeeping\n\n\nThe housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process:\n\n\n\n\n\n\nAllows for removing and zipping of directory files;\n\n\n\n\n\n\nProvides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter;\n\n\n\n\n\n\nReads all tasks from a single CSV;\n\n\n\n\n\n\nRuns on a user defined timer;\n\n\n\n\n\n\nCan be run immediately from command line or within the process;\n\n\n\n\n\n\nCan be easily extended to include new user defined housekeeping\n tasks.\n\n\n\n\n\n\nThe process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings:\n\n\n\n\n\n\nFunction details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping);\n\n\n\n\n\n\nPath specifies the directory that the files are in;\n\n\n\n\n\n\nMatch provides the search string to the find function, files\n returned will have names that match this string;\n\n\n\n\n\n\nExclude provides a second string to the find function, and these\n files are excluded from the match list;\n\n\n\n\n\n\nAge is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days).\n\n\n\n\n\n\nAn example csv file would be:\n\n\nfunction,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3\n\n\n\nThe process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror.\n\n\nThe remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv.\n\n\nAs well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion.\n\n\nHousekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag:\n\n\nq torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage\n\n\n\n\n\nFile Alerter\n\n\nThe file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can:\n\n\n\n\n\n\nrun more than one function on the specified file.\n\n\n\n\n\n\noptionally move the file to a new directory after running the\n function.\n\n\n\n\n\n\nstore a table of files that have already been processed.\n\n\n\n\n\n\nrun the function only on new files or run it every time the file is\n modified.\n\n\n\n\n\n\nignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified.\n\n\n\n\n\n\nThe file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows.\n\n\ninputcsv\n - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv.\n\n\npolltime\n - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute.\n\n\nalreadyprocessed\n - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran.\n\n\nskipallonstart\n - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0.\n\n\nThe files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow.\n\n\npath\n - This is the path to the directory that will be scanned for\nthe file.\n\n\nmatch\n - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d.\n\n\nfunction\n - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non.\n\n\nnewonly\n - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified.\n\n\nmovetodirectory\n - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved.\n\n\nIt is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like:\n\n\npath,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\"\n\n\n\nThe file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files.\n\n\nAfter the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it.\n\n\nThe file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be:\n\n\ncopy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"}\n\n\n\nAlthough the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session.\n\n\nEach stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner.\n\n\nThe file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.\n\n\n\n\nReporter\n\n\nOverview\n\n\nThe reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers.\n\n\n\n\nFeatures:\n\n\n\n\n\n\nEasily create a report for information that you want;\n\n\n\n\n\n\nFully customizable scheduling such as start time, end time and days\n of the week;\n\n\n\n\n\n\nRun reports repeatedly with a custom period between them;\n\n\n\n\n\n\nAsynchronous querying with custom timeout intervals;\n\n\n\n\n\n\nInbuilt result handlers allow reports to be written to file or\n published;\n\n\n\n\n\n\nCustom result handlers can be defined;\n\n\n\n\n\n\nLogs each step of the report process;\n\n\n\n\n\n\nFully integrated with the TorQ gateway to allow reports to be run\n across backend processes.\n\n\n\n\n\n\nThe reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table.\n\n\nTo run the reporter process:\n\n\nq torq.q -load code/processes/reporter.q -p 20004\n\n\n\nOnce the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.\n\n\nReport Configuration\n\n\nBy default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema.\n\n\n\n\n\n\n\n\nColumn Header\n\n\nDescription and Example\n\n\n\n\n\n\n\n\n\n\nname\n\n\nReport name e.g. Usage\n\n\n\n\n\n\nquery\n\n\nQuery to be evaluated on that process. It can be a string query or function\n\n\n\n\n\n\nresulthandler\n\n\nResult handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d]\n\n\n\n\n\n\ngateway\n\n\nIf non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway\n\n\n\n\n\n\njoinfunction\n\n\nUsed to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze\n\n\n\n\n\n\nproctype\n\n\nThe type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb\n\n\n\n\n\n\nprocname\n\n\nThe name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1\n\n\n\n\n\n\nstart\n\n\nTime on that day to start at e.g. 12:00\n\n\n\n\n\n\nend\n\n\nTime on that day that the report will stop at e.g. 23:00\n\n\n\n\n\n\nperiod\n\n\nThe period between each report query e.g. 00:00:10\n\n\n\n\n\n\ntimeoutinterval\n\n\nThe amount of time the reporter waits before timing out a report e.g. 00:00:30\n\n\n\n\n\n\ndaysofweek\n\n\nNumeric value required for the day of the week. Where 0 is Saturday and 2 is Monday\n\n\n\n\n\n\n\n\nWhen running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load.\n\n\nListing [code:csvschema] shows an example of the schema needed in the\ninput csv file.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6\n\n\n\nResult Handlers\n\n\nThere are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query).\n\n\nwritetofiletype\n - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be \nusage_rdb_2014_01_02_15_00_12.txt\n e.g.\n\n\nwritetofiletype[\"./output/\";\"usage\";\"csv\"]\n\n\n\nsplaytable\n - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g.\n\n\nsplaytable[\"./output/\";\"usage\"]\n\n\n\nemailalert\n - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions.\n\n\nemailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")]\n\n\n\nemailreport\n - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed.\n\n\nemailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"]\n\n\n\npublishresult\n - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.\n\n\nReport Process Tracking\n\n\nEach step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. \n\n\n\n\n\n\n\n\nStage symbol\n\n\nExplanation\n\n\n\n\n\n\n\n\n\n\nR\n\n\nThe query is currently running\n\n\n\n\n\n\nE\n\n\nAn error has occurred during the query\n\n\n\n\n\n\nC\n\n\nThe query has been completed with no errors\n\n\n\n\n\n\nT\n\n\nThe query has exceeded the timeout interval\n\n\n\n\n\n\nS\n\n\nSystem message e.g. \u201cReporter Process Initialised\u201d\n\n\n\n\n\n\n\n\ntime | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"\n\n\n\nSubscribing for Results\n\n\nTo publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol.\n\n\n/- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)\n\n\n\nExample reports\n\n\nThe following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the \n.Q.w[]\n information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime.\n\n\nname|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6\n\n\n\n\n\nMonitor\n\n\nThe Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived.\n\n\nRun it with:\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001\n\n\n\nIt is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded.\n\n\naquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap\n\n\n\nThe current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg\n\n\nq)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"\n\n\n\nHTML5 front end\n\n\nA HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include:\n\n\n\n\n\n\nHeartbeat table with processes that have warnings highlighted in\n orange and errors in red\n\n\n\n\n\n\nLog message table displaying the last 30 errors\n\n\n\n\n\n\nLog message error chart that is by default displayed in 5 minute\n bins\n\n\n\n\n\n\nChart\u2019s bin value can be changed on the fly\n\n\n\n\n\n\nResponsive design so works on all main devices i.e. phones, tablets\n and desktop\n\n\n\n\n\n\nIt is accessible by going to the url \nhttp://HOST:PORT/.non?monitorui\n\n\n\n\nCompression\n\n\nThe compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify\n\n\n\n\n\n\nthe compression configuration file to use\n\n\n\n\n\n\nthe database directory to compress\n\n\n\n\n\n\nthe maximum age of data to attempt to compress\n\n\n\n\n\n\nwhether the process should exit upon completion\n\n\n\n\n\n\nThe process is run like other TorQ processes:\n\n\nq torq.q -load code/processes/compression.q -p 20005\n\n\n\nModify the settings file or override variables from the command line as\nappropriate.\n\n\n\n\nKill\n\n\nThe kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way.\n\n\nIf run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable.\n\n\nq torq.q -load code/processes/kill.q -p 20000\n\n\n\n.servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable):\n\n\nq torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant\n\n\n\nThe kill process can also be used to kill only specific named processes\nwithin the process types:\n\n\nq torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2\n\n\n\n\n\nChained Tickerplant\n\n\nIn tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis.\n\n\nThe chained tickerplant can:\n\n\n\n\n\n\nsubscribe to specific tables and syms\n\n\n\n\n\n\nbatch publish at an interval or publish tick by tick\n\n\n\n\n\n\ncreate a tickerplant log that its real time subscribers can replay\n\n\n\n\n\n\nreplay the source tickerplant log\n\n\n\n\n\n\nTo launch the chained tickerplant\n\n\nq torq.q -load code/processes/chainedtp.q -p 12009\n\n\n\nChained tickerplant settings are found in \nconfig/settings/chainedtp.q\n\nand are under the \n.ctp\n namespace.\n\n\n\n\n\n\n\n\nSetting\n\n\nExplanation\n\n\nDefault\n\n\n\n\n\n\n\n\n\n\ntickerplantname\n\n\nlist of tickerplant names to try and make a connection to\n\n\n`tickerplant1\n\n\n\n\n\n\npubinterval\n\n\npublish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick\n\n\n0D00:00:00\n\n\n\n\n\n\ntpconnsleep\n\n\nnumber of seconds between attempts to connect to the source tickerplant\n\n\n10\n\n\n\n\n\n\ncreatelogfile\n\n\ncreate a log file\n\n\n0b\n\n\n\n\n\n\nlogdir\n\n\ndirectory containing chained tickerplant logs\n\n\n`:hdb\n\n\n\n\n\n\nsubscribeto\n\n\nsubscribe to these tables only (null for all)\n\n\n`\n\n\n\n\n\n\nsubscribesyms\n\n\nsubscribe to these syms only (null for all)\n\n\n`\n\n\n\n\n\n\nreplay\n\n\nreplay the tickerplant log file\n\n\n0b\n\n\n\n\n\n\nschema\n\n\nretrieve schema from tickerplant\n\n\n1b\n\n\n\n\n\n\nclearlogonsubscription\n\n\nclear log on subscription, only called if createlogfile is also enabled\n\n\n0b\n\n\n\n\n\n\n\n\n\n\nIntegration with kdb+tick\n\n\nAquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", - "title": "Processes" - }, - { - "location": "/Processes/#processes", - "text": "A set of processes is included. These processes build upon AquaQ TorQ,\nproviding specific functionality. All the process scripts are contained\nin $KDBCODE/processes. All processes should have an entry in\n$KDBCONFIG/process.csv. All processes can have any type and name,\nexcept for discovery services which must have a process type of\n\u201cdiscovery\u201d. An example process.csv is: aquaq$ cat config/process.csv\nhost,port,proctype,procname\naquaq,9998,rdb,rdb_europe_1\naquaq,9997,hdb,rdb_europe_1aquaq,9999,hdb,hdb1\naquaq,9996,discovery,discovery1\naquaq,9995,discovery,discovery2\naquaq,8000,gateway,gateway1\naquaq,5010,tickerplant,tickerplant1\naquaq,5011,rdb,rdb1\naquaq,5012,hdb,hdb1\naquaq,5013,hdb,hdb2\naquaq,9990,tickerlogreplay,tpreplay1\naquaq,20000,kill,killhdbs\naquaq,20001,monitor,monitor1\naquaq,20002,housekeeping,hk1", - "title": "Processes" - }, - { - "location": "/Processes/#discovery-service", - "text": "", - "title": "Discovery Service" - }, - { - "location": "/Processes/#overview", - "text": "Processes use the discovery service to register their own availability,\nfind other processes (by process type) and subscribe to receive updates\nfor new process availability (by process type). The discovery service\ndoes not manage connections- it simply returns tables of registered\nprocesses, irrespective of their current availability. It is up to each\nindividual process to manage its own connections. The discovery service uses the process.csv file to make connections to\nprocesses on start up. After start up it is up to each individual\nprocess to attempt connections and register with the discovery service.\nThis is done automatically, depending on the configuration parameters.\nMultiple discovery services can be run in which case each process will\ntry to register and retrieve process details from each discovery process\nit finds in its process.csv file. Discovery services do not replicate\nbetween themselves. A discovery process must have its process type\nlisted as discovery. To run the discovery service, use a start line such as: aquaq $ q torq.q -load code/processes/discovery.q -p 9995 Modify the configuration as required.", - "title": "Overview" - }, - { - "location": "/Processes/#operation", - "text": "Processes register with the discovery service. Processes use the discovery service to locate other processes. When new services register, any processes which have registered an\n interest in that process type are notified.", - "title": "Operation" - }, - { - "location": "/Processes/#available-processes", - "text": "The list of available processes can be found in the .servers.SERVERS\ntable. q).servers.SERVERS \nprocname proctype hpup w hits startp lastp endp attributes \n-------------------------------------------------------------------------------------\ndiscovery1 discovery :aquaq:9995 0 2014.01.22D17:00:40.947470000 ()!() \ndiscovery2 discovery :aquaq:9996 0 2014.01.22D17:00:40.947517000 ()!() \nhdb2 hdb :aquaq:5013 0 2014.01.22D17:00:40.947602000 ()!() \nkilltick kill :aquaq:20000 0 2014.01.22D17:00:40.947602000 ()!() \ntpreplay1 tickerlogreplay :aquaq:20002 0 2014.01.22D17:00:40.947602000 ()!() \ntickerplant1 tickerplant :aquaq:5010 6 0 2014.01.22D17:00:40.967699000 2014.01.22D17:00:40.967698000 ()!() \nmonitor1 monitor :aquaq:20001 9 0 2014.01.22D17:00:40.971344000 2014.01.22D17:00:40.971344000 ()!() \nrdb1 rdb :aquaq:5011 7 0 2014.01.22D17:06:13.032883000 2014.01.22D17:06:13.032883000 `date`tables!(,2014.01.22;`fxquotes`heartbeat`logmsg`quotes`trades) \nhdb3 hdb :aquaq:5012 8 0 2014.01.22D17:06:18.647349000 2014.01.22D17:06:18.647349000 `date`tables!(2014.01.13 2014.01.14;`fxquotes`heartbeat`logmsg`quotes`trades)\ngateway1 gateway :aquaq:5020 10 0 2014.01.22D17:06:32.152836000 2014.01.22D17:06:32.152836000 ()!()", - "title": "Available Processes" - }, - { - "location": "/Processes/#gateway", - "text": "A synchronous and asynchronous gateway is provided. The gateway can be\nused for load balancing and/or to join the results of queries across\nheterogeneous servers (e.g. an RDB and HDB). Ideally the gateway should\nonly be used with asynchronous calls. Synchronous calls cause the\ngateway to block so limits the gateway to serving one query at a time\n(although if querying across multiple backend servers the backend\nqueries will be run in parallel). When using asynchronous calls the\nclient can either block and wait for the result (deferred synchronous)\nor post a call back function which the gateway will call back to the\nclient with. With both asynchronous and synchronous queries the backend\nservers to execute queries against are selected using process type. The\ngateway API can be seen by querying .api.p\u201c.gw.*\u201d within a gateway\nprocess.", - "title": "Gateway" - }, - { - "location": "/Processes/#asynchronous-behaviour", - "text": "Asynchronous queries allow much greater flexibility. They allow multiple\nqueries to be serviced at once, prioritisation, and queries to be timed\nout. When an asynchronous query is received the following happens: the query is placed in a queue; the list of available servers is retrieved; the queue is prioritised, so those queries with higher priority are\n serviced first; queries are sent to back end servers as they become available. Once\n the backend server returns its result, it is given another query; when all the partial results from the query are returned the results\n are aggregated and returned to the client. They are either returned\n directly, or wrapped in a callback and posted back asynchronously to\n the client. The two main customisable features of the gateway are the selection of\navailable servers (.gw.availableservers) and the queue prioritisation\n(.gw.getnextqueryid). With default configuration, the available servers\nare those servers which are not currently servicing a query from the\ngateway, and the queue priority is a simple FIFO queue. The available\nservers could be extended to handle process attributes, such as the\navailable datasets or the location of the process, and the queue\nprioritisation could be modified to anything required e.g. based on the\nquery itself, the username, host of the client etc. An asynchronous query can be timed out using a timeout defined by the\nclient. The gateway will periodically check if any client queries have\nnot completed in the alotted time, and return a timeout error to the\nclient. If the query is already running on any backend servers then they\ncannot be timed out other than by using the standard -T flag.", - "title": "Asynchronous Behaviour" - }, - { - "location": "/Processes/#synchronous-behaviour", - "text": "When using synchronous queries the gateway can only handle one query at\na time and cannot timeout queries other than with the standard -T flag.\nAll synchronous queries will be immediately dispatched to the back end\nprocesses. They will be dispatched using an asyhcnronous call, allowing\nthem to run in parallel rather than serially. When the results are\nreceived they are aggregated and returned to the client.", - "title": "Synchronous Behaviour" - }, - { - "location": "/Processes/#process-discovery", - "text": "The gateway uses the discovery service to locate processes to query\nacross. The discovery service will notify the gateway when new processes\nbecome available and the gateway will automatically connect and start\nusing them. The gateway can also use the static information in\nprocess.csv, but this limits the gateway to a predefined list of\nprocesses rather than allowing new services to come online as demand\nrequires.", - "title": "Process Discovery" - }, - { - "location": "/Processes/#error-handling", - "text": "When synchronous calls are used, q errors are returned to clients as\nthey are encountered. When using asynchronous calls there is no way to\nreturn actual errors and appropriately prefixed strings must be used\ninstead. It is up to the client to check the type of the received result\nand if it is a string then whether it contains the error prefix. The\nerror prefix can be changed, but the default is \u201cerror: \u201d. Errors will\nbe returned when: the client requests a query against a server type which the gateway\n does not currently have any active instances of (this error is\n returned immediately); the query is timed out; a back end server returns an error; a back end server fails; the join function fails. If postback functions are used, the error string will be posted back\nwithin the postback function (i.e. it will be packed the same way as a\nvalid result).", - "title": "Error Handling" - }, - { - "location": "/Processes/#client-calls", - "text": "There are four main client calls. The .gw.sync* methods should only be\ninvoked synchronously, and the .gw.async* methods should only be\ninvoked asynchronously. Each of these are documented more extensively in\nthe gateway api. Use .api.p\u201c.gw.*\u201d for more details. Function Description .gw.syncexec[query; servertypes] Execute the specified query synchronously against the required list of servers. If more than one server, the results will be razed. .gw.syncexecj[query; servertypes; joinfunction] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. .gw.asyncexec[query; servertypes] Execute the specified query against the required list of servers. If more than one server, the results will be razed. The client must block and wait for the results. .gw.asyncexecjpt[query; servertypes; joinfunction; postback; timeout] Execute the specified query against the required list of servers. Use the specified join function to aggregate the results. If the postback function is not set, the client must block and wait for the results. If it is set, the result will be wrapped in the specified postback function and returned asynchronously to the client. The query will be timed out if the timeout value is exceeded. For the purposes of demonstration, assume that the queries must be run\nacross an RDB and HDB process, and the gateway has one RDB and two HDB\nprocesses available to it. q).gw.servers \nhandle| servertype inuse active querycount lastquery usage attributes \n------| --------------------------------------------------------------------\n7 | rdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:00:52.149069000 `datacentre`country!`essex`uk\n8 | hdb 0 1 17 2014.01.07D17:05:03.113927000 0D00:01:26.143564000 `datacentre`country!`essex`uk\n9 | hdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:08.019862000 `datacentre`country!`essex`uk\n12 | rdb 0 1 2 2014.01.07D16:47:33.615538000 0D00:00:04.018349000 `datacentre`country!`essex`uk Both the RDB and HDB processes have a function f and table t defined. f\nwill run for 2 seconds longer on the HDB processes then it will the RDB. q)f \n{system\"sleep \",string x+$[`hdb=.proc.proctype;2;0]; t}\nq)t \na \n----\n5013\n5014\n5015\n5016\n5017 Run the gateway. The main parameter which should be set is the\n.servers.CONNECTIONS parameter, which dictates the process types the\ngateway queries across. Also, we need to explicitly allow sync calls. We\ncan do this from the config or from the command line. q torq.q -load code/processes/gateway.q -p 8000 -.gw.synccallsallowed 1 -.servers.CONNECTIONS hdb rdb Start a client and connect to the gateway. Start with a sync query. The\nHDB query should take 4 seconds and the RDB query should take 2 seconds.\nIf the queries run in parallel, the total query time should be 4\nseconds. q)h:hopen 8000 \nq)h(`.gw.syncexec;(`f;2);`hdb`rdb) \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb) \n4009 If a query is done for a server type which is not registered, an error\nis returned: q)\\t h(`.gw.syncexec;(`f;2);`hdb`rdb`other) \n`not all of the requested server types are available; missing other Custom join functions can be specified: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by a from x} each x}) \na | x\n----| -\n5014| 2\n5015| 2\n5016| 2\n5017| 1\n5018| 1\n5012| 1\n5013| 1 Custom joins can fail with appropriate errors: q)h(`.gw.syncexecj;(`f;2);`hdb`rdb;{sum{select count i by b from x} each x}) \n`failed to apply supplied join function to results: b Asynchronous queries must be sent in async and blocked: q)(neg h)(`.gw.asyncexec;(`f;2);`hdb`rdb); r:h(::) \n /- This white space is from pressing return\n /- the client is blocked and unresponsive\n\nq)q)q) \nq) \nq)r \na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\nq) We can send multiple async queries at once. Given the gateway has two\nRDBs and two HDBs avaialble to it, it should be possible to service two\nof these queries at the same time. q)h:hopen each 8000 8000 \nq)\\t (neg h)@\\:(`.gw.asyncexec;(`f;2);`hdb`rdb); (neg h)@\\:(::); r:h@\\:(::)\n4012\nq)r \n+(,`a)!,5014 5015 5016 5017 5018 5012 5013 5014 5015 5016\n+(,`a)!,5013 5014 5015 5016 5017 9999 10000 10001 10002 10003 Alternatively async queries can specify a postback so the client does\nnot have to block and wait for the result. The postback function must\ntake two parameters- the first is the function that was sent up, the\nsecond is the results. The postback can either be a lambda, or the name\nof a function. q)h:hopen 8000 \nq)handleresults:{-1(string .z.z),\" got results\"; -3!x; show y} \nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;handleresults;0Wn) \nq)\nq) /- These q prompts are from pressing enter\nq) /- The q client is not blocked, unlike the previous example\nq)\nq)2014.01.07T16:53:42.481 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016\n\n/- Can also use a named function rather than a lambda\nq)(neg h)(`.gw.asyncexecjpt;(`f;2);`hdb`rdb;raze;`handleresults;0Wn)\nq)\nq) \nq)2014.01.07T16:55:12.235 got results\na \n----\n5014\n5015\n5016\n5017\n5018\n5012\n5013\n5014\n5015\n5016 Asynchronous queries can also be timed out. This query will run for 22\nseconds, but should be timed out after 5 seconds. There is a tolerance\nof +5 seconds on the timeout value, as that is how often the query list\nis checked. This can be reduced as required. q)(neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::)\n\nq)q)q)r \n\"error: query has exceeded specified timeout value\"\nq)\\t (neg h)(`.gw.asyncexecjpt;(`f;20);`hdb`rdb;raze;();0D00:00:05); r:h(::) \n6550", - "title": "Client Calls" - }, - { - "location": "/Processes/#non-kdb-clients", - "text": "All the examples in the previous section are from clients written in q.\nHowever it should be possible to do most of the above from non kdb+\nclients. The officially supported APIs for Java, C# and C allow the\nasynchronous methods above. For example, we can modify the try block in\nthe main function of the Java Grid\nViewer : import java.awt.BorderLayout;\nimport java.awt.Color;\nimport java.io.IOException;\nimport java.lang.reflect.Array;\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\nimport javax.swing.JFrame;\nimport javax.swing.JScrollPane;\nimport javax.swing.JTable;\nimport javax.swing.table.AbstractTableModel;\nimport kx.c;\n\npublic class Main {\n public static class KxTableModel extends AbstractTableModel {\n private c.Flip flip;\n public void setFlip(c.Flip data) {\n this.flip = data;\n }\n\n public int getRowCount() {\n return Array.getLength(flip.y[0]);\n }\n\n public int getColumnCount() {\n return flip.y.length;\n }\n\n public Object getValueAt(int rowIndex, int columnIndex) {\n return c.at(flip.y[columnIndex], rowIndex);\n }\n\n public String getColumnName(int columnIndex) {\n return flip.x[columnIndex];\n }\n };\n\n public static void main(String[] args) {\n KxTableModel model = new KxTableModel();\n c c = null;\n try {\n c = new c(\"localhost\", 8000,\"username:password\");\n // Create the query to send\n String query=\".gw.asyncexec[(`f;2);`hdb`rdb]\";\n // Send the query \n c.ks(query);\n // Block on the socket and wait for the result\n model.setFlip((c.Flip) c.k());\n } catch (Exception ex) {\n Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);\n } finally {\n if (c != null) {try{c.close();} catch (IOException ex) {}\n }\n }\n JTable table = new JTable(model);\n table.setGridColor(Color.BLACK);\n String title = \"kdb+ Example - \"+model.getRowCount()+\" Rows\";\n JFrame frame = new JFrame(title);\n frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);\n frame.setSize(300, 300);\n frame.setVisible(true);\n }\n} Some of the unofficially supported APIs may only allow synchronous calls\nto be made.", - "title": "Non kdb+ Clients" - }, - { - "location": "/Processes/#real-time-database-rdb", - "text": "The Real Time Database is a modified version of r.q found in kdb+tick.\nThe modifications from the standard r.q include: Tickerplant (data source) and HDB location derived from processes\n defined by the discovery service or from config file; Automatic re-connection and resubscription to tickerplant; List of tables to subscribe to supplied as configuration setting; More pre-built flexibility in end-of-day; More verbose end-of-day logging; Reload multiple authenticated HDBs after end-of-day; End-of-day save down manipulation code is shared between RDB, WDB\n and tickerplant log replay See the top of the file for more information.", - "title": "Real Time Database (RDB)" - }, - { - "location": "/Processes/#write-database-wdb", - "text": "The Write Database or WDB is based on w.q. This process features a\nnumber of modifications and enhancements over w.q: Provides the option to write down to a custom partition scheme,\n defined by parted columns in sort.csv, which removes the need for\n end of day sorting; Greater configuration options; max rows on a per table basis, list\n subscription tables, upd function etc. See the top of the process\n file for the options; Use of common code with the RDB and Tickerplant Log Replay process\n to manipulate tables before save, sort and apply attributes; Checks whether to persist data to disk on a timer rather than on\n each tick; Informs other RDB, HDB and GW processes that end of day save and\n sort has completed; More log information supplied. The WDB process can broken down into two main functions: Periodically saving data to disk and Sorting data at end of day The WDB process provides flexibility so it can be set-up as a\nstand-alone process that will both save and sort data or two separate\nprocesses (one that saves the data and another that will sort the data\non disk). This allows greater flexibility around the end of day event as\nsorting data can be time consuming. It is also helps when implementing\nseemless rollovers (i.e. no outage window at end-of-day). The behaviour of the WDB process is controlled by the .wdb.mode \nparameter. This should be set to one of following three values: saveandsort - the process will subscribe for data, periodically\n write data to disk and at EOD it will flush remaining data to disk\n before sorting it and informing GWs, RDBs and HDBs etc. save - the process will subscribe for data, periodically write data\n to disk and at EOD it will flush remaining data to disk. It will\n then inform its respective sort mode process to sort the data sort - the process will wait to get a trigger from its respective\n save mode process. When this is triggered it will sort the data on\n disk, apply attributes and the trigger a reload on the RDB, HDB and\n GW processes When running a system with separate save and sort process, the sort\nprocess should be configured in the processes.csv file with a proctype\nof sort. The save process will check for processes with a proctype of\nsort when it attempts to trigger the end of day sort of the data. The wdb process provides two methods for persisting data to disk and\nsorting at the end of the day. default - Data is persisted into a partition defined by the\n [partitiontype] variable, similar to the hdb partition scheme. The\n general scheme is of the form\n [wdbdir]/[partitiontype]/[table]/. And a typical partition\n directory would be similar to wdb/database/2015.11.26/trades/. At\n the end of the day, before being moved to the hdb, the data is\n sorted according to parameters defined in sort.csv. For each table,\n sort.csv will specify the columns to sort (using xasc) and apply\n attributes to. partbyattr - Data is persisted to a custom partition scheme, derived\n from parameters in the sort.csv file. The write down scheme is taken\n from sort.csv, to reflect the effect of using xasc at the end of\n day. For each table, the columns defined in sort.csv, with the\n parted attribute, are used to create custom partitions in the wdb.\n Multiple columns can be defined with the parted attribute and\n distinct combinations of each are generated for custom partitions.\n The general partition scheme is of the form\n [wdbdir]/[partitiontype]/[table]/[parted column(s)]/. And a\n typical partition directory would be similar to\n wdb/database/2015.11.26/trade/MSFT_N. In the above example, the\n data is parted by sym and source, and so a unique partition\n directory MSFT_N is created in the wdb directory. At the end of the day, data is upserted into the hdb without the\n need for sorting. The number of rows that are joined at once is\n limited by the mergenumrows and mergenumtab parameters. The optional partbyattr method may provide a significant saving in time\nat the end of day, allowing the hdb to be accessed sooner. For large\ndata sets with a low cardinality (ie. small number of distinct elements)\nthe optional method may provide a significant time saving, upwards of\n50%. The optional method should also reduce the memory usage at the end\nof day event, as joining data is generally less memory intensive than\nsorting.", - "title": "Write Database (WDB)" - }, - { - "location": "/Processes/#tickerplant-log-replay", - "text": "The Tickerplant Log Replay script is for replaying tickerplant logs.\nThis is useful for: handling end of day save down failures; handling large volumes of data (larger than can fit into RAM). The process takes as the main input either an individual log file to\nreplay, or a directory containing a set of log files. Amongst other\nfunctionality, the process can: replay specific message ranges; replay in manageable message chunks; recover as many messages as possible from a log file rather than\n just stopping at the first bad message; ignore specific tables; modify the tables before or after they are saved; apply sorting and parting after all the data is written out. The process must have some variables set (the tickerplant log file or\ndirectory, the schema file, and the on-disk database directory to write\nto) or it will fail on startup. These can either be set in the config\nfile, or overridden from the command line in the usual way. An example\nstart line would be: q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.tplogfile ../test/tplogs/marketdata2013.12.17 -.replay.schemafile ../test/marketdata.q -.replay.hdbdir ../test/hdb1 The tickerplant log replay script has extended usage information which\ncan be accessed with -.replay.usage. q torq.q -debug -load code/processes/tickerlogreplay.q -p 9990 -.replay.usage", - "title": "Tickerplant Log Replay" - }, - { - "location": "/Processes/#housekeeping", - "text": "The housekeeping process is used to undertake periodic system\nhousekeeping and maintenance, such as compressing or removing files\nwhich are no longer required. The process will run the housekeeping jobs\nperiodically on a timer. Amongst other functionality the process: Allows for removing and zipping of directory files; Provides an inbuilt search utility and selectively searches using a\n \u2018find\u2019 and \u2018exclude\u2019 string, and an \u2018older than\u2019 parameter; Reads all tasks from a single CSV; Runs on a user defined timer; Can be run immediately from command line or within the process; Can be easily extended to include new user defined housekeeping\n tasks. The process has two main parameters that should be set prior to use;\nruntimes and inputcsv.\u2018Runtimes\u2019 sets the timer to run housekeeping at\nthe set time(s), and \u2018Inputcsv\u2019 provides the location of the\nhousekeeping csv file. These can either be set in the config file, or\noverridden via the command line. If these are not set, then default\nparameters are used; 12.00 and \u2018KDBCONFIG/housekeeping.csv\u2019\nrespectively. The process is designed to run from a single csv file with\nfive headings: Function details the action that you wish to be carried out on the\n files, initially, this can be rm (remove) and zip (zipping); Path specifies the directory that the files are in; Match provides the search string to the find function, files\n returned will have names that match this string; Exclude provides a second string to the find function, and these\n files are excluded from the match list; Age is the \u2018older than\u2019 parameter, and the function will only be\n carried out on files older than the age given (in days). An example csv file would be: function,path,match,exclude,age\nzip,./logs/,*.log,*tick*,2\nrm,./logs/,*.log*,*tick*,4\nzip,./logs/,*tick*,,1\nrm,./logs/,*tick*,,3\n\nfunction path match exclude age\n----------------------------------------\nzip \"./logs/\" \"*.log\" \"*tick*\" 2\nrm \"./logs/\" \"*.log*\" \"*tick*\" 4\nzip \"./logs/\" \"*tick*\" \"\" 1\nrm \"./logs/\" \"*tick*\" \"\" 3 The process reads in the csv file, and passes it line by line to a\n\u2018find\u2019 function; providing a dictionary of values that can be used to\nlocate the files required. The find function takes advantage of system\ncommands to search for the files according to the specifications in the\ndictionary. A search is performed for both the match string and the\nexclude string, and cross referenced to produce a list of files that\nmatch the parameters given. The files are then each passed to a further\nset of system commands to perform the task of either zipping or\nremoving. Note that an incomplete csv or non-existant path will throw an\nerror. The remove and zipping functions form only basic implimentations of the\nhousekeeping process; it is designed to be exended to include more\nactions than those provided. Any user function defined in the\nhousekeeping code can be employed in the same fashion by providing the\nname of the function,search string and age of files to the csv. As well as being scheduled on a timer, the process can also be run\nimmediately. Adding \u2018-hk.runnow 1\u2019 to the command line when starting the\nprocess will force immediate running of the actions in the housekeeping\ncsv. Likewise, setting runnow to 1b in the config file will immediately\nrun the cleaning process. Both methods will cause the process to exit\nupon completion. Calling hkrun[] from within the q process will also\nrun the csv instructions immediately. This will not affect any timer\nscheduling and the process will remain open upon completion. Housekeeping works both on windows and unix based systems. Since the\nprocess utilizes inbuilt system commands to perform maintenances, a\nunix/windows switch detects the operating system of the host and applies\neither unix or widows functions appropriately. Extensions need only be\nmade in the namespace of the hosting operating system (i.e. if you are\nusing a unix system, and wish to add a new function, you do not need to\nadd the function to the windows namespace to). Usage information can be\naccessed using the \u2018-hkusage\u2019 flag: q torq.q -load code/processes/housekeeping.q -p 9999 -proctype housekeeping -procname hk1 -debug -hkusage", - "title": "Housekeeping" - }, - { - "location": "/Processes/#file-alerter", - "text": "The file alerter process is a long-running process which periodically\nscans a set of directories for user-specified files. If a matching file\nis found it will then carry out a user-defined function on it. The files\nto search for and the functions to run are read in from a csv file.\nAdditionally, the file alerter process can: run more than one function on the specified file. optionally move the file to a new directory after running the\n function. store a table of files that have already been processed. run the function only on new files or run it every time the file is\n modified. ignore any matching files already on the system when the process\n starts and only run a function if a new file is added or a file is\n modified. The file alerter process has four parameters which should be set prior\nto use. These parameters can either be set in the config file or\noverridden on the command-line. If they are not set, the default\nparameters will be used. The parameters are as follows. inputcsv - The name and location of the csv file which defines the\nbehaviour of the process. The default is KDBCONFIG/filealerter.csv. polltime - How often the process will scan for matching files. The\ndefault is 0D:00:01, i.e., every minute. alreadyprocessed - The name and location of the already-processed\ntable. The default is KDBCONFIG/filealerterprocessed. This table will\nbe created automatically the first time the process is ran. skipallonstart - If this is set to 1, it will ignore all files\nalready on the system; if it is set to 0, it will not. The default\nvalue is 0. The files to find and the functions to run are read in from a csv file\ncreated by the user. This file has five columns, which are detailed\nbelow. path - This is the path to the directory that will be scanned for\nthe file. match - This is a search string matching the name of the file to be\nfound. Wildcards can be used in this search, for example, \u201cfile*\u201d will\nfind all files starting with \u201cfil\u201d. function - This is the name of the function to be run on the file.\nThis function must be defined in the script\nKDBCODE/processes/filealerter.q. If the function is not defined or fails\nto run, the process will throw an error and ignore that file from then\non. newonly - This is a boolean value. If it is set to 1, it will\nonly run the function on the file if it has been newly created. If it is\nset to 0, then it will run the function every time the file is\nmodified. movetodirectory - This is the path of the directory you would like\nto move the file to after it has been processed. If this value is left\nblank, the file will not be moved. It is possible to run two separate functions on the same file by adding\nthem as separate lines in the csv file. If the file is to be moved after\nit is processed, the file alerter will run both functions on the file\nand then attempt to move it. A typical csv file to configure the file\nalerter would look like: path,match,function,newonly,movetodirectory\n/path/to/dirA,fileA.*,copy,0,/path/to/newDir\n/path/to/dirB,fileB.txt,email,1,\n/path/to/dirA,fileA.*,delete,0,/path/to/newDir\n\npath match function newonly movetodirectory\n---------------------------------------------------\n\"/path/to/dirA\" \"fileA.*\" copy 0 \"/path/to/newDir\"\n\"/path/to/dirB\" \"fileB.txt\" email 1 \"\"\n\"/path/to/dirA\" \"fileA.*\" delete 0 \"/path/to/newDir\" The file alerter process reads in each line of the csv file and searches\nfiles matching the search string specified in that line. Note that there\nmay be more than one file found if a wildcard is used in the search\nstring. If it finds any files, it will check that they are not in the\nalready processed table. If newonly is set to 1, it only checks if\nthe filename is already in the table. If newonly is set to 0, it\nchecks against the filename, filesize and a md5 hash of the file. The\nmd5 hash and the filesize are used to determine if the file has been\nmodified since it was processed last. If the found files have not been\nprocessed already, it then attempts to run the specified function to\nthese files. After the process has run through each line of the csv, it generates a\ntable of all files that were processed on that run. These files are\nappended to the already processed table which is then saved to disk. The\nfile alerter will attempt to move the files to the \u2018movetodirectory\u2019, if\nspecified. If the file has already been moved during the process (for\nexample, if the function to run on it was \u2018delete\u2019), the file alerter\nwill not attempt to move it. The file alerter is designed to be extended by the user. Customised\nfunctions should be defined within the filealerter.q script. They should\nbe diadic functions, i.e., they take two parameters: the path and the\nfilename. As an example, a simple function to make a copy of a file in\nanother directory could be: copy:{[path;file] system \"cp \", path,\"/\", file, \" /path/to/newDir\"} Although the process is designed to run at regular intervals throughout\nthe day, it can be called manually by invoking the FArun[] command\nfrom within the q session. Similarly, if new lines are added to the csv\nfile, then it can be re-loaded by calling the loadcsv[] command\nfrom the q session. Each stage of the process, along with any errors which may occur, are\nappropriately logged in the usual manner. The file alerter process is designed to work on both Windows and Unix\nbased systems. Since many of the functions defined will use inbuilt\nsystem command they will be need to written to suit the operating system\nin use. It should also be noted that Windows does not have an inbuilt\nmd5 hashing function so the file alerter will only detect different\nversions of files if the filename or filesize changes.", - "title": "File Alerter" - }, - { - "location": "/Processes/#reporter", - "text": "", - "title": "Reporter" - }, - { - "location": "/Processes/#overview_1", - "text": "The reporter process is used to run periodic reports on specific\nprocesses. A report is the result of a query that is run on a process at\na specific time. The result of the query is then handled by one of the\ninbuilt result handlers, with the ability to add custom result handlers. Features: Easily create a report for information that you want; Fully customizable scheduling such as start time, end time and days\n of the week; Run reports repeatedly with a custom period between them; Asynchronous querying with custom timeout intervals; Inbuilt result handlers allow reports to be written to file or\n published; Custom result handlers can be defined; Logs each step of the report process; Fully integrated with the TorQ gateway to allow reports to be run\n across backend processes. The reporter process has three parameters that are read in on\ninitialisation from the reporter.q file found in the\n$KDBCONFIG/settings directory. These settings are the string filepath\nof the input csv file, a boolean to output log messages and timestamp\nfor flushing the query log table. To run the reporter process: q torq.q -load code/processes/reporter.q -p 20004 Once the reporter process has been initiated, the reports will be\nscheduled and no further input is required from the user.", - "title": "Overview" - }, - { - "location": "/Processes/#report-configuration", - "text": "By default, the process takes its inputs from a file called reporter.csv\nwhich is found in the $KDBCONFIG directory. This allows the user\ncomplete control over the configuration of the reports. As the queries\nare evaluated on the target process, local variables can be referenced\nor foreign functions can be run. Table [table:reportertable] shows the\nmeaning of the csv schema. Column Header Description and Example name Report name e.g. Usage query Query to be evaluated on that process. It can be a string query or function resulthandler Result handlers are run on the returned result. Custom result handlers can be added. The result handler must be a monadic function with the result data being passed in e.g. writetofile[\u201c./output\u201d;\u201cusage\u201d] gateway If non null the reporter will query processes route the query to the proctype specified in this field. The values in the proctype field will be the process types on which the gateway runs the backend query. e.g. `gateway joinfunction Used to join the results when a gateway query is being used. The choice of joinfunction must take into account the result that will be received. The function must be monadic and the parameter will be the list of results returned from the backend processes e.g. raze proctype The type of process that the report will be run on. If the gateway field is not empty this may be a list of process types, otherwise the reporter will throw an error on startup. e.g. `rdb procname The name of a specific process to run the report on. If left null, the reporter process will select a random process with the specified proctype. If the gateway field is not null, this field specifies the specific gateway process name to run the query against e.g. `hdb1 start Time on that day to start at e.g. 12:00 end Time on that day that the report will stop at e.g. 23:00 period The period between each report query e.g. 00:00:10 timeoutinterval The amount of time the reporter waits before timing out a report e.g. 00:00:30 daysofweek Numeric value required for the day of the week. Where 0 is Saturday and 2 is Monday When running a report on a gateway, the gateway field must be set to the\nproctype of the gateway that will be queried. It will then run the\nreport on the processes which are listed in the proctype field and join\nthe results by using the function specified in the joinfunction field.\nIf there is no join function then the reporter process will not start.\nMultiple entries in the proctype field must be separated by a space and\nare only allowed when the gateway field is not empty. If gateway field\nis empty and there are multiple entries in the proctype field then the\nreporter process will not load. Listing [code:csvschema] shows an example of the schema needed in the\ninput csv file. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nusage|10#.usage.usage|writetofiletype[\"./output/\";\"usage\";\"csv\"]|||rdb||00:01|23:50|00:01|00:00:01|0 1 2 3 4 5 6\nmemory|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|||rdb|rdb1|00:05|18:00|00:01|00:00:08|0 1 2 3 4 5 6\nusage_gateway|10#.usage.usage||gateway|raze|rdb hdb||00:02|22:00|00:01|00:00:10|0 1 2 3 4 5 6", - "title": "Report Configuration" - }, - { - "location": "/Processes/#result-handlers", - "text": "There are several default result handlers which are listed below. Custom\nresult handlers can be defined as required. The result handler will be\ninvoked with a single parameter (the result of the query). writetofiletype - Accepts 3 parameters: path, filename, filetype and\ndata. When writing to file it uses a date time suffix so the resultant\nfilename will be usage_rdb_2014_01_02_15_00_12.txt e.g. writetofiletype[\"./output/\";\"usage\";\"csv\"] splaytable - This accepts 3 parameters: path, file and data. This\nsplays the result to a directory. The result must be a table in order to\nuse this function e.g. splaytable[\"./output/\";\"usage\"] emailalert - This accepts 3 parameters: period, recipient list and\ndata. The period dictates the throttle i.e. emails will be sent at most\nevery period. The result of the report must be a table with a single\ncolumn called messages which contains the character list of the email\nmessage. This is used with the monitoring checks to raise alerts, but\ncan be used with other functions. emailalert[0D00:30;(\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\")] emailreport - This accepts 3 parameters: temporary path, recipient\nlist, file name, file type and data. The data is written out as the file\ntype (e.g. csv, xml, txt, xls, json) with the given file name to the\ntemporary path. It is then emailed to the recipient list, and the\ntemporary file removed. emailreport[\"./tempdir/\"; (\"test@aquaq.co.uk\";\"test1@aquaq.co.uk\"); \"EndOfDayReport\"; \"csv\"] publishresult - Accepts 1 parameter and that is the data. This is\ndiscussed later in the subsection\u00a0subresults.\nCustom result handlers can be added to $KDBCODE/processes/reporter.q .\nIt is important to note that the result handler is referencing local\nfunctions as it is executed in the reporter process and not the target\nprocess. When the query has been successful the result handler will be\npassed a dictionary with the following keys: queryid, time, name,\nprocname, proctype and result.", - "title": "Result Handlers" - }, - { - "location": "/Processes/#report-process-tracking", - "text": "Each step of the query is logged by the reporter process. Each query is\ngiven a unique id and regular system messages are given the id 0. The\nstage column specifies what stage the query is in and these are shown in\ntable [table:stagetable]. An appropriate log message is also shown so\nany problems can easily be diagnosed. The in memory table is flushed\nevery interval depending on the value of the flushqueryloginterval\nvariable in the reporter.q file found in the $KDBCONFIG/settings\ndirectory. Stage symbol Explanation R The query is currently running E An error has occurred during the query C The query has been completed with no errors T The query has exceeded the timeout interval S System message e.g. \u201cReporter Process Initialised\u201d time | queryid stage message\n-----------------------------| ------------------------------------------------------------------------\n2014.10.20D22:20:06.597035000| 37 R \"Received result\"\n2014.10.20D22:20:06.600692000| 37 R \"Running resulthandler\"\n2014.10.20D22:20:06.604455000| 37 C \"Finished report\"\n2014.10.20D22:30:00.984572000| 38 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:00.991862000| 38 R \"Received result\"\n2014.10.20D22:30:00.995527000| 38 R \"Running resulthandler\"\n2014.10.20D22:30:00.999236000| 38 C \"Finished report\"\n2014.10.20D22:30:06.784419000| 39 R \"Running report: rdbtablecount against proctype: rdb on handle: 7i\"\n2014.10.20D22:30:06.796431000| 39 R \"Received result\"", - "title": "Report Process Tracking" - }, - { - "location": "/Processes/#subscribing-for-results", - "text": "To publish the results of the report, the reporter process uses the pub\nsub functionality of TorQ. This is done by using the using the inbuilt\nresult handler called publishresult. In order to subscribe to this feed,\nconnect to the reporter process and send the function shown below over\nthe handle. To subscribe to all reports use a backtick as the second\nparameter and to subscribe to a specific reports results include the\nreporter name as a symbol. /- define a upd function\nupd:insert\n\n/- handle to reporter process\nh: hopen 20004\n\n/- Subscribe to all results that use the publishresult handler\nh(`.ps.subscribe;`reporterprocessresults;`)\n\n/- Subscribe to a specific report called testreport\nh(`.ps.subscribe;`reporterprocessresults;`testreport)", - "title": "Subscribing for Results" - }, - { - "location": "/Processes/#example-reports", - "text": "The following are examples of reports that could be used in the reporter\nprocess. The rdbtablecount report will run hourly and return the count\nof all the tables in a rdb process. The memoryusage report will run\nevery 10 minutes against the gateway for multiple processes and will\nreturn the .Q.w[] information. Both of these reports run between\n9:30am to 4:00pm during the weekdays. The report onetimequery is an\nexample of a query that is run one time, in order to run a query once,\nthe period must be the same as the difference between the start and end\ntime. name|query|resulthandler|gateway|joinfunction|proctype|procname|start|end|period|timeoutinterval|daysofweek\nrdbtablecount|ts!count each value each ts:tables[]|{show x`result}|||rdb|rdb1|09:30|16:00|01:00|00:00:10|2 3 4 5 6\nmemoryusage|.Q.w[]|writetofile[\"./output/\";\"memory.csv\"]|gateway1|{enlist raze x}|rdb hdb||09:30|16:00|00:10|00:00:10|2 3 4 5 6\nonetimequery|10#.usage.usage|writetofile[\"./output/\";\"onetime.csv\"]|||rdb||10:00|10:01|00:01|00:00:10|2 3 4 5 6", - "title": "Example reports" - }, - { - "location": "/Processes/#monitor", - "text": "The Monitor process is a simple process to monitor the health of the\nother processes in the system. It connects to each process that it finds\n(by default using the discovery service, though can use the static file\nas well) and subscribes to both heartbeats and log messages. It\nmaintains a keyed table of heartbeats, and a table of all log messages\nreceived. Run it with: aquaq $ q torq.q -load code/processes/monitor.q -p 20001 It is probably advisable to run the monitor process with the -trap flag,\nas there may be some start up errors if the processes it is connecting\nto do not have the necessary heartbeating or publish/subscribe code\nloaded. aquaq $ q torq.q -load code/processes/monitor.q -p 20001 -trap The current heartbeat statuses are tracked in .hb.hb, and the log\nmessages in logmsg q)show .hb.hb \nsym procname | time counter warning error\n----------------------| ---------------------------------------------------\ndiscovery discovery2 | 2014.01.07D13:24:31.848257000 893 0 0 \nhdb hdb1 | 2014.01.07D13:24:31.866459000 955 0 0 \nrdb rdb_europe_1| 2014.01.07D13:23:31.507203000 901 1 0 \nrdb rdb1 | 2014.01.07D13:24:31.848259000 34 0 0\n\nq)show select from logmsg where loglevel=`ERR \ntime sym host loglevel id message \n-------------------------------------------------------------------------------------\n2014.01.07D12:25:17.457535000 hdb1 aquaq ERR reload \"failed to reload database\" \n2014.01.07D13:29:28.784333000 rdb1 aquaq ERR eodsave \"failed to save tables : trade, quote\"", - "title": "Monitor" - }, - { - "location": "/Processes/#html5-front-end", - "text": "A HTML5 front end has been built to display important process\ninformation that is sent from the monitor process. It uses HTML5,\nWebSockets and JavaScript on the front end and interacts with the\nmonitor process in the kdb+ side. The features of the front end include: Heartbeat table with processes that have warnings highlighted in\n orange and errors in red Log message table displaying the last 30 errors Log message error chart that is by default displayed in 5 minute\n bins Chart\u2019s bin value can be changed on the fly Responsive design so works on all main devices i.e. phones, tablets\n and desktop It is accessible by going to the url http://HOST:PORT/.non?monitorui", - "title": "HTML5 front end" - }, - { - "location": "/Processes/#compression", - "text": "The compression process is a thin wrapper around the compression utility\nlibrary. It allows periodic compression of whole or parts of databases\n(e.g. data is written out uncompressed and then compressed after a\ncertain period of time). It uses four variables defined in\nKDBCONFIG/settings/compression.q which specify the compression configuration file to use the database directory to compress the maximum age of data to attempt to compress whether the process should exit upon completion The process is run like other TorQ processes: q torq.q -load code/processes/compression.q -p 20005 Modify the settings file or override variables from the command line as\nappropriate.", - "title": "Compression" - }, - { - "location": "/Processes/#kill", - "text": "The kill process is used to connect to and terminate currently running\nprocesses. It kills the process by sending the exit command therefore\nthe kill process must have appropriate permissions to send the command,\nand it must be able to create a connection (i.e. it will not be able to\nkill a blocked process in the same way that the unix command kill -9\nwould). By default, the kill process will connect to the discovery\nservice(s), and kill the processes of the specified types. The kill\nprocess can be modified to not use the discovery service and instead use\nthe process.csv file via the configuration in the standard way. If run without any command line parameters, kill.q will try to kill each\nprocess it finds with type defined by its .servers.CONNECTIONS variable. q torq.q -load code/processes/kill.q -p 20000 .servers.CONNECTIONS can optionally be overridden from the command line\n(as can any other process variable): q torq.q -load code/processes/kill.q -p 20000 -.servers.CONNECTIONS rdb tickerplant The kill process can also be used to kill only specific named processes\nwithin the process types: q torq.q -load code/processes/kill.q -p 20000 -killnames hdb1 hdb2", - "title": "Kill" - }, - { - "location": "/Processes/#chained-tickerplant", - "text": "In tick+ architecture the main tickerplant is the most important\ncomponent, as it is relied upon by all the real time subscribers. When\nthe tickerplant goes down data will be lost, compare this to an rdb\nwhich can be recovered after it fails. The chained tickerplant process\nis an additional tickerplant that is a real time subscriber to the main\ntickerplant but replicates its behaviour. It will have its own real time\nsubscribers and can be recovered when it fails. This is the recommended\napproach when users want to perform their own custom real time analysis. The chained tickerplant can: subscribe to specific tables and syms batch publish at an interval or publish tick by tick create a tickerplant log that its real time subscribers can replay replay the source tickerplant log To launch the chained tickerplant q torq.q -load code/processes/chainedtp.q -p 12009 Chained tickerplant settings are found in config/settings/chainedtp.q \nand are under the .ctp namespace. Setting Explanation Default tickerplantname list of tickerplant names to try and make a connection to `tickerplant1 pubinterval publish batch updates at this interval. If the value is 0D00:00:00 then it will publish tick by tick 0D00:00:00 tpconnsleep number of seconds between attempts to connect to the source tickerplant 10 createlogfile create a log file 0b logdir directory containing chained tickerplant logs `:hdb subscribeto subscribe to these tables only (null for all) ` subscribesyms subscribe to these syms only (null for all) ` replay replay the tickerplant log file 0b schema retrieve schema from tickerplant 1b clearlogonsubscription clear log on subscription, only called if createlogfile is also enabled 0b", - "title": "Chained Tickerplant" - }, - { - "location": "/Processes/#integration-with-kdbtick", - "text": "AquaQ TorQ can be fully integrated with kdb+tick. For further details,\nuse one of the AquaQ TorQ Starter packs to set up a production kdb+ data\ncapture system.", - "title": "Integration with kdb+tick" - }, - { - "location": "/visualisation/", - "text": "Visualisation\n\n\nkdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.\n\n\n\n\nkdb+ Utilities\n\n\nThe server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes:\n\n\n\n\n\n\njson.k provides two way conversion between kdb+ data structures and\n JSON;\n\n\n\n\n\n\nu.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript;\n\n\n\n\n\n\nfunctions for reformatting temporal types to be JSON compliant;\n\n\n\n\n\n\npage serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.\n\n\n\n\n\n\n\n\nJavaScript Utilities\n\n\nThe JavaScript utilities are contained in kdbconnect.js. The library\nallows you to:\n\n\n\n\n\n\ncreate a connection to the kdb+ process;\n\n\n\n\n\n\ndisplay the socket status;\n\n\n\n\n\n\nsending queries;\n\n\n\n\n\n\nbinding results returned from kdb+ to updates in the webpage.\n\n\n\n\n\n\n\n\nOutline\n\n\nAll communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form:\n\n\n`name`data!(\"dataID\";dataObject)\n\n\n\nAll the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap.\n\n\nq)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nWe have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like:\n\n\n`name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))\n\n\n\nThis can be packed with .html.updformat:\n\n\nq).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a\n\n\n\nTo utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using\n\n\n.html.wssub[`tablename]\n\n\n\nPublications from the kdb+ side are done with\n\n\n.html.pub[`tablename;tabledata]\n\n\n\nOn the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data.\n\n\n/* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nSimilarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different:\n\n\nKDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n });\n\n\n\nTo display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status.\n\n\n// Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected.\n\n\n\nErrors can be displayed by binding the event called \u201cerror\u201d.\n\n\nKDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});\n\n\n\n\n\nExample\n\n\nA basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.\n\n\n\n\nFurther Work\n\n\nFurther work planned includes:\n\n\n\n\n\n\nallow subscriptions on a key basis- currently all subscribers\n receive all updates;\n\n\n\n\n\n\nadd JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table;\n\n\n\n\n\n\nallow multiple websocket connections to be maintained at the same\n time.", - "title": "Visualisation" - }, - { - "location": "/visualisation/#visualisation", - "text": "kdb+ supports websockets and so HTML5 GUIs can be built. We have\nincorporated a set of server side and client side utilities to ease HTML\nGUI development.", - "title": "Visualisation" - }, - { - "location": "/visualisation/#kdb-utilities", - "text": "The server side utilities are contained in html.q. These utilise some\ncommunity code, specifically json.k and a modified version of u.q, both\nfrom Kx Systems. The supplied functionality includes: json.k provides two way conversion between kdb+ data structures and\n JSON; u.q is the standard pub/sub functionality provided with kdb+tick,\n and a modified version is incorporated to publish data structures\n which can be easily interpreted in JavaScript; functions for reformatting temporal types to be JSON compliant; page serving to utilise the inbuilt kdb+ webserver to serve custom\n web pages. An example would be instead of having to serve a page\n with a hardcoded websocket connection host and port, the kdb+\n process can serve a page connecting back to itself no matter which\n host or port it is running on.", - "title": "kdb+ Utilities" - }, - { - "location": "/visualisation/#javascript-utilities", - "text": "The JavaScript utilities are contained in kdbconnect.js. The library\nallows you to: create a connection to the kdb+ process; display the socket status; sending queries; binding results returned from kdb+ to updates in the webpage.", - "title": "JavaScript Utilities" - }, - { - "location": "/visualisation/#outline", - "text": "All communication between websockets and kdb+ is asynchronous. The\napproach we have adopted is to ensure that all data sent to the web\nbrowser is encoded as a JSON object containing a tag to enable the web\npage to decipher what the data relates to. The format we have chosen is\nfor kdb+ to send dictionaries of the form: `name`data!(\"dataID\";dataObject) All the packing can be done by .html.dataformat. Please note that the\ntemporal types are converted to longs which can easily be converted to\nJavaScript Date types. This formatting can be modified in the formating\ndictionary .html.typemap. q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)\nq).html.dataformat[\"start\";(enlist `tradegraph)!enlist a]\nname| \"start\"\ndata| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a)\nq)first (.html.dataformat[\"start\";(enlist `tradegraph)!enlist a])[`data;`tradegraph] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a We have also extended this structure to allow web pages to receive data\nin a way similar to the standard kdb+tick pub/sub format. In this case,\nthe data object looks like: `name`data!(\"upd\";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14))) This can be packed with .html.updformat: q).html.updformat[\"upd\";`tablename`tabledata!(`trade;a)] \nname| \"upd\"\ndata| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,\"2014-04-07T13:23:01Z\";,48181023;,\"2014-04-07T13:23:01Z\";,20f;,`a))\nq)first(.html.updformat[\"upd\";`tablename`tabledata!(`trade;a)])[`data;`tabledata] \nminute | 32400000\ntime | 32400000\ndate | 1396828800000\nmonth | 1396310400000\ntimestamp| \"2014-04-07T13:23:01Z\"\ntimespan | 48181023\ndatetime | \"2014-04-07T13:23:01Z\"\nfloat | 20f\nsym | `a To utilise the pub/sub functionality, the web page must connect to the\nkdb+ process and subscribe for updates. Subscriptions are done using .html.wssub[`tablename] Publications from the kdb+ side are done with .html.pub[`tablename;tabledata] On the JavaScript side the incoming messages (data events) must be bound\nto page updates. For example, there might be an initialisation event\ncalled \u201cstart\u201d which allows the web page to retrieve all the initial\ndata from the process. The code below redraws the areas of the page with\nthe received data. /* Bind data - Data type \"start\" will execute the callback function */\nKDBCONNECT.bind(\"data\",\"start\",function(data){\n // Check that data is not empty\n if(data.hbtable.length !== 0)\n // Write HTML table to div element with id heartbeat-table\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.hbtable));}\n if(data.lmtable.length !== 0)\n // Write HTML table to div element with id logmsg-table\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.lmtable));} \n if(data.lmchart.length !== 0)\n // Log message error chart\n { MONITOR.barChart(data.lmchart,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); Similarly the upd messages must be bound to page updates. In this case,\nthe structure is slightly different: KDBCONNECT.bind(\"data\",\"upd\",function(data){\n if(data.tabledata.length===0) return;\n if(data.tablename === \"heartbeat\")\n { $(\"#heartbeat-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"logmsg\")\n { $(\"#logmsg-table\").html(MONITOR.jsonTable(data.tabledata));}\n if(data.tablename === \"lmchart\")\n { MONITOR.barChart(data.tabledata,\"logmsg-chart\",\"Error Count\",\"myTab\"); }\n }); To display the WebSocket connection status the event \u201cws_event\u201d must be\nbound and it will output one of these default messages: \u201cConnecting...\u201d,\n\u201cConnected\u201d and \u201cDisconnected\u201d depending on the connection state of the\nWebSocket. Alternatively the value of the readyState attribute will\ndetermine the WebSocket status. // Select html element using jQuery\nvar $statusMsg = $(\"#status-msg\"); \nKDBCONNECT.bind(\"ws_event\",function(data){\n // Data is the default message string\n $statusMsg.html(data);\n});\nKDBCONNECT.core.websocket.readyState // Returns 1 if connected. Errors can be displayed by binding the event called \u201cerror\u201d. KDBCONNECT.bind(\"error\",function(data){\n $statusMsg.html(\"Error - \" + data);\n});", - "title": "Outline" - }, - { - "location": "/visualisation/#example", - "text": "A basic example is provided with the Monitor process. To get this to\nwork, u.q from kdb+tick should be placed in the code/common directory to\nallow all processes to publish updates. It should be noted that this is\nnot intended as a production monitoring visualisation screen, moreso a\ndemonstration of functionality. See section\u00a0monitorgui for more\ndetails.", - "title": "Example" - }, - { - "location": "/visualisation/#further-work", - "text": "Further work planned includes: allow subscriptions on a key basis- currently all subscribers\n receive all updates; add JavaScript controls to allow in-place updates based on key\n pairs, and scrolling window updates e.g. add N new rows to\n top/bottom of the specified table; allow multiple websocket connections to be maintained at the same\n time.", - "title": "Further Work" - } - ] -} \ No newline at end of file diff --git a/site/sitemap.xml b/site/sitemap.xml deleted file mode 100644 index 75ac249cf..000000000 --- a/site/sitemap.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - / - 2017-01-17 - daily - - - - - - /Overview/ - 2017-01-17 - daily - - - - - - /gettingstarted/ - 2017-01-17 - daily - - - - - - /utilities/ - 2017-01-17 - daily - - - - - - /handlers/ - 2017-01-17 - daily - - - - - - /conn/ - 2017-01-17 - daily - - - - - - /Processes/ - 2017-01-17 - daily - - - - - - /visualisation/ - 2017-01-17 - daily - - - - \ No newline at end of file diff --git a/site/utilities/index.html b/site/utilities/index.html deleted file mode 100644 index a7f0fc616..000000000 --- a/site/utilities/index.html +++ /dev/null @@ -1,2535 +0,0 @@ - - - - - - - - - - - - - - - - - - Utilities - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - -
    -
    - -
    -
    - - -
    -
    - - edit - - - -

    -

    Utilities

    -

    We have provided several utility scripts, which either implement -developer aids or standard operations which are useful across processes.

    -

    -

    api.q

    -

    This provides a mechanism for documenting and publishing -function/variable/table or view definitions within the kdb+ process. It -provides a search facility both by name and definition (in the case of -functions). There is also a function for returning the approximate -memory usage of each variable in the process in descending order.

    -

    Definitions are added using the .api.add function. A variable can be -marked as public or private, and given a description, parameter list and -return type. The search functions will return all the values found which -match the pattern irrespective of them having a pre-defined definition.

    -

    Whether a value is public or private is defined in the definitions -table. If not found then by default all values are private, except those -which live in the .q or top level namespace.

    -

    .api.f is used to find a function, variable, table or view based on a -case-insensitive pattern search. If a symbol parameter is supplied, a -wildcard search of *[suppliedvalue]* is done. If a string is -supplied, the value is used as is, meaning other non-wildcard regex -pattern matching can be done.

    -
    
    -    q).api.f`max                                                                                                                                                                                                                    
    -    name                | vartype   namespace public descrip             ..
    -    --------------------| -----------------------------------------------..
    -    maxs                | function  .q        1      ""                  ..
    -    mmax                | function  .q        1      ""                  ..
    -    .clients.MAXIDLE    | variable  .clients  0      ""                  ..
    -    .access.MAXSIZE     | variable  .access   0      ""                  ..
    -    .cache.maxsize      | variable  .cache    1      "The maximum size in..
    -    .cache.maxindividual| variable  .cache    1      "The maximum size in..
    -    max                 | primitive           1      ""                  ..
    -    q).api.f"max*"                                                                                                                                                                                                                  
    -    name| vartype   namespace public descrip params return
    -    ----| ------------------------------------------------
    -    maxs| function  .q        1      ""      ""     ""    
    -    max | primitive           1      ""      ""     ""    
    -
    -
    - -

    .api.p is the same as .api.f, but only returns public functions. .api.u -is as .api.p, but only includes user defined values i.e. it excludes q -primitives and values found in the .q, .Q, .h and .o namespaces. -.api.find is a more general version of .api.f which can be used to do -case sensitive searches.

    -

    .api.s is used to search function definitions for specific values.

    -
    q).api.s"*max*"                                                                                                                                                                                                                 
    -function            definition                                       ..
    ----------------------------------------------------------------------..
    -.Q.w                "k){`used`heap`peak`wmax`mmap`mphy`syms`symw!(.\"..
    -.clients.cleanup    "{if[count w0:exec w from`.clients.clients where ..
    -.access.validsize   "{[x;y;z] $[superuser .z.u;x;MAXSIZE>s:-22!x;x;'\..
    -.servers.getservers "{[nameortype;lookups;req;autoopen;onlyone]\n r:$..
    -.cache.add          "{[function;id;status]\n \n res:value function;\n..
    -
    -

    .api.m is used to return the approximate memory usage of variables and -views in the process, retrieved using -22!. Views will be re-evaluated -if required. Use .api.mem[0b] if you do not want to evaluate and -return views.

    -
    q).api.m[]                                                                                                                                                                                                                      
    -variable          size    sizeMB
    ---------------------------------
    -.tz.t             1587359 2     
    -.help.TXT         15409   0     
    -.api.detail       10678   0     
    -.proc.usage       3610    0     
    -.proc.configusage 1029    0     
    -..
    -
    -

    .api.whereami[lambda] can be used to retrieve the name of a function -given its definition. This can be useful in debugging.

    -
    q)g:{x+y}                                                                                                                                                                                                                                                                     
    -q)f:{20 + g[x;10]}                                                                                                                                                                                                                                                            
    -q)f[10]                                                                                                                                                                                                                                                                       
    -40
    -q)f[`a]                                                                                                                                                                                                                                                                       
    -{x+y}
    -`type
    -+
    -`a
    -10
    -q)).api.whereami[.z.s]                                                                                                                                                                                                                                                        
    -`..g
    -
    -

    -

    timer.q

    -

    kdb+ provides a single timer function, .z.ts which is triggered with the -frequency specified by -t. We have provided an extension to allow -multiple functions to be added to the timer and fired when required. The -basic concept is that timer functions are registered in a table, with -.z.ts periodically checking the table and running whichever functions -are required. This is not a suitable mechanism where very high frequency -timers are required (e.g. sub 500ms).

    -

    There are two ways a function can be added to a timer- either as a -repeating timer, or to fire at a specific time. When a repeating timer -is specified, there are three options as to how the timer can be -rescheduled. Assuming that a timer function with period P is scheduled -to fire at time T0, actually fires at time T1 and finishes at time T2, -then

    -
      -
    • -

      mode 0 will reschedule for T0+P;

      -
    • -
    • -

      mode 1 will reschedule for T1+P;

      -
    • -
    • -

      mode 2 will reschedule for T2+P.

      -
    • -
    -

    Both mode 0 and mode 1 have the potential for causing the timer to back -up if the finish time T2 is after the next schedule time. See -.api.p“.timer.*”for more details.

    -

    -

    async.q

    -

    kdb+ processes can communicate with each using either synchronous or -asynchronous calls. Synchronous calls expect a response and so the -server must process the request when it is received to generate the -result and return it to the waiting client. Asynchronous calls do not -expect a response so allow for greater flexibility. The effect of -synchronous calls can be replicated with asynchronous calls in one of -two ways (further details in section gateway):

    -
      -
    • -

      deferred synchronous: the client sends an async request, then blocks - on the handle waiting for the result. This allows the server more - flexibility as to how and when the query is processed;

      -
    • -
    • -

      asynchronous postback: the client sends an async request which is - wrapped in a function to be posted back to the client when the - result is ready. This allows the server flexibility as to how and - when the query is processed, and allows the client to continue - processing while the server is generating the result.

      -
    • -
    -

    The code for both of these can get a little tricky, largely due to the -amount of error trapping required. We have provided two functions to -allow these methods to be used more easily. .async.deferred takes a list -of handles and a query, and will return a two item list of -(success;results).

    -
    q).async.deferred[3 5;({system"sleep 1";system"p"};())]                                                                                                                                                                                     
    -1    1   
    -9995 9996
    -q).async.deferred[3 5;({x+y};1;2)]                                                                                                                                                                                                          
    -1 1
    -3 3
    -q).async.deferred[3 5;({x+y};1;`a)]                                                                                                                                                                                                         
    -0                         0                        
    -"error: server fail:type" "error: server fail:type"
    -q).async.deferred[3 5 87;({system"sleep 1";system"p"};())]                                                                                                                                                                                  
    -1     1     0                                       
    -9995i 9996i "error: comm fail: failed to send query"
    -
    -

    .async.postback takes a list of handles, a query, and the name or lambda -of the postback function to return the result to. It will immediately -return a success vector, and the results will be posted back to the -client when ready.

    -
    q).async.postback[3 5;({system"sleep 1";system"p"};());`showresult]                                                                                                                                                                         
    -11b
    -q)                                                                                                                                                                                                                                          
    -q)9995i
    -9996i
    -
    -q).async.postback[3 5;({x+y};1;2);`showresult]                                                                                                                                                                                              
    -11b
    -q)3
    -3
    -
    -q).async.postback[3 5;({x+y};1;`a);`showresult]                                                                                                                                                                                             
    -11b
    -q)"error: server fail:type"
    -"error: server fail:type"
    -
    -q).async.postback[3 5;({x+y};1;`a);showresult]                                                                                                                                                                                              
    -11b
    -q)"error: server fail:type"
    -"error: server fail:type"
    -
    -q).async.postback[3 5 87;({x+y};1;2);showresult]                                                                                                                                                                                            
    -110b
    -q)3
    -3
    -
    -

    For more details, see .api.p“.async.*”.

    -

    -

    cache.q

    -

    cache.q provides a mechanism for storing function results in a cache and -returning them from the cache if they are available and non stale. This -can greatly boost performance for frequently run queries.

    -

    The result set cache resides in memory and as such takes up space. It is -up to the programmer to determine which functions are suitable for -caching. Likely candidates are those where some or all of the following -conditions hold:

    -
      -
    • -

      the function is run multiple times with the same parameters (perhaps - different clients all want the same result set);

      -
    • -
    • -

      the result set changes infrequently or the clients can accept - slightly out-of-date values;

      -
    • -
    • -

      the result set is not too large and/or is relatively expensive to - produce. For example, it does not make sense to cache raw data - extracts.

      -
    • -
    -

    The cache has a maximum size and a minimum size for any individual -result set, both of which are defined in the configuration file. Size -checks are done with -22! which will give an approximation (but -underestimate) of the result set size. In the worst case the estimate -could be half the size of the actual size.

    -

    If a new result set is to be cached, the size is checked. Assuming it -does not exceed the maximum individual size then it is placed in the -cache. If the new cache size would exceed the maximum allowed space, -other result sets are evicted from the cache. The current eviction -policy is to remove the least recently accessed result sets until the -required space is freed. The cache performance is tracked in a table. -Cache adds, hits, fails, reruns and evictions are monitored.

    -

    The main function to use the cache is .cache.execute[function; -staletime]. If the function has been executed within the last -staletime, then the result is returned from the cache. Otherwise the -function is executed and placed in the cache.

    -

    The function is run and the result placed in the cache:

    -
    q)\t r:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                     
    -2023
    -q)r                                                                                                                                                                                                                             
    -3
    -
    -

    The second time round, the result set is returned immediately from the -cache as we are within the staletime value:

    -
    q)\t r1:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:01]                                                                                                                                                                    
    -0
    -q)r1                                                                                                                                                                                                                            
    -3
    -
    -

    If the time since the last execution is greater than the required stale -time, the function is re-run, the cached result is updated, and the -result returned:

    -
    q)\t r2:.cache.execute[({system"sleep 2"; x+y};1;2);0D00:00]                                                                                                                                                                    
    -2008
    -q)r2                                                                                                                                                                                                                            
    -3
    -
    -

    The cache performance is tracked:

    -
    q).cache.getperf[]                                                                                                                                                                                                              
    -time                          id status function                  
    -------------------------------------------------------------------
    -2013.11.06D12:41:53.103508000 2  add    {system"sleep 2"; x+y} 1 2
    -2013.11.06D12:42:01.647731000 2  hit    {system"sleep 2"; x+y} 1 2
    -2013.11.06D12:42:53.930404000 2  rerun  {system"sleep 2"; x+y} 1 2
    -
    -

    See .api.p.cache.*for more details.

    -

    -

    email.q

    -

    A library file is provided to allow TorQ processes to send emails using -an SMTP server. This is a wrapper around the standard libcurl library. -The library file is currently available for Windows (32 bit), Linux (32 -and 64 bit) and OSX (32 and 64 bit). The associated q script contains -two main methods for creating a connection and sending emails. The email -library requires a modification to the path to find the required libs - -see the top of email.q for details.

    -

    The main connection method .email.connect takes a single dictionary -parameter and returns 0i for success and -1i for failure.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterReqTypeDescription
    urlYsymbolURL of mail server e.g. smtp://mail.example.com
    userYsymbolUsername of user to login as
    passwordYsymbolPassword for user
    usesslNbooleanConnect using SSL/TLS, defaults to false
    fromNsymbolEmail from field, defaults to torq@aquaq.co.uk
    debugNintegerDebug level. 0=no output, 1=normal output, 2=verbose output. Default is 1
    -

    An example is:

    -
    q).email.connect[`url`user`password`from`usessl`debug!(`$"smtp://mail.example.com:80";`$"torquser@aquaq.co.uk";`hello;`$"torquser@aquaq.co.uk";0b;1i)]
    -02 Jan 2015 11:45:19   emailConnect: url is set to smtp://mail.example.com:80
    -02 Jan 2015 11:45:19   emailConnect: user is set to torquser@aquaq.co.uk
    -02 Jan 2015 11:45:19   emailConnect: password is set
    -02 Jan 2015 11:45:19   emailConnect: from is set torquser@aquaq.co.uk
    -02 Jan 2015 11:45:19   emailConnect: trying to connect
    -02 Jan 2015 11:45:19   emailConnect: connected, socket is 5
    -0i
    -
    -

    The email sending function .email.send takes a single dictionary -parameter containing the details of the email to send. A connection must -be established before an email can be sent. The send function returns an -integer of the email length on success, or -1 on failure.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterReqTypeDescription
    toYsymbol (list)addresses to send to
    subjectYchar listemail subject
    bodyYlist of char listsemail body
    ccNsymbol (list)cc list
    bodyTypeNsymboltype of email body. Can be `text or `html. Default is `text
    debugNintegerDebug level. 0=no output, 1=normal output,2=verbose output. Default is 1
    -

    An example is:

    -
    q).email.send[`to`subject`body`debug!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq");1i)]
    -02 Jan 2015 12:39:29   sending email with subject: test email
    -02 Jan 2015 12:39:29   email size in bytes is 16682
    -02 Jan 2015 12:39:30   emailSend: email sent
    -16682i
    -
    -

    Note that if emails are sent infrequently the library must re-establish -the connection to the mail server (this will be done automatically after -the initial connection). In some circumstances it may be better to batch -emails together to send, or to offload email sending to separate -processes as communication with the SMTP server can take a little time.

    -

    Two further functions are available, .email.connectdefault and -.email.senddefault. These are as above but will use the default -configuration defined within the configuration files as the relevant -parameters passed to the methods. In addition, .email.senddefault will -automatically establish a connection.

    -
    q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email";("hi";"this is an email from torq"))]
    -2015.01.02D12:43:34.646336000|aquaq||discovery1|INF|email|sending email
    -2015.01.02D12:43:35.743887000|aquaq||discovery1|INF|email|connection to mail server successful
    -2015.01.02D12:43:37.250427000|aquaq|discovery1|INF|email|email sent
    -16673i
    -q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq"))]
    -2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
    -2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
    -16675i
    -q).email.senddefault[`to`subject`body!(`$"test@aquaq.co.uk";"test email 2";("hi";"this is an email from torq");`"$/home/ashortt/example.txt")]
    -2015.01.02D12:43:48.115403000|aquaq|discovery1|INF|email|sending email
    -2015.01.02D12:43:49.385807000|aquaq|discovery1|INF|email|email sent
    -47338i
    -
    -

    .email.test will attempt to establish a connection to the default -configured email server and send a test email to the specified address. -debug should be set to 2i (verbose) to extract the full information.

    -
    q).email.debug:2i
    -q).email.test `$"test@aquaq.co.uk"
    -...
    -
    -

    Additionally functions are available within the email library. See -.api.p.email.*for more details.

    -

    Emails with SSL certificates from Windows

    -

    If you wish to send emails via an account which requires authentication -from Windows (e.g. Hotmail, Gmail) then you have to do a few extra steps -as usessl must be true and Windows does not usually find the correct -certificate. The steps are:

    -
      -
    • -

      download - this - and save it to your PC

      -
    • -
    • -

      set

      -
        CURLOPT_CAINFO=c:/path/to/cabundle_file/ca-bundle.crt
      -
      -
    • -
    -

    More information is available -here -and here

    -

    -

    timezone.q

    -

    A slightly customised version of the timezone conversion functionality -from code.kx. It loads a table of timezone information from -$KDBCONFIG. See .api.p.tz.*for more details.

    -

    -

    compress.q

    -

    compress.q applies compression to any kdb+ database, handles all -partition types including date, month, year, int, and can deal with top -level splayed tables. It will also decompress files as required. Once -the compression/decompression is complete, summary statistics are -returned, with detailed statistics for each compressed or decompressed -file held in a table.

    -

    The utility is driven by the configuration specified within a csv file. -Default parameters can be given, and these can be used to compress all -files within the database. However, the compress.q utility also provides -the flexibility to compress different tables with different compression -parameters, and different columns within tables using different -parameters. A function is provided which will return a table showing -each file in the database to be compressed, and how, before the -compression is performed.

    -

    Compression is performed using the -19! operator, which takes 3 -parameters; the compression algorithm to use (0 - none, 1 - kdb+ IPC, 2 -- gzip), the compression blocksize as a power of 2 (between 12 and 19), - and the level of compression to apply (from 0 - 9, applicable only for - gzip). (For further information on -19! and the parameters used, see - code.kx.com.)

    -

    The compressionconfig.csv file should have the following format:

    -
    table,minage,column,calgo,cblocksize,clevel
    -default,20,default,2,17,6
    -trades,20,default,1,17,0
    -quotes,20,asize,2,17,7
    -quotes,20,bsize,2,17,7
    -
    -

    This file can be placed in the config folder, or a path to the file -given at run time.

    -

    The compression utility compresses all tables and columns present in the -HDB but not specified in the driver file according the default -parameters. In effect, to compress an entire HDB using the same -compression parameters, a single row with name default would suffice. To -specify that a particular table should be compressed in a certain -different manner, it should be listed in the table. If default is given -as the column for this table, then all of the columns of that table will -be compressed accordingly. To specify the compression parameters for -particular columns, these should be listed individually. For example, -the file above will compress trades tables 20 days old or more with an -algorithm of 1, and a blocksize of 17. The asize and bsize columns of -any quotes tables older than 20 days old will be compressed using -algorithm 2, blocksize 17 and level 7. All other files present will be -compressed according to the default, using an algorithm 2, blocksize 17 -and compression level 6. To leave files uncompressed, you must specify -them explicitly in the table with a calgo of 0. If the file is already -compressed, note that an algorithm of 0 will decompress the file.

    -

    This utility should be used with caution. Before running the compression -it is recommended to run the function .cmp.showcomp, which takes three -parameters - the path to the database, the path to the csv file, and the -maximum age of the files to be compressed:

    -
    .cmp.showcomp[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
    -        /- for using the csv file in the config folder
    -.cmp.showcomp[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
    -        /- to specify a file
    -
    -

    This function produces a table of the files to be compressed, the -parameters with which they will be compressed, and the current size of -the file. Note that the current size column is calculated using hcount; -on a file which is already compressed this returns the uncompressed -length, i.e. this cannot be used as a signal as to whether the file is -compressed already.

    -
    fullpath                        column table  partition  age calgo cblocksize clevel compressage currentsize
    --------------------------------------------------------------------------------------
    -:/home/hdb/2013.11.05/depth/asize1 asize1 depth  2013.11.05 146 0     17         8      1           787960
    -:/home/hdb/2013.11.05/depth/asize2 asize2 depth  2013.11.05 146 0     17         8      1           787960
    -:/home/hdb/2013.11.05/depth/asize3 asize3 depth  2013.11.05 146 0     17         8      1           787960
    -:/home/hdb/2013.11.05/depth/ask1   ask1   depth  2013.11.05 146 0     17         8      1           1575904
    -....
    -
    -

    To then run the compression function, use .cmp.compressmaxage with the -same parameters as .cmp.showcomp (hdb path, csv path, maximum age of -files):

    -
    .cmp.compressmaxage[`:/full/path/to/HDB;.cmp.inputcsv;maxage]   
    -        /- for using the csv file in the config folder
    -.cmp.compressmaxage[`:/full/path/to/HDB;`:/full/path/to/csvfile;maxage]    
    -        /- to specify a file
    -
    -

    To run compression on all files in the database disregarding the maximum -age of the files (i.e. from minage as specified in the configuration -file to infinitely old), then use:

    -
    .cmp.docompression[`:/full/path/to/HDB;.cmp.inputcsv]   
    -        /- for using the csv file in the config folder
    -.cmp.docompression[`:/full/path/to/HDB;`:/full/path/to/csvfile]    
    -        /- to specify a file
    -
    -

    Logs are produced for each file which is compressed or decompressed. -Once the utility is complete, the statistics of the compression are also -logged. This includes the memory savings in MB from compression, the -additional memory usage in MB for decompression, the total compression -ratio, and the total decompression ratio:

    -
    |comp1|INF|compression|Memory savings from compression: 34.48MB. Total compression ratio: 2.51.
    -|comp1|INF|compression|Additional memory used from de-compression: 0.00MB. Total de-compression ratio: .
    -|comp1|INF|compression|Check .cmp.statstab for info on each file.
    -
    -

    A table with the compressed and decompressed length for each individual -file, in descending order of compression ratio, is also produced. This -can be found in .cmp.statstab:

    -
    file                    algo compressedLength uncompressedLength compressionratio
    ------------------------------------------------------------------------------------
    -:/hdb/2014.03.05/depth/asize1 2    89057            772600             8.675343
    -:/hdb/2014.01.06/depth/asize1 2    114930           995532             8.662073
    -:/hdb/2014.03.05/depth/bsize1 2    89210            772600             8.660464
    -:/hdb/2014.03.12/depth/bsize1 2    84416            730928             8.658643
    -:/hdb/2014.01.06/depth/bsize1 2    115067           995532             8.651759
    -.....
    -
    -

    A note for windows users - windows supports compression only with a -compression blocksize of 16 or more.

    -

    -

    dataloader.q

    -

    This script contains some utility functions to assist in loading data -from delimited files (e.g. comma separated, tab delimited). It is a more -generic version of the data loader example on -code.kx. -The supplied functions allow data to be read in configurable size chunks -and written out to the database. When all the data is written, the -on-disk data is re-sorted and the attributes are applied. The main -function is .loader.loadalldata which takes two parameters- a dictionary -of loading parameters and a directory containing the files to read. The -dictionary should/can have the following fields:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterReqTypeDescription
    headersYsymbol listNames of the header columns in the file
    typesYchar listData types to read from the file
    separatorYchar[list]Delimiting character. Enlist it if first line of file is header data
    tablenameYsymbolName of table to write data to
    dbdirYsymbolDirectory to write data to
    partitiontypeNsymbolPartitioning to use. Must be one of
    `date`month`year`int. Default is `date
    partitioncolNsymbolColumn to use to extract partition information.Default is `time
    dataprocessfuncNfunctionDiadic function to process data after it has been read in. First argument is load parameters dictionary, second argument is data which has been read in. Default is {[x;y] y}
    chunksizeNintData size in bytes to read in one chunk. Default is 100 MB
    compressionNint listCompression parameters to use e.g. 17 2 6. Default is empty list for no compression
    gcNbooleanWhether to run garbage collection at appropriate points. Default is 0b (false)
    -

    Example usage:

    -
    .loader.loadallfiles[`headers`types`separator`tablename`dbdir!(`sym`time`price`volume;"SP  FI";",";`trade;`:hdb); `:TDC/toload]
    -.loader.loadallfiles[`headers`types`separator`tablename`dbdir`dataprocessfunc`chunksize`partitiontype`partitioncol`compression`gc!(`sym`time`price`volume;"SP  FI";enlist",";`tradesummary;`:hdb;{[p;t] select sum size, max price by date:time.date from t};`int$500*2 xexp 20;`month;`date;16 1 0;1b); `:TDC/toload]
    -
    -

    -

    subscriptions.q

    -

    The subscription utilities allow multiple subscriptions to different -data sources to be managed and maintained. Automatic resubscriptions in -the event of failure are possible, along as specifying whether the -process will get the schema and replay the log file from the remote -source (e.g. in the case of tickerplant subscriptions).

    -

    .sub.getsubscriptionhandles is used to get a table of processes to -subscribe to. The following can be used to return a table of all -connected processes of type tickerplant:

    -
    .sub.getsubscriptionhandles[`tickerplant;`;()!()]
    -
    -

    .sub.subscribe is used to subscribe to a process for the supplied list -of tables and instruments. For example, to subscribe to instruments A, B -and C for the quote table from all tickerplants:

    -
    .sub.subscribe[`trthquote;`A`B;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
    -
    -

    The subscription method uses backtick for “all” (which is the same as -kdb+tick). To subscribe to all tables, all instruments, from all -tickerplants:

    -
    .sub.subscribe[`;`;0b;0b] each .sub.getsubscriptionhandles[`tickerplant;`;()!()]
    -
    -

    See .api.p“.sub.*” for more details.

    -

    -

    pubsub.q

    -

    pubsub.q is essentially a placeholder script to allow publish and -subscribe functionality to be implemented. Licenced kdb+tick users can -use the publish and subscribe functionality implemented in u.[k|q]. If -u.[k|q] is placed in the common code directory and loaded before -pubsub.q (make sure u.[k|q] is listed before pubsub.q in order.txt) -then publish and subscribe will be implemented. You can also build out -this file to add your own publish and subscribe routines as required.

    -

    -

    tplogutils.q

    -

    tplogutils.q contains functions for recovering tickerplant log files. -Under certain circumstances the tickerplant log file can become corrupt -by having an invalid sequence of bytes written to it. A log file can be -recovered using a simple recovery method. However, this will only -recover messages up to the first invalid message. The recovery functions -defined in tplogutils.q allow all valid messages to be recovered from -the tickerplant log file.

    -

    -

    monitoringchecks.q

    -

    monitoringchecks.q implements a set of standard, basic monitoring -checks. They include checks to ensure:

    -
      -
    • -

      table sizes are increasing during live capture

      -
    • -
    • -

      the HDB data saves down correctly

      -
    • -
    • -

      the allocated memory of a process does not increase past a certain - size

      -
    • -
    • -

      the size of the symbol list in memory doesn’t grow to big

      -
    • -
    • -

      the process does not have too much on its pending subscriber queue

      -
    • -
    -

    These checks are intended to be run by the reporter process on a -schedule, and any alerts emailed to an appropriate recipient list.

    -

    -

    heartbeat.q

    -

    heartbeat.q implements heartbeating, and relies on both timer.q and -pubsub.q. A table called heartbeat will be published periodically, -allowing downstream processes to detect the availability of upstream -components. The heartbeat table contains a heartbeat time and counter. -The heartbeat script contains functions to handle and process heartbeats -and manage upstream process failures. See .api.p.hb.*for details.

    -

    -

    dbwriteutils.q

    -

    This contains a set of utility functions for writing data to historic -databases.

    -

    Sorting and Attributes

    -

    The sort utilities allow the sort order and attributes of tables to be -globally defined. This helps to manage the code base when the data can -potentially be written from multiple locations (e.g. written from the -RDB, loaded from flat file, replayed from the tickerplant log). The -configuration is defined in a csv which defaults to $KDBCONFG/sort.csv. -The default setup is that every table is sorted by sym and time, with a -p attribute on sym (this is the standard kdb+ tick configuration).

    -
    aquaq$ tail config/sort.csv 
    -tabname,att,column,sort
    -default,p,sym,1
    -default,,time,1
    -
    -

    As an example, assume we have an optiontrade table which we want to be -different from the standard set up. We would like the table to be sorted -by optionticker and then time, with a p attribute on optionticker. We -also have a column called underlyingticker which we can put an attribute -on as it is derived from optionticker (so there is an element of -de-normalisation present in the table). We also have an exchange field -which we would like to put a g attribute on. All other tables we want to -be sorted and parted in the standard way. The configuration file would -look like this (sort order is derived from the order within the file -combined with the sort flag being set to true):

    -
    aquaq$ tail config/sort.csv                
    -tabname,att,column,sort
    -default,p,sym,1
    -default,,time,1
    -optiontrade,p,optionticker,1
    -optiontrade,,exchtime,1
    -optiontrade,p,underlyingticker,0
    -optiontrade,g,exchange,0
    -
    -

    To invoke the sort utilities, supply a list of (tablename; partitions) -e.g.

    -
    q).sort.sorttab(`trthtrade;`:hdb/2014.11.20/trthtrade`:hdb/2014.11.20/trthtrade)
    -2014.12.03D09:56:19.214006000|aquaq|test|INF|sort|sorting the trthtrade table
    -2014.12.03D09:56:19.214045000|aquaq|test|INF|sorttab|No sort parameters have been specified for : trthtrade. Using default parameters
    -2014.12.03D09:56:19.214057000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.19/trthtrade/ by these columns : sym, time
    -2014.12.03D09:56:19.219716000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.19/trthtrade/
    -2014.12.03D09:56:19.220846000|aquaq|test|INF|sortfunction|sorting :hdb/2014.11.20/trthtrade/ by these columns : sym, time
    -2014.12.03D09:56:19.226008000|aquaq|test|INF|applyattr|applying p attr to the sym column in :hdb/2014.11.20/trthtrade/
    -2014.12.03D09:56:19.226636000|aquaq|test|INF|sort|finished sorting the trthtrade table
    -
    -

    A different sort configuration file can be loaded with

    -
    .sort.getsortcsv[`:file]
    -
    -

    Garbage Collection

    -

    The garbage collection utility prints some debug information before and -after the garbage collection.

    -
    q).gc.run[]                                                                                                                                                      
    -2014.12.03D10:22:51.688435000|aquaq|test|INF|garbagecollect|Starting garbage collect. mem stats: used=2 MB; heap=1984 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
    -2014.12.03D10:22:53.920656000|aquaq|test|INF|garbagecollect|Garbage collection returned 1472MB. mem stats: used=2 MB; heap=512 MB; peak=1984 MB; wmax=0 MB; mmap=0 MB; mphy=16384 MB; syms=0 MB; symw=0 MB
    -
    -

    Table Manipulation

    -

    The table manipulation utilities allow table manipulation routines to be -defined in a single place. This is useful when data can be written from -mutliple different processes e.g. RDB, WDB, or tickerplant log replay. -Instead of having to create a separate definition of customised -manipulation in each process, it can be done in a single location and -invokved in each process.

    -

    -

    help.q

    -

    The standard help.q from code.kx provides help utilities in the console. -This should be kept up to date with -[code.kx].

    -
    q)help`                                                                                                                                                                                                                         
    -adverb    | adverbs/operators
    -attributes| data attributes
    -cmdline   | command line parameters
    -data      | data types
    -define    | assign, define, control and debug
    -dotz      | .z locale contents
    -errors    | error messages
    -save      | save/load tables
    -syscmd    | system commands
    -temporal  | temporal - date & time casts
    -verbs     | verbs/functions
    -
    -

    -

    html.q

    -

    An HTML utility has been added to accompany the HTML5 front end for the -Monitoring process. It includes functions to format dates, tables to csv -to configure the HTML file to work on the correct process. It is -accessible from the .html namespace.

    -

    Modified u.q

    -

    Starting in kdb+ v3.4, the new broadcast feature has some performance -benefits. It works by serialising a message once before sending it -asynchronously to a list of subscribers whereas the previous method -would serialise it separately for each subscriber. To take advantage of -this, we’ve modified u.q. This can be turned off by setting .u.broadcast -to false. It is enabled by default, but will only override default -publishing if the kdb+ version being used is 3.4 or after.

    -

    -

    Full API

    -

    The full public api can be found by running

    -
    q).api.u`                                                                                                                                                                                                                       
    -name             | vartype  namespace public descrip                 ..
    ------------------| --------------------------------------------------..
    -.proc.createlog  | function .proc     1      "Create the standard out..
    -.proc.rolllogauto| function .proc     1      "Roll the standard out/e..
    -.proc.loadf      | function .proc     1      "Load the specified file..
    -.proc.loaddir    | function .proc     1      "Load all the .q and .k ..
    -.lg.o            | function .lg       1      "Log to standard out"   ..
    -..
    -
    -

    Combined with the commented configuration file, this should give a good -overview of the functionality available. A description of the individual -namespaces is below- run .api.u namespace*to list the functions.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NamespaceDescription
    .procProcess API
    .lgStandard out/error logging API
    .errError throwing API
    .usageUsage logging API
    .accessPermissions API
    .clientsClient tracking API
    .serversServer tracking API
    .asyncAsync communication API
    .timerTimer API
    .cacheCaching API
    .tzTimezone conversions API
    .checksMonitoring API
    .cmpCompression API
    .psPublish and Subscribe API
    .hbHeartbeating API
    .loaderData Loader API
    .sortData sorting and attribute setting API
    .subSubscription API
    .gcGarbage Collection API
    .tplogTickerplant Log Replay API
    .apiAPI management API
    -

    API Table

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    namevartypenamespacedescripparamsreturn
    .proc.createlogfunction.procCreate the standard out and standard err log files. Redirect to them[string: log directory; string: name of the log file;mixed: timestamp suffix for the file (can be null); boolean: suppress the generation of an alias link]null
    .proc.rolllogautofunction.procRoll the standard out/err log files[]null
    .proc.loadffunction.procLoad the specified file[string: filename]null
    .proc.loaddirfunction.procLoad all the .q and .k files in the specified directory. If order.txt is found in the directory, use the ordering found in that file[string: name of directory]null
    .proc.getattributesfunction.procCalled by external processes to retrieve the attributes (advertised functionality) of this process[]dictionary of attributes
    .proc.overridefunction.procOverride configuration varibles with command line parameters. For example, if you set -.servers.HOPENTIMEOUT 5000 on the command line and call this function, then the command line value will be used[]null
    .proc.overrideconfigfunction.procOverride configuration varibles with values in supplied parameter dictionary. Generic version of .proc.override[dictionary: command line parameters. .proc.params should be used]null
    .lg.ofunction.lgLog to standard out[symbol: id of log message; string: message]null
    .lg.efunction.lgLog to standard err[symbol: id of log message; string: message]null
    .lg.lfunction.lgLog to either standard error or standard out, depending on the log level[symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters, used in the logging extension function]null
    .lg.errfunction.lgLog to standard err[symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters, used in the logging extension function]null
    .lg.extfunction.lgExtra function invoked in standard logging function .lg.l. Can be used to do more with the log message, e.g. publish externally[symbol: log level; symbol: name of process; symbol: id of log message; string: message; dict: extra parameters]null
    .err.exfunction.errLog to standard err, exit[symbol: id of log message; string: message; int: exit code]null
    .err.usagefunction.errThrow a usage error and exit[]null
    .err.paramfunction.errCheck a dictionary for a set of required parameters. Print an error and exit if not all required are supplied[dict: parameters; symbol list: the required param values]null
    .err.envfunction.errCheck if a list of required environment variables are set. If not, print an error and exit[symbol list: list of required environment variables]null
    .usage.rolllogautofunction.usageRoll the .usage txt files[]null
    .usage.readlogfunction.usageRead and return a usage log file as a table[string: name of log file]null
    .usage.logtodiskvariable.usagewhether to log to disk
    .usage.logtomemoryvariable.usagewhether to log to .usage.usage
    .usage.ignorevariable.usagewhether to check the ignore list for functions to ignore
    .usage.ignorelistvariable.usagethe list of functions to ignore
    .usage.logrollvariable.usagewhether to automatically roll the log file
    .usage.usagetable.usagelog of messages through the message handlers
    .clients.clientstable.clientstable containing client handles and session values
    .sub.getsubscriptionhandlesfunction.subConnect to a list of processes of a specified type[symbol: process type to match; symbol: process name to match; dictionary:attributes of process]table of process names, types and the handle connected on
    .sub.subscribefunction.subSubscribe to a table or list of tables and specified instruments[symbol (list):table names; symbol (list): instruments; boolean: whether to set the schema from the server; boolean: wether to replay the logfile; dictionary: procname,proctype,handle
    .pm.adduserfunction.pmAdds a user to be permissioned as well as setting their password and the method used to hash it.[symbol: the username; symbol: method used to authenticate; symbol: method used to hash the password; string: password, hashed using the proper method]null
    .pm.addgroupfunction.pmAdd a group which will have access to certain tables and variables[symbol: the name of the group; string: a description of the group]null
    .pm.addrolefunction.pmAdd a role which will have access to certain functions[symbol: the name of the role; string: a description of the role]null
    .pm.addtogroupfunction.pmAdd a user to a group, giving them access to all of its variables[symbol: the name of the user to add; symbol: group the user is to be added to]null
    .pm.assignrolefunction.pmAssign a user a role, giving them access to all of its functions[symbol: the name of the user to add; symbol: role the user is to be assigned to]null
    .pm.grantaccessfunction.pmGive a group access to a variable[symbol: the name of the variable the group should get access to; symbol: group that is to be given this access; symbol: the type of access that should be given, eg. read, write]null
    .pm.grantfunctionfunction.pmGive a role access to a functionsymbol: name of the function to be added; symbol: role that is to be given this access; TO CLARIFYnull
    .pm.createvirtualtablefunction.pmCreate a virtual table that a group might be able to access instead of the full table[symbol: new name of the table; symbol: name of the actual table t add; TO CLARIFY]null
    .pm.cloneuserfunction.pmAdd a new user that is identical to another user[symbol: name of the new user; symbol: name of the user to be cloned; string: password of the new user]null
    .access.addsuperuserfunction.accessAdd a super user[symbol: user]null
    .access.addpoweruserfunction.accessAdd a power user[symbol: user]null
    .access.adddefaultuserfunction.accessAdd a default user[symbol: user]null
    .access.readpermissionsfunction.accessRead the permissions from a directory[string: directory containing the permissions files]null
    .access.USERStable.accessTable of users and their types
    .servers.openconfunction.serversopen a connection to a process using the default timeout. If no user:pass supplied, the default one will be added if set[symbol: the host:port[:user:pass]]int: the process handle, null if the connection failed
    .servers.addhfunction.serversopen a connection to a server, store the connection details[symbol: the host:port:user:pass connection symbol]int: the server handle
    .servers.addwfunction.serversadd the connection details of a process behind the handle[int: server handle]null
    .servers.addnthawcfunction.serversadd the details of a connection to the table[symbol: process name; symbol: process type; hpup: host:port:user:pass connection symbol; dict: attributes of the process; int: handle to the process;boolean: whether to check the handle is valid on insertint: the handle of the process
    .servers.getserversfunction.serversget a table of servers which match the given criteria[symbol: pick the server based on the name value or the type value. Can be either `procname`proctype; symbol(list): lookup values. ` for any; dict: requirements dictionary; boolean: whether to automatically open dead connections for the specified lookup values; boolean: if only one of each of the specified lookup values is required (means dead connections aren't opened if there is one available)]table: processes details and requirements matches
    .servers.gethandlebytypefunction.serversget a server handle for the supplied type[symbol: process type; symbol: selection criteria. One of `roundrobin`any`last]int: handle of server
    .servers.gethpbytypefunction.serversget a server hpup connection symbol for the supplied type[symbol: process type; symbol: selection criteria. One of `roundrobin`any`last]symbol: h:p:u:p connection symbol of server
    .servers.startupfunction.serversinitialise all the connections. Must processes should call this during initialisation[]null
    .servers.refreshattributesfunction.serversrefresh the attributes registered with the discovery service. Should be called whenever they change e.g. end of day for an HDB[]null
    .servers.SERVERStable.serverstable containing server handles and session values
    .timer.repeatfunction.timerAdd a repeating timer with default next schedule[timestamp: start time; timestamp: end time; timespan: period; mixedlist: (function and argument list); string: description string]null
    .timer.oncefunction.timerAdd a one-off timer to fire at a specific time[timestamp: execute time; mixedlist: (function and argument list); string: description string]null
    .timer.removefunction.timerDelete a row from the timer schedule[int: timer id to delete]null
    .timer.removefuncfunction.timerDelete a specific function from the timer schedule[mixedlist: (function and argument list)]null
    .timer.repfunction.timerAdd a repeating timer - more flexibility than .timer.repeat[timestamp: execute time; mixedlist: (function and argument list); short: scheduling algorithm for next timer; string: description string; boolean: whether to check if this new function is already present on the schedule]null
    .timer.onefunction.timerAdd a one-off timer to fire at a specific time - more flexibility than .timer.once[timestamp: execute time; mixedlist: (function and argument list); string: description string; boolean: whether to check if this new function is already present on the schedule]null
    .timer.timertable.timerThe table containing the timer information
    .cache.executefunction.cacheCheck the cache for a valid result set, return the results if found, execute the function, cache it and return if not[mixed: function or string to execute;timespan: maximum allowable age of cache item if found in cache]mixed: result of function
    .cache.getperffunction.cacheReturn the performance statistics of the cache[]table: cache performance
    .cache.maxsizevariable.cacheThe maximum size in MB of the cache. This is evaluated using -22!, so may be incorrect due to power of 2 memory allocation. To be conservative and ensure it isn't exceeded, set max size to half of the actual max size that you want
    .cache.maxindividualvariable.cacheThe maximum size in MB of an individual item in the cache. This is evaluated using -22!, so may be incorrect due to power of 2 memory allocation. To be conservative and ensure it isn't exceeded, set max size to half of the actual max size that you want
    .tz.dgfunction.tzdefault from GMT. Convert a timestamp from GMT to the default timezone[timestamp (list): timestamps to convert]timestamp atom or list
    .tz.lgfunction.tzlocal from GMT. Convert a timestamp from GMT to the specified local timezone[symbol (list): timezone ids;timestamp (list): timestamps to convert]timestamp atom or list
    .tz.gdfunction.tzGMT from default. Convert a timestamp from the default timezone to GMT[timestamp (list): timestamps to convert]timestamp atom or list
    .tz.glfunction.tzGMT from local. Convert a timestamp from the specified local timezone to GMT[symbol (list): timezone ids; timestamp (list): timestamps to convert]timestamp atom or list
    .tz.ttzfunction.tzConvert a timestamp from a specified timezone to a specified destination timezone[symbol (list): destination timezone ids; symbol (list): source timezone ids; timestamp (list): timestamps to convert]timestamp atom or list
    .tz.defaultvariable.tzDefault timezone
    .tz.ttable.tzTable of timestamp information
    .email.connectdefaultfunction.emailconnect to the default mail server specified in configuration[]
    .email.senddefaultfunction.emailconnect to email server if not connected. Send email using default settings[dictionary of email parameters. Required dictionary keys are to (symbol (list) of email address to send to), subject (character list), body (list of character arrays). Optional parameters are cc (symbol(list) of addresses to cc), bodyType (can be `html, default is `text), attachment (symbol (list) of files to attach), image (symbol of image to append to bottom of email. `none is no image), debug (int flag for debug level of connection library. 0i=no info, 1i=normal. 2i=verbose)]size in bytes of sent email. -1 if failure
    .email.testfunction.emailsend a test email[symbol(list):email address to send test email to]size in bytes of sent email. -1 if failure
    .hb.addprocsfunction.hbAdd a set of process types and names to the heartbeat table to actively monitor for heartbeats. Processes will be automatically added and monitored when the heartbeats are subscribed to, but this is to allow for the case where a process might already be dead and so can't be subscribed to[symbol(list): process types; symbol(list): process names]
    .hb.processwarningfunction.hbCallback invoked if any process goes into a warning state. Default implementation is to do nothing - modify as required[table: processes currently in warning state]
    .hb.processerrorfunction.hbCallback invoked if any process goes into an error state. Default implementation is to do nothing - modify as required[table: processes currently in error state]
    .hb.storeheartbeatfunction.hbStore a heartbeat update. This function should be added to you update callback when a heartbeat is received[table: the heartbeat table data to store]
    .hb.warningperiodfunction.hbReturn the warning period for a particular process type. Default is to return warningtolerance * publishinterval. Can be overridden as required[symbollist: the process types to return the warning period for]timespan list of warning period
    .hb.errorperiodfunction.hbReturn the error period for a particular process type. Default is to return errortolerance * publishinterval. Can be overridden as required[symbollist: the process types to return the error period for]timespan list of error period
    .rdb.moveandclearfunction.rdbMove a variable (table) from one namespace to another, deleting its contents. Useful during the end-of-day roll down for tables you do not want to save to the HDB[symbol: the namespace to move the table from; symbol:the namespace to move the variable to; symbol: the name of the variable]null
    .api.ffunction.apiFind a function/variable/table/view in the current process[string:search string]table of matching elements
    .api.pfunction.apiFind a public function/variable/table/view in the current process[string:search string]table of matching public elements
    .api.ufunction.apiFind a non-standard q public function/variable/table/view in the current process. This excludes the .q, .Q, .h, .o namespaces[string:search string]table of matching public elements
    .api.sfunction.apiSearch all function definitions for a specific string[string: search string]table of matching functions and definitions
    .api.findfunction.apiGeneric method for finding functions/variables/tables/views. f,p and u are based on this[string: search string; boolean (list): public flags to include; boolean: whether the search is context senstivetable of matching elements
    .api.searchfunction.apiGeneric method for searching all function definitions for a specific string. s is based on this[string: search string; boolean: whether the search is context senstivetable of matching functions and definitions
    .api.addfunction.apiAdd a function to the api description table[symbol:the name of the function; boolean:whether it should be called externally; string:the description; dict or string:the parameters for the function;string: what the function returns]null
    .api.fullapifunction.apiReturn the full function api table[]api table
    .api.mfunction.apiReturn the ordered approximate memory usage of each variable and view in the process. Views will be re-evaluated if required[]memory usage table
    .api.memfunction.apiReturn the ordered approximate memory usage of each variable and view in the process. Views are only returned if view flag is set to true. Views will be re-evaluated if required[boolean:return views]memory usage table
    .api.whereamifunction.apiGet the name of a supplied function definition. Can be used in the debugger e.g. .api.whereami[.z.s]function definitionsymbol: the name of the current function
    .ps.publishfunction.psPublish a table of data[symbol: name of table; table: table of data]
    .ps.subscribefunction.psSubscribe to a table and list of instruments[symbol(list): table name. ` for all; symbol(list): symbols to subscribe to. ` for all]mixed type list of table names and schemas
    .ps.initialisefunction.psInitialise the pubsub routines. Any tables that exist in the top level can be published[]
    .async.deferredfunction.asyncUse async messaging to simulate sync communication[int(list): handles to query; query](boolean list:success status; result list)
    .async.postbackfunction.asyncSend an async message to a process and the results will be posted back within the postback function call[int(list): handles to query; query; postback function]boolean list: successful send status
    .cmp.showcompfunction.cmpShow which files will be compressed and how; driven from csv file[`:/path/to/database; `:/path/to/configcsv; maxagefilestocompress]table of files to be compressed
    .cmp.compressmaxagefunction.cmpRun compression on files using parameters specified in configuration csv file, and specifying the maximum age of files to compress[`:/path/to/database; `:/path/to/configcsv; maxagefilestocompress]
    .cmp.docompressionfunction.cmpRun compression on files using parameters specified in configuration csv file[`:/path/to/database; `:/path/to/configcsv]
    .loader.loadallfilesfunction.loaderGeneric loader function to read a directory of files in chunks and write them out to disk[dictionary of load parameters. Should have keys of headers (symbol list), types (character list), separator (character), tablename (symbol), dbdir (symbol). Optional params of dataprocessfunc (diadic function), datecol (name of column to extract date from: symbol), chunksize (amount of data to read at once:int), compression (compression parameters to use e.g. 16 1 0:int list), gc (boolean flag of whether to run garbage collection:boolean); directory containing files to load (symbol)]
    .sort.sorttabfunction.sortSort and set the attributes for a table and set of partitions based on a configuration file (default is $KDBCONFIG/sort.csv)[2 item list of (tablename e.g. `trade; partitions to sort and apply attributes to e.g. `:/hdb/2000.01.01/trade`:hdb/2000.01.02/trade)]
    .sort.getsortcsvfunction.sortRead in the sort csv from the specified location[symbol: the location of the file e.g. `:config/sort.csv]
    .gc.runfunction.gcRun garbage collection, print debug info before and after
    .mem.objsizefunction.memReturns the calculated memory size in bytes used by an object. It may take a little bit of time for objects with lots of nested structures (e.g. lots of nested columns)[q object]size of the object in bytes
    .tplog.checkfunction.tplogChecks if tickerplant log can be replayed. If it can or can replay the first X messages, then returns the log handle, else it will read log as byte stream and create a good log and then return the good log handle[logfile (symbol), handle to the log file to check; lastmsgtoreplay (long), the index of the last message to be replayed from log ]handle to log file, will be either the input log handle or handle to repaired log, depends on whether the log was corrupt
    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file diff --git a/site/visualisation/index.html b/site/visualisation/index.html deleted file mode 100644 index 3159b71e4..000000000 --- a/site/visualisation/index.html +++ /dev/null @@ -1,644 +0,0 @@ - - - - - - - - - - - - - - - - - - Visualisation - TorQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - -
    -
    -
    - - -
    -
    -
    - - -
    -
    - - edit - - - -

    Visualisation

    -

    kdb+ supports websockets and so HTML5 GUIs can be built. We have -incorporated a set of server side and client side utilities to ease HTML -GUI development.

    -

    -

    kdb+ Utilities

    -

    The server side utilities are contained in html.q. These utilise some -community code, specifically json.k and a modified version of u.q, both -from Kx Systems. The supplied functionality includes:

    -
      -
    • -

      json.k provides two way conversion between kdb+ data structures and - JSON;

      -
    • -
    • -

      u.q is the standard pub/sub functionality provided with kdb+tick, - and a modified version is incorporated to publish data structures - which can be easily interpreted in JavaScript;

      -
    • -
    • -

      functions for reformatting temporal types to be JSON compliant;

      -
    • -
    • -

      page serving to utilise the inbuilt kdb+ webserver to serve custom - web pages. An example would be instead of having to serve a page - with a hardcoded websocket connection host and port, the kdb+ - process can serve a page connecting back to itself no matter which - host or port it is running on.

      -
    • -
    -

    -

    JavaScript Utilities

    -

    The JavaScript utilities are contained in kdbconnect.js. The library -allows you to:

    -
      -
    • -

      create a connection to the kdb+ process;

      -
    • -
    • -

      display the socket status;

      -
    • -
    • -

      sending queries;

      -
    • -
    • -

      binding results returned from kdb+ to updates in the webpage.

      -
    • -
    -

    -

    Outline

    -

    All communication between websockets and kdb+ is asynchronous. The -approach we have adopted is to ensure that all data sent to the web -browser is encoded as a JSON object containing a tag to enable the web -page to decipher what the data relates to. The format we have chosen is -for kdb+ to send dictionaries of the form:

    -
    `name`data!("dataID";dataObject)
    -
    -

    All the packing can be done by .html.dataformat. Please note that the -temporal types are converted to longs which can easily be converted to -JavaScript Date types. This formatting can be modified in the formating -dictionary .html.typemap.

    -
    q)a:flip `minute`time`date`month`timestamp`timespan`datetime`float`sym!enlist each (09:00; 09:00:00.0;.z.d; `month$.z.d; .z.p; .z.n;.z.z;20f;`a)
    -q).html.dataformat["start";(enlist `tradegraph)!enlist a]
    -name| "start"
    -data| (,`tradegraph)!,+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a)
    -q)first (.html.dataformat["start";(enlist `tradegraph)!enlist a])[`data;`tradegraph]                                                                                     
    -minute   | 32400000
    -time     | 32400000
    -date     | 1396828800000
    -month    | 1396310400000
    -timestamp| "2014-04-07T13:23:01Z"
    -timespan | 48181023
    -datetime | "2014-04-07T13:23:01Z"
    -float    | 20f
    -sym      | `a
    -
    -

    We have also extended this structure to allow web pages to receive data -in a way similar to the standard kdb+tick pub/sub format. In this case, -the data object looks like:

    -
    `name`data!("upd";`tablename`tabledata!(`trade;([]time:09:00 09:05 09:10; price:12 13 14)))
    -
    -

    This can be packed with .html.updformat:

    -
    q).html.updformat["upd";`tablename`tabledata!(`trade;a)]                                                                                                                 
    -name| "upd"
    -data| `tablename`tabledata!(`trade;+`minute`time`date`month`timestamp`timespan`datetime`float`sym!(,32400000;,32400000;,1396828800000;,1396310400000;,"2014-04-07T13:23:01Z";,48181023;,"2014-04-07T13:23:01Z";,20f;,`a))
    -q)first(.html.updformat["upd";`tablename`tabledata!(`trade;a)])[`data;`tabledata]                                                                                        
    -minute   | 32400000
    -time     | 32400000
    -date     | 1396828800000
    -month    | 1396310400000
    -timestamp| "2014-04-07T13:23:01Z"
    -timespan | 48181023
    -datetime | "2014-04-07T13:23:01Z"
    -float    | 20f
    -sym      | `a
    -
    -

    To utilise the pub/sub functionality, the web page must connect to the -kdb+ process and subscribe for updates. Subscriptions are done using

    -
    .html.wssub[`tablename]
    -
    -

    Publications from the kdb+ side are done with

    -
    .html.pub[`tablename;tabledata]
    -
    -

    On the JavaScript side the incoming messages (data events) must be bound -to page updates. For example, there might be an initialisation event -called “start” which allows the web page to retrieve all the initial -data from the process. The code below redraws the areas of the page with -the received data.

    -
    /* Bind data - Data type "start" will execute the callback function */
    -KDBCONNECT.bind("data","start",function(data){
    -  // Check that data is not empty
    -  if(data.hbtable.length !== 0)
    -   // Write HTML table to div element with id heartbeat-table
    -   { $("#heartbeat-table").html(MONITOR.jsonTable(data.hbtable));}
    -  if(data.lmtable.length !== 0)
    -   // Write HTML table to div element with id logmsg-table
    -   { $("#logmsg-table").html(MONITOR.jsonTable(data.lmtable));}  
    -  if(data.lmchart.length !== 0)
    -   // Log message error chart
    -   { MONITOR.barChart(data.lmchart,"logmsg-chart","Error Count","myTab"); }
    -  });
    -
    -

    Similarly the upd messages must be bound to page updates. In this case, -the structure is slightly different:

    -
    KDBCONNECT.bind("data","upd",function(data){
    -  if(data.tabledata.length===0) return;
    -  if(data.tablename === "heartbeat")
    -    { $("#heartbeat-table").html(MONITOR.jsonTable(data.tabledata));}
    -  if(data.tablename === "logmsg")
    -    { $("#logmsg-table").html(MONITOR.jsonTable(data.tabledata));}
    -  if(data.tablename === "lmchart")
    -    { MONITOR.barChart(data.tabledata,"logmsg-chart","Error Count","myTab"); }
    - });
    -
    -

    To display the WebSocket connection status the event “ws_event” must be -bound and it will output one of these default messages: “Connecting...”, -“Connected” and “Disconnected” depending on the connection state of the -WebSocket. Alternatively the value of the readyState attribute will -determine the WebSocket status.

    -
    // Select html element using jQuery
    -var $statusMsg = $("#status-msg");  
    -KDBCONNECT.bind("ws_event",function(data){
    -  // Data is the default message string
    -  $statusMsg.html(data);
    -});
    -KDBCONNECT.core.websocket.readyState // Returns 1 if connected.
    -
    -

    Errors can be displayed by binding the event called “error”.

    -
    KDBCONNECT.bind("error",function(data){
    -  $statusMsg.html("Error - " + data);
    -});
    -
    -

    -

    Example

    -

    A basic example is provided with the Monitor process. To get this to -work, u.q from kdb+tick should be placed in the code/common directory to -allow all processes to publish updates. It should be noted that this is -not intended as a production monitoring visualisation screen, moreso a -demonstration of functionality. See section monitorgui for more -details.

    -

    -

    Further Work

    -

    Further work planned includes:

    -
      -
    • -

      allow subscriptions on a key basis- currently all subscribers - receive all updates;

      -
    • -
    • -

      add JavaScript controls to allow in-place updates based on key - pairs, and scrolling window updates e.g. add N new rows to - top/bottom of the specified table;

      -
    • -
    • -

      allow multiple websocket connections to be maintained at the same - time.

      -
    • -
    - -
    -
    -
    -
    - - - - -
    - - - - - - - - - - - - \ No newline at end of file
    - -

    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 NB_=OgB5dIIKL7<74O{>K literal 0 HcmV?d00001 diff --git a/docs/graphics/discovery2.png b/docs/graphics/discovery2.png new file mode 100755 index 0000000000000000000000000000000000000000..14d350884a83fe7f29b8477475596620e9210389 GIT binary patch literal 37928 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