Skip to content

Instantly share code, notes, and snippets.

@zhxnlai
Created February 19, 2020 23:40
Show Gist options
  • Save zhxnlai/2805eb3ebcde50b38c1a737d7cbd4d09 to your computer and use it in GitHub Desktop.
Save zhxnlai/2805eb3ebcde50b38c1a737d7cbd4d09 to your computer and use it in GitHub Desktop.
<style id="jsbin-css">
@import url(https://fonts.googleapis.com/css?family=Roboto);
body {
font-family: Roboto, sans-serif !important;
max-width: 650px;
margin: auto;
padding: 1em;
}
h1 {
text-align: center;
border-style: none !important;
padding-bottom: 0 !important;
}
h1, h2, h3, h4, p, ul {
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
}
c {
display: block;
text-align: center;
}
d {
float: right;
}
t {
}
@media print {
body {
font-size: 14px;
max-width: 1000px;
line-height: 1.4;
}
h1, h2, h3, h4, p, ul {
border-style: none !important;
margin-top: 0.25em !important;
margin-bottom: 0.25em !important;
}
hp {
display: none;
}
}
body {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;
color: #333;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
body a {
background-color: transparent;
}
body a:active,
body a:hover {
outline: 0;
}
body strong {
font-weight: bold;
}
body h1 {
font-size: 2em;
margin: 0.67em 0;
}
body img {
border: 0;
}
body hr {
box-sizing: content-box;
height: 0;
}
body pre {
overflow: auto;
}
body code,
body kbd,
body pre {
font-family: monospace, monospace;
font-size: 1em;
}
body input {
color: inherit;
font: inherit;
margin: 0;
}
body html input[disabled] {
cursor: default;
}
body input {
line-height: normal;
}
body input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
body table {
border-collapse: collapse;
border-spacing: 0;
}
body td,
body th {
padding: 0;
}
body * {
box-sizing: border-box;
}
body input {
font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}
body a {
color: #4078c0;
text-decoration: none;
}
body a:hover,
body a:active {
text-decoration: underline;
}
body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
body hr:before {
display: table;
content: "";
}
body hr:after {
display: table;
clear: both;
content: "";
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
body h1 {
font-size: 30px;
}
body h2 {
font-size: 21px;
}
body h3 {
font-size: 16px;
}
body h4 {
font-size: 14px;
}
body h5 {
font-size: 12px;
}
body h6 {
font-size: 11px;
}
body blockquote {
margin: 0;
}
body ul,
body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
body ol ol,
body ul ol {
list-style-type: lower-roman;
}
body ul ul ol,
body ul ol ol,
body ol ul ol,
body ol ol ol {
list-style-type: lower-alpha;
}
body dd {
margin-left: 0;
}
body code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
body .octicon {
font: normal normal normal 16px/1 octicons-anchor;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body .octicon-link:before {
content: '\f05c';
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
body a:not([href]) {
color: inherit;
text-decoration: none;
}
body .anchor {
position: absolute;
top: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px;
}
body .anchor:focus {
outline: none;
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
body h1 .octicon-link,
body h2 .octicon-link,
body h3 .octicon-link,
body h4 .octicon-link,
body h5 .octicon-link,
body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle;
}
body h1:hover .anchor,
body h2:hover .anchor,
body h3:hover .anchor,
body h4:hover .anchor,
body h5:hover .anchor,
body h6:hover .anchor {
padding-left: 8px;
margin-left: -30px;
text-decoration: none;
}
body h1:hover .anchor .octicon-link,
body h2:hover .anchor .octicon-link,
body h3:hover .anchor .octicon-link,
body h4:hover .anchor .octicon-link,
body h5:hover .anchor .octicon-link,
body h6:hover .anchor .octicon-link {
display: inline-block;
}
body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
body h1 .anchor {
line-height: 1;
}
body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
body h2 .anchor {
line-height: 1;
}
body h3 {
font-size: 1.5em;
line-height: 1.43;
}
body h3 .anchor {
line-height: 1.2;
}
body h4 {
font-size: 1.25em;
}
body h4 .anchor {
line-height: 1.2;
}
body h5 {
font-size: 1em;
}
body h5 .anchor {
line-height: 1.1;
}
body h6 {
font-size: 1em;
color: #777;
}
body h6 .anchor {
line-height: 1.1;
}
body p,
body blockquote,
body ul,
body ol,
body dl,
body table,
body pre {
margin-top: 0;
margin-bottom: 16px;
}
body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
body ul,
body ol {
padding-left: 2em;
}
body ul ul,
body ul ol,
body ol ol,
body ol ul {
margin-top: 0;
margin-bottom: 0;
}
body li>p {
margin-top: 16px;
}
body dl {
padding: 0;
}
body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
body blockquote>:first-child {
margin-top: 0;
}
body blockquote>:last-child {
margin-bottom: 0;
}
body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
body table th {
font-weight: bold;
}
body table th,
body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
body img {
max-width: 100%;
box-sizing: border-box;
}
body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
body code:before,
body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
body .highlight {
margin-bottom: 16px;
}
body .highlight pre,
body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
body pre {
word-wrap: normal;
}
body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
body pre code:before,
body pre code:after {
content: normal;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .pl-c {
color: #969896;
}
body .pl-c1,
body .pl-s .pl-v {
color: #0086b3;
}
body .pl-e,
body .pl-en {
color: #795da3;
}
body .pl-s .pl-s1,
body .pl-smi {
color: #333;
}
body .pl-ent {
color: #63a35c;
}
body .pl-k {
color: #a71d5d;
}
body .pl-pds,
body .pl-s,
body .pl-s .pl-pse .pl-s1,
body .pl-sr,
body .pl-sr .pl-cce,
body .pl-sr .pl-sra,
body .pl-sr .pl-sre {
color: #183691;
}
body .pl-v {
color: #ed6a43;
}
body .pl-id {
color: #b52a1d;
}
body .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
body .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
body .pl-ml {
color: #693a17;
}
body .pl-mh,
body .pl-mh .pl-en,
body .pl-ms {
color: #1d3e81;
font-weight: bold;
}
body .pl-mq {
color: #008080;
}
body .pl-mi {
color: #333;
font-style: italic;
}
body .pl-mb {
color: #333;
font-weight: bold;
}
body .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
body .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
body .pl-mdr {
color: #795da3;
font-weight: bold;
}
body .pl-mo {
color: #1d3e81;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .task-list-item {
list-style-type: none;
}
body .task-list-item+.task-list-item {
margin-top: 3px;
}
body .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
body :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
</style>
<h1 id="zhixuan-lai">Zhixuan Lai</h1>
<c>[email protected], Twitter: <a href="https://twitter.com/zhxnlai">@zhxnlai</a>, Github: <a href="https://github.com/zhxnlai">github.com/zhxnlai</a>, Website: <a href="https://zhxnlai.github.io">zhxnlai.github.io</a></c>
<h2 id="experience">Experience</h2>
<h4 id="square">Square</h4>
<p><t>Software Engineer - Cash App Product Platform </t><d>June 2019 - Present</d></p>
<ul>
<li>Build primitive tools and services to speed up developer productivity and feature velocity.</li>
<li>Migrate features out of legacy systems.</li>
<li>Scale systems to Cash App&#39;s growing customer base.</li>
</ul>
<h4 id="tinder">Tinder</h4>
<p><t>Software Engineer - Backend Platform </t><d>Sept 2018 - June 2019</d></p>
<ul>
<li>Improved the event infrastructure and used it to decouple core services.</li>
<li>Maintained and launched experiments to tune the backend recommendation engine.</li>
<li>Modularized the caching layer and migrated it to ElastiCache.</li>
</ul>
<p><t>Software Engineer - Android Platform </t><d>Sept 2016 - Sept 2018</d></p>
<ul>
<li>Developed Tinder Gold on Android, which made Tinder the #1 top grossing app.</li>
<li>Designed frameworks and libraries that enabled other engineers to build user facing features</li>
<li>Modularized the Android app to improve productivity of the growing team</li>
</ul>
<h4 id="google">Google</h4>
<p><t>Software Engineering Intern</t><d>June 2015 — Sept 2015</d></p>
<ul>
<li>Implemented the time bar preview feature for YouTube Android and iOS app</li>
<li>Optimized performance for emerging markets</li>
</ul>
<h4 id="-cdg-labs-https-github-com-cdglabs-viewpoint-research-institute-http-vpri-org-"><a href="https://github.com/cdglabs">CDG Labs</a> / <a href="http://vpri.org/">Viewpoint Research Institute</a></h4>
<p><t>Research Intern</t><d>Mar 2015 — June 2015</d></p>
<ul>
<li>Worked in Alan Kay&#39;s Lab on a <a href="http://www.cdglabs.org/prolog/">Prolog Visualizer</a> using <a href="https://github.com/cdglabs/ohm">Ohm</a>, a pattern matching language. It was used in UCLA <a href="http://www.cs.ucla.edu/classes/spring15/cs131/">CS131</a> (programming languages) class to teach Prolog</li>
</ul>
<h2 id="projects">Projects</h2>
<h4 id="open-source">Open Source</h4>
<ul>
<li><a href="https://github.com/Tinder/Scarlet">Tinder/Scarlet</a><ul>
<li>A <a href="https://square.github.io/retrofit/">Retrofit</a> inspired library for WebSocket, ServerSentEvent, Socket IO, STOMP, and MQTT written in Kotlin</li>
</ul>
</li>
<li><a href="https://github.com/Tinder/StateMachine">Tinder/StateMachine</a><ul>
<li>A Kotlin DSL for finite state machine</li>
</ul>
</li>
<li><a href="https://github.com/zhxnlai/ZLSwipeableViewSwift">ZLSwipeableViewSwift</a><ul>
<li>A Tinder like UI library originally developed for <a href="https://zhxnlai.github.io/#/murmur">Murmur</a> that has 1.8K+ stars on Github</li>
</ul>
</li>
<li><a href="http://zhxnlai.github.io/printf">Printf Visualizer</a><ul>
<li>A visualizer for printf format string built with React</li>
</ul>
</li>
<li>For more of my open source projects, see: <a href="https://github.com/zhxnlai">https://github.com/zhxnlai</a></li>
</ul>
<h4 id="conferences">Conferences</h4>
<ul>
<li><a href="https://speakerdeck.com/zhxnlai/taming-websocket-with-scarlet-droidcon-sf">Taming WebSocket With Scarlet</a><ul>
<li>Speaker at droidcon SF 2018, Devoxx Morocco 2018, Mobile Era 2018, Mobiconf 2018, and Conference for Kotliners 2018</li>
</ul>
</li>
<li><a href="https://www.slideshare.net/secret/JvqBLgou0REKdK">24K Magic with Shimmy</a><ul>
<li>Speaker at DevFest LA 2017</li>
</ul>
</li>
</ul>
<h4 id="awards">Awards</h4>
<ul>
<li><a href="https://developer.apple.com/wwdc/scholarships/">Student scholarship</a> winner at WWDC 2015</li>
<li><a href="https://zhxnlai.github.io/#/horoscoper">Horoscoper</a>, winner of Top Ten and Best VR Hack at HackUCI 2014<ul>
<li>A multiplayer virtual planetarium simulator for Oculus Rift developed with Unity3d</li>
</ul>
</li>
<li><a href="https://zhxnlai.github.io/#/intersolar">Intersolar</a>, HackSC 2014<ul>
<li>A virtual solar system based on Horoscoper, featuring enhanced graphics and arm gesture control using Myo</li>
</ul>
</li>
<li><a href="https://zhxnlai.github.io/#/spacinarium">Spacinarium</a>, winner of DAQRI grand price at LAHacks 2014<ul>
<li>A multiplayer AR game developed with Unity3d, Vuforia and DAQRI Instant On</li>
</ul>
</li>
</ul>
<h2 id="education">Education</h2>
<p><t>University of California, Los Angeles (UCLA)</t><d>2012 - 2016</d></p>
<ul>
<li>Mathematics of Computation B.S.</li>
</ul>
<script id="jsbin-source-html" type="text/html"># Zhixuan Lai
<c>[email protected], Twitter: [@zhxnlai](https://twitter.com/zhxnlai), Github: [github.com/zhxnlai](https://github.com/zhxnlai), Website: [zhxnlai.github.io](https://zhxnlai.github.io)</c>
Experience
---
#### Square
<t>Software Engineer - Cash App Product Platform </t><d>June 2019 - Present</d>
- Build primitive tools and services to speed up developer productivity and feature velocity.
- Migrate features out of legacy systems.
- Scale systems to Cash App's growing customer base.
#### Tinder
<t>Software Engineer - Backend Platform </t><d>Sept 2018 - June 2019</d>
- Improved the event infrastructure and used it to decouple core services.
- Maintained and launched experiments to tune the backend recommendation engine.
- Modularized the caching layer and migrated it to ElastiCache.
<t>Software Engineer - Android Platform </t><d>Sept 2016 - Sept 2018</d>
- Developed Tinder Gold on Android, which made Tinder the #1 top grossing app.
- Designed frameworks and libraries that enabled other engineers to build user facing features
- Modularized the Android app to improve productivity of the growing team
#### Google
<t>Software Engineering Intern</t><d>June 2015 — Sept 2015</d>
- Implemented the time bar preview feature for YouTube Android and iOS app
- Optimized performance for emerging markets
#### [CDG Labs](https://github.com/cdglabs) / [Viewpoint Research Institute](http://vpri.org/)
<t>Research Intern</t><d>Mar 2015 — June 2015</d>
- Worked in Alan Kay's Lab on a [Prolog Visualizer](http://www.cdglabs.org/prolog/) using [Ohm](https://github.com/cdglabs/ohm), a pattern matching language. It was used in UCLA [CS131](http://www.cs.ucla.edu/classes/spring15/cs131/) (programming languages) class to teach Prolog
Projects
---
#### Open Source
- [Tinder/Scarlet](https://github.com/Tinder/Scarlet)
- A [Retrofit](https://square.github.io/retrofit/) inspired library for WebSocket, ServerSentEvent, Socket IO, STOMP, and MQTT written in Kotlin
- [Tinder/StateMachine](https://github.com/Tinder/StateMachine)
- A Kotlin DSL for finite state machine
- [ZLSwipeableViewSwift](https://github.com/zhxnlai/ZLSwipeableViewSwift)
- A Tinder like UI library originally developed for [Murmur](https://zhxnlai.github.io/#/murmur) that has 1.8K+ stars on Github
- [Printf Visualizer](http://zhxnlai.github.io/printf)
- A visualizer for printf format string built with React
- For more of my open source projects, see: https://github.com/zhxnlai
#### Conferences
- [Taming WebSocket With Scarlet](https://speakerdeck.com/zhxnlai/taming-websocket-with-scarlet-droidcon-sf)
- Speaker at droidcon SF 2018, Devoxx Morocco 2018, Mobile Era 2018, Mobiconf 2018, and Conference for Kotliners 2018
- [24K Magic with Shimmy](https://www.slideshare.net/secret/JvqBLgou0REKdK)
- Speaker at DevFest LA 2017
#### Awards
- [Student scholarship](https://developer.apple.com/wwdc/scholarships/) winner at WWDC 2015
- [Horoscoper](https://zhxnlai.github.io/#/horoscoper), winner of Top Ten and Best VR Hack at HackUCI 2014
- A multiplayer virtual planetarium simulator for Oculus Rift developed with Unity3d
- [Intersolar](https://zhxnlai.github.io/#/intersolar), HackSC 2014
- A virtual solar system based on Horoscoper, featuring enhanced graphics and arm gesture control using Myo
- [Spacinarium](https://zhxnlai.github.io/#/spacinarium), winner of DAQRI grand price at LAHacks 2014
- A multiplayer AR game developed with Unity3d, Vuforia and DAQRI Instant On
Education
---
<t>University of California, Los Angeles (UCLA)</t><d>2012 - 2016</d>
- Mathematics of Computation B.S.
</script>
<script id="jsbin-source-css" type="text/css">@import url(https://fonts.googleapis.com/css?family=Roboto);
body {
font-family: Roboto, sans-serif !important;
max-width: 650px;
margin: auto;
padding: 1em;
}
h1 {
text-align: center;
border-style: none !important;
padding-bottom: 0 !important;
}
h1, h2, h3, h4, p, ul {
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
}
c {
display: block;
text-align: center;
}
d {
float: right;
}
t {
}
@media print {
body {
font-size: 14px;
max-width: 1000px;
line-height: 1.4;
}
h1, h2, h3, h4, p, ul {
border-style: none !important;
margin-top: 0.25em !important;
margin-bottom: 0.25em !important;
}
hp {
display: none;
}
}
body {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;
color: #333;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
body a {
background-color: transparent;
}
body a:active,
body a:hover {
outline: 0;
}
body strong {
font-weight: bold;
}
body h1 {
font-size: 2em;
margin: 0.67em 0;
}
body img {
border: 0;
}
body hr {
box-sizing: content-box;
height: 0;
}
body pre {
overflow: auto;
}
body code,
body kbd,
body pre {
font-family: monospace, monospace;
font-size: 1em;
}
body input {
color: inherit;
font: inherit;
margin: 0;
}
body html input[disabled] {
cursor: default;
}
body input {
line-height: normal;
}
body input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
body table {
border-collapse: collapse;
border-spacing: 0;
}
body td,
body th {
padding: 0;
}
body * {
box-sizing: border-box;
}
body input {
font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}
body a {
color: #4078c0;
text-decoration: none;
}
body a:hover,
body a:active {
text-decoration: underline;
}
body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
body hr:before {
display: table;
content: "";
}
body hr:after {
display: table;
clear: both;
content: "";
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
body h1 {
font-size: 30px;
}
body h2 {
font-size: 21px;
}
body h3 {
font-size: 16px;
}
body h4 {
font-size: 14px;
}
body h5 {
font-size: 12px;
}
body h6 {
font-size: 11px;
}
body blockquote {
margin: 0;
}
body ul,
body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
body ol ol,
body ul ol {
list-style-type: lower-roman;
}
body ul ul ol,
body ul ol ol,
body ol ul ol,
body ol ol ol {
list-style-type: lower-alpha;
}
body dd {
margin-left: 0;
}
body code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
body .octicon {
font: normal normal normal 16px/1 octicons-anchor;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body .octicon-link:before {
content: '\f05c';
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
body a:not([href]) {
color: inherit;
text-decoration: none;
}
body .anchor {
position: absolute;
top: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px;
}
body .anchor:focus {
outline: none;
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
body h1 .octicon-link,
body h2 .octicon-link,
body h3 .octicon-link,
body h4 .octicon-link,
body h5 .octicon-link,
body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle;
}
body h1:hover .anchor,
body h2:hover .anchor,
body h3:hover .anchor,
body h4:hover .anchor,
body h5:hover .anchor,
body h6:hover .anchor {
padding-left: 8px;
margin-left: -30px;
text-decoration: none;
}
body h1:hover .anchor .octicon-link,
body h2:hover .anchor .octicon-link,
body h3:hover .anchor .octicon-link,
body h4:hover .anchor .octicon-link,
body h5:hover .anchor .octicon-link,
body h6:hover .anchor .octicon-link {
display: inline-block;
}
body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
body h1 .anchor {
line-height: 1;
}
body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
body h2 .anchor {
line-height: 1;
}
body h3 {
font-size: 1.5em;
line-height: 1.43;
}
body h3 .anchor {
line-height: 1.2;
}
body h4 {
font-size: 1.25em;
}
body h4 .anchor {
line-height: 1.2;
}
body h5 {
font-size: 1em;
}
body h5 .anchor {
line-height: 1.1;
}
body h6 {
font-size: 1em;
color: #777;
}
body h6 .anchor {
line-height: 1.1;
}
body p,
body blockquote,
body ul,
body ol,
body dl,
body table,
body pre {
margin-top: 0;
margin-bottom: 16px;
}
body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
body ul,
body ol {
padding-left: 2em;
}
body ul ul,
body ul ol,
body ol ol,
body ol ul {
margin-top: 0;
margin-bottom: 0;
}
body li>p {
margin-top: 16px;
}
body dl {
padding: 0;
}
body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
body blockquote>:first-child {
margin-top: 0;
}
body blockquote>:last-child {
margin-bottom: 0;
}
body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
body table th {
font-weight: bold;
}
body table th,
body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
body img {
max-width: 100%;
box-sizing: border-box;
}
body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
body code:before,
body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
body .highlight {
margin-bottom: 16px;
}
body .highlight pre,
body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
body pre {
word-wrap: normal;
}
body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
body pre code:before,
body pre code:after {
content: normal;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .pl-c {
color: #969896;
}
body .pl-c1,
body .pl-s .pl-v {
color: #0086b3;
}
body .pl-e,
body .pl-en {
color: #795da3;
}
body .pl-s .pl-s1,
body .pl-smi {
color: #333;
}
body .pl-ent {
color: #63a35c;
}
body .pl-k {
color: #a71d5d;
}
body .pl-pds,
body .pl-s,
body .pl-s .pl-pse .pl-s1,
body .pl-sr,
body .pl-sr .pl-cce,
body .pl-sr .pl-sra,
body .pl-sr .pl-sre {
color: #183691;
}
body .pl-v {
color: #ed6a43;
}
body .pl-id {
color: #b52a1d;
}
body .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
body .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
body .pl-ml {
color: #693a17;
}
body .pl-mh,
body .pl-mh .pl-en,
body .pl-ms {
color: #1d3e81;
font-weight: bold;
}
body .pl-mq {
color: #008080;
}
body .pl-mi {
color: #333;
font-style: italic;
}
body .pl-mb {
color: #333;
font-weight: bold;
}
body .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
body .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
body .pl-mdr {
color: #795da3;
font-weight: bold;
}
body .pl-mo {
color: #1d3e81;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .task-list-item {
list-style-type: none;
}
body .task-list-item+.task-list-item {
margin-top: 3px;
}
body .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
body :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
</script>
@import url(https://fonts.googleapis.com/css?family=Roboto);
body {
font-family: Roboto, sans-serif !important;
max-width: 650px;
margin: auto;
padding: 1em;
}
h1 {
text-align: center;
border-style: none !important;
padding-bottom: 0 !important;
}
h1, h2, h3, h4, p, ul {
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
}
c {
display: block;
text-align: center;
}
d {
float: right;
}
t {
}
@media print {
body {
font-size: 14px;
max-width: 1000px;
line-height: 1.4;
}
h1, h2, h3, h4, p, ul {
border-style: none !important;
margin-top: 0.25em !important;
margin-bottom: 0.25em !important;
}
hp {
display: none;
}
}
body {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;
color: #333;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
body a {
background-color: transparent;
}
body a:active,
body a:hover {
outline: 0;
}
body strong {
font-weight: bold;
}
body h1 {
font-size: 2em;
margin: 0.67em 0;
}
body img {
border: 0;
}
body hr {
box-sizing: content-box;
height: 0;
}
body pre {
overflow: auto;
}
body code,
body kbd,
body pre {
font-family: monospace, monospace;
font-size: 1em;
}
body input {
color: inherit;
font: inherit;
margin: 0;
}
body html input[disabled] {
cursor: default;
}
body input {
line-height: normal;
}
body input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
body table {
border-collapse: collapse;
border-spacing: 0;
}
body td,
body th {
padding: 0;
}
body * {
box-sizing: border-box;
}
body input {
font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}
body a {
color: #4078c0;
text-decoration: none;
}
body a:hover,
body a:active {
text-decoration: underline;
}
body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
body hr:before {
display: table;
content: "";
}
body hr:after {
display: table;
clear: both;
content: "";
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
body h1 {
font-size: 30px;
}
body h2 {
font-size: 21px;
}
body h3 {
font-size: 16px;
}
body h4 {
font-size: 14px;
}
body h5 {
font-size: 12px;
}
body h6 {
font-size: 11px;
}
body blockquote {
margin: 0;
}
body ul,
body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
body ol ol,
body ul ol {
list-style-type: lower-roman;
}
body ul ul ol,
body ul ol ol,
body ol ul ol,
body ol ol ol {
list-style-type: lower-alpha;
}
body dd {
margin-left: 0;
}
body code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
body .octicon {
font: normal normal normal 16px/1 octicons-anchor;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body .octicon-link:before {
content: '\f05c';
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
body a:not([href]) {
color: inherit;
text-decoration: none;
}
body .anchor {
position: absolute;
top: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px;
}
body .anchor:focus {
outline: none;
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
body h1 .octicon-link,
body h2 .octicon-link,
body h3 .octicon-link,
body h4 .octicon-link,
body h5 .octicon-link,
body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle;
}
body h1:hover .anchor,
body h2:hover .anchor,
body h3:hover .anchor,
body h4:hover .anchor,
body h5:hover .anchor,
body h6:hover .anchor {
padding-left: 8px;
margin-left: -30px;
text-decoration: none;
}
body h1:hover .anchor .octicon-link,
body h2:hover .anchor .octicon-link,
body h3:hover .anchor .octicon-link,
body h4:hover .anchor .octicon-link,
body h5:hover .anchor .octicon-link,
body h6:hover .anchor .octicon-link {
display: inline-block;
}
body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
body h1 .anchor {
line-height: 1;
}
body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
body h2 .anchor {
line-height: 1;
}
body h3 {
font-size: 1.5em;
line-height: 1.43;
}
body h3 .anchor {
line-height: 1.2;
}
body h4 {
font-size: 1.25em;
}
body h4 .anchor {
line-height: 1.2;
}
body h5 {
font-size: 1em;
}
body h5 .anchor {
line-height: 1.1;
}
body h6 {
font-size: 1em;
color: #777;
}
body h6 .anchor {
line-height: 1.1;
}
body p,
body blockquote,
body ul,
body ol,
body dl,
body table,
body pre {
margin-top: 0;
margin-bottom: 16px;
}
body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
body ul,
body ol {
padding-left: 2em;
}
body ul ul,
body ul ol,
body ol ol,
body ol ul {
margin-top: 0;
margin-bottom: 0;
}
body li>p {
margin-top: 16px;
}
body dl {
padding: 0;
}
body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
body blockquote>:first-child {
margin-top: 0;
}
body blockquote>:last-child {
margin-bottom: 0;
}
body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
body table th {
font-weight: bold;
}
body table th,
body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
body img {
max-width: 100%;
box-sizing: border-box;
}
body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
body code:before,
body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
body .highlight {
margin-bottom: 16px;
}
body .highlight pre,
body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
body pre {
word-wrap: normal;
}
body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
body pre code:before,
body pre code:after {
content: normal;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .pl-c {
color: #969896;
}
body .pl-c1,
body .pl-s .pl-v {
color: #0086b3;
}
body .pl-e,
body .pl-en {
color: #795da3;
}
body .pl-s .pl-s1,
body .pl-smi {
color: #333;
}
body .pl-ent {
color: #63a35c;
}
body .pl-k {
color: #a71d5d;
}
body .pl-pds,
body .pl-s,
body .pl-s .pl-pse .pl-s1,
body .pl-sr,
body .pl-sr .pl-cce,
body .pl-sr .pl-sra,
body .pl-sr .pl-sre {
color: #183691;
}
body .pl-v {
color: #ed6a43;
}
body .pl-id {
color: #b52a1d;
}
body .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
body .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
body .pl-ml {
color: #693a17;
}
body .pl-mh,
body .pl-mh .pl-en,
body .pl-ms {
color: #1d3e81;
font-weight: bold;
}
body .pl-mq {
color: #008080;
}
body .pl-mi {
color: #333;
font-style: italic;
}
body .pl-mb {
color: #333;
font-weight: bold;
}
body .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
body .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
body .pl-mdr {
color: #795da3;
font-weight: bold;
}
body .pl-mo {
color: #1d3e81;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .task-list-item {
list-style-type: none;
}
body .task-list-item+.task-list-item {
margin-top: 3px;
}
body .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
body :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment