0:00:23
what is going on guys welcome back to
0:00:25
another session of buildbreaking fix
0:00:33
oh okay right right
0:00:37
like how's the camera talking by itself
0:00:40
i'm still trying to fix it you you keep
0:00:43
yeah okay cool this is driver issue i
0:00:46
ran into so yeah uh all right
0:00:49
yeah that makes sense so but it's
0:00:53
on that yeah so just a bit of a
0:00:56
background guys um kartik is
0:00:59
facing a bit of a technical
0:01:01
difficulty with the camera so he's just
0:01:04
working on resolving that as soon as he
0:01:07
does that he'll be
0:01:10
back on the camera all right so
0:01:15
yeah um i'll do the acknowledgement and
0:01:18
then we can get started with the recap
0:01:21
and the today's plan all right so here
0:01:26
i begin today by acknowledging the
0:01:28
traditional custodians of the land on
0:01:30
which we gather today and pay my
0:01:32
respects to the elders past present and
0:01:35
future i extend their respect to
0:01:37
aboriginal and torres strait islander
0:01:43
fantastic that is all done um
0:01:48
just to give a bit of a recap yes today
0:01:54
fix their additional blank lines that's
0:02:08
cool yeah i actually want to know what
0:02:09
happened yesterday so yeah oh okay cool
0:02:15
yeah so we will manage to um connect to
0:02:21
we were actually working on was um
0:02:28
json requests from the client
0:02:35
so that it sends us the response so
0:02:41
thanks to gag dev who pointed out where
0:02:46
and um we applied the
0:02:49
way and then it seemed to be working
0:02:54
that being said um
0:02:57
it decided to give us an of a blank line
0:03:07
the response is coming from
0:03:10
lambda by is um giving out an an
0:03:13
additional black line
0:03:20
uh i'll just show it to you just bear
0:03:30
share my screen and then get my
0:03:36
actually i'll share my vs code
0:03:40
close my whatsapp and my emails
0:03:45
so that doesn't create distractions
0:03:49
all right um really i think
0:03:52
it has been resolved
0:04:00
hey look at that pretty face
0:04:04
oh also i forgot one more thing i'll be
0:04:09
you know what it is
0:04:10
yeah i know well what that is
0:04:22
uh we're gonna okay tori
0:04:27
code we're gonna open
0:04:30
and we're gonna show
0:04:33
show off the work to carticle or what we
0:04:36
have been able to do so far
0:05:00
okay and this should be it here we go
0:05:10
they should click right away
0:05:16
um so i'm just trying to get the url
0:05:21
websocket to show you exactly what i'm
0:05:26
when i say black line
0:05:32
so you know what i was trying to do i i
0:05:34
got a camera right
0:05:36
so i was trying to set up the like the
0:05:40
no not a gopro like an actual
0:05:46
yeah it's not working out
0:05:50
yeah i had this problem so when i do
0:05:53
my original webcam
0:05:55
like just messes up
0:05:57
all right i say i say
0:06:01
talking about the dslr i've got one as
0:06:04
well but i'm just yeah he told me
0:06:07
why don't you use that i don't know
0:06:12
to be honest i'm struggling on time at
0:06:20
that is one of the main reasons why
0:06:24
okay um so i'll just
0:06:26
see how i do this and it will connect
0:06:30
okay connection is
0:06:32
established but when i press action
0:06:41
default default then it should
0:06:44
send me a message from them
0:06:48
lambda which it does
0:06:51
oh okay that's just another thing all
0:06:54
right hang on a minute i need to do some
0:07:28
and now if i show you what really doing
0:07:34
you might be able to understand it now
0:07:50
keeping me in a really good practice
0:08:13
huh cool okay yeah i'll just show you
0:08:17
what i was talking about now
0:08:22
okay maybe it'll get triggered
0:08:26
so how's your weekend been though
0:08:28
bit much really good um what did i do
0:08:34
went on a ride on my board
0:08:38
i actually recently bought the camera
0:08:42
so i was trying to do some photography
0:08:44
and stuff let's turn my ah
0:08:56
what kind of pictures did you test it
0:09:00
i tried doing landscape near yara river
0:09:03
um then i went to docklands
0:09:09
yeah that must have been a really nice
0:09:13
take some oh yeah yeah sunset is very
0:09:22
that's really good man
0:09:25
yeah so the problem with my
0:09:27
camera is at the moment the shutter is
0:09:36
when i press the button for
0:09:39
taking the photo it says that i press
0:09:43
the shutter button again and then to
0:09:48
when i do that um it brings half of the
0:09:54
well i get what you mean see
0:09:56
it's basically like it's called like a
0:09:58
long exposure shot i think
0:10:02
but yeah you need to get it serviced i
0:10:05
yeah it's easily buildable
0:10:07
i say but i think there's some dust in
0:10:12
machine which is right right i say
0:10:15
yeah i tried to shoot you and google
0:10:17
desk stuff as well and i did what i
0:10:20
could but there was just one solution
0:10:23
which i didn't have the tools for
0:10:27
yeah so i was like okay that's not gonna
0:10:34
you can get your camera
0:10:35
um service for 20 30
0:10:39
yeah i'll probably do that
0:10:41
that'd be a good idea though
0:10:44
and it's not keeping the blank
0:10:47
line because this little
0:10:50
line he gave blank
0:10:55
why is he not doing that now
0:10:58
weird i'll also play some music
0:11:18
trying to think why is it doing this
0:11:20
actually and what i'm gonna go through i
0:11:22
mean you're getting the message but it's
0:11:24
giving you one more thing which is
0:11:27
throwing an error at the end
0:11:30
yes which i wasn't getting that before
0:11:35
tori says it is because you are getting
0:11:57
i'm not sure what mr littlefield means
0:12:00
but because this would definitely
0:12:02
prevent internal serve aaron
0:12:05
um tory says to check the last
0:12:16
okay where's the g-hub
0:12:21
oh that's actually
0:12:50
returned that's all we did and then we
0:12:53
were having an internal server error
0:13:00
is that the solution to the problem
0:13:04
let's have a look but
0:13:08
i think that might just get rid of the
0:13:14
internal server error
0:13:16
i want to check what's it coming over
0:13:22
yes then you are correct
0:13:24
tori says the commented out code
0:13:38
it just says the comment about code
0:13:42
and i think that's what he means line
0:13:57
now hopefully the blank line goes
0:14:02
hopefully the blank i mean not the blank
0:14:05
line the internal server error goes
0:14:09
yep and then we can show you
0:14:14
api as in the response of it
0:14:18
but just get rid of the blank line
0:14:24
essentially we're trying to do this i'll
0:14:26
just show it to you
0:14:30
we're trying to basically do this
0:14:43
says connected and
0:14:45
then we trigger uh send a key value pair
0:14:54
our lambda name here then it should
0:14:58
we should get this message from the
0:15:04
this one which we are
0:15:07
but then we're getting
0:15:10
another uh blank line over there anyway
0:15:14
let's see how we got
0:15:19
tori says it was an amazing
0:15:21
pr i even got harassed by gig there
0:15:35
to be honest i'm not entirely sure
0:15:41
malfunction lambda proxy response what
0:15:47
lambda is malfunctioned
0:15:51
this isn't making me laugh now
0:15:56
our land has been malfunctioned whoa
0:16:10
truthful resolution for you there are
0:16:15
reviewer recipient library with api
0:16:24
my chair body json stringify
0:16:28
how about if we just do this
0:16:38
and put that in the pot in here
0:16:50
i don't even know if it would work
0:17:14
now i would just go
0:17:18
because you can deploy
0:17:34
oops it's not gonna work no no it's not
0:18:07
is there a better way to run these
0:18:09
lambdas locally so you don't
0:18:12
redeploy every time not replace sorry
0:18:26
one in which we invoke
0:18:28
lambda locally but that would mean that
0:18:31
we would have to spin up a docker
0:18:33
container do everything on that one
0:18:39
as far as i can remember
0:19:13
so when is it coming up as it a hasty
0:19:17
quality camera for stream
0:19:19
oh it's actually 4k
0:19:21
i realized after both yeah oh nice
0:19:26
that's pretty good
0:19:30
now i can actually show you
0:19:34
this is the camera
0:19:36
i don't know if you can see me yeah yeah
0:19:40
ah it's not like a huge one or something
0:19:44
all right it's pretty it looks pretty
0:19:48
yes i bought the smallest one i could um
0:19:52
yeah so mirrorless
0:19:55
um yeah i'm gonna try sorting out the
0:19:57
live stream as well
0:19:59
remember how matt added quality yeah
0:20:03
i think it's gonna be close to that
0:20:12
so his picture was really clear though
0:20:16
crystal clay i would say
0:20:18
yeah so i think he was choosing a proper
0:20:23
yeah yeah i think he was using a
0:20:24
mirrorless sony one i'm not sure which
0:20:33
did you receive oh there you go
0:20:38
line we were talking about that
0:20:41
we're trying to get rid of
0:20:47
i was gonna say far out but then i
0:20:49
realized i'm talking to you
0:20:57
tori says that they
0:20:59
you recommended isn't that faster
0:21:05
yeah but i can't be us
0:21:07
setting up the docker container and then
0:21:11
going through that
0:21:14
yeah i'm just trying my best too
0:21:19
sorry about the noise
0:21:26
can you hear from your balcony yeah
0:21:36
i'm just thinking how can we get rid of
0:21:48
you can get rid of this part here
0:22:00
my balcony that's taking all my focus
0:22:08
i'm thinking that he's coming in here
0:22:14
going in this method
0:22:21
and with this endpoint which is fine
0:22:28
credit card function and passing in the
0:22:31
and then he's just putting in a way to
0:22:33
uh post to connection
0:22:39
and then what's happening here
0:22:45
oh sorry about that
0:22:59
gas hockey context event
0:23:07
this as in is returning the connection
0:23:10
id and point and the send
0:23:12
thing here as well
0:23:18
what it's doing is simply
0:23:27
that one as a function
0:23:32
to send out this message
0:23:36
is just strongly fine yet
0:23:41
but then why is this sending a blank
0:23:48
let me check the cloud watch logs
0:24:04
46 no this can't be the one
0:24:19
okay that can basically get i can get
0:24:29
yeah that's the only one there
0:24:35
okay hang on let's
0:24:49
yeah it sounds like
0:24:51
they're going to purge all the bad
0:24:57
that's why you're still screaming to me
0:25:02
did you get a haircut today then
0:25:05
no i i just calmed
0:25:08
had a shower and then calmed oh that
0:25:34
what's happening here
0:25:53
oh oh this should be a promise
0:26:12
yeah i must be wrong
0:26:42
in the send and then send calls
0:26:46
actually i'm gonna call the log this i'm
0:26:48
very curious about it
0:27:05
all right let's see what we get this
0:27:09
because i want to see
0:27:12
what is being saved in
0:27:22
dory asks what are we exactly doing now
0:27:28
what we are doing is we're trying to get
0:27:32
received blank line
0:27:38
give me one second i ordered food so
0:27:40
i'll just go get it is that okay
0:28:36
all right so this is being
0:28:39
done hopefully this would give us a bit
0:28:42
of a context as to what's going on
0:28:45
then we can have a look from there
0:28:59
okay now we can go to cloud watch
0:29:04
and see what exactly happened
0:29:09
what is this one 25
0:29:12
now i need to get rid of this one
0:29:26
delete this long group okay
0:29:30
well why is that not been triggered now
0:29:49
i'm trying to get the console out
0:30:18
um why is he not going there
0:30:55
what could be the reason why is not
0:31:32
okay so this is being printed but
0:31:40
it gets the socket context and
0:31:47
and then passes it in the send
0:31:51
send data any promise
0:31:58
and then we do it however if we don't do
0:32:34
what did i tell you about eating food on
0:32:38
what did you tell me tori
0:32:40
i'm not eating yet oh that those are
0:32:44
i think you have a problem with chips
0:32:48
also i can't help my mic is like really
0:32:52
it's almost like a asmr
0:32:58
where did we make any progress
0:33:11
you seem very losing
0:33:17
are you not happy with it
0:33:19
just trying to focus hang on this
0:33:42
okay there we go so it's just deploying
0:34:03
right so let's try
0:34:06
that did the trick
0:34:25
fine didn't even do that
0:34:29
right there so i should be awake
0:34:33
what was i thinking
0:34:36
what do you mean like a weight fair
0:34:40
i remember the whole thing of it in a
0:34:44
is it inside a function
0:34:49
basically i was calling something that
0:34:55
without the weight
0:34:57
so obviously it will crash
0:34:59
yeah yeah it makes sense that's why i
0:35:01
wasn't receiving anything it says
0:35:04
but it wasn't actually received
0:35:14
the whole function remember um
0:35:19
yeah but that's not the problem
0:35:26
what i did was i was
0:35:34
waiting the method then needed to be
0:35:39
it was totally as in giving us an
0:35:41
internal server error right
0:35:53
do you know where we
0:35:58
okay and see what with the problem
0:36:02
what's the error like i can try googling
0:36:14
not feeling an error but kind of
0:36:17
logical thing so it's
0:36:25
when it shouldn't be giving that
0:36:28
okay um during web sorting socket
0:36:36
websocket triggers the lambda
0:36:38
and then lambda sends a response
0:36:42
okay make sense i'll try having you
0:37:05
is actually just having a data
0:37:23
do i do we need to end it somewhere
0:37:49
do you try looking at cloud watch too
0:38:02
oh it's not giving anything
0:38:13
from handshakes and the known intervals
0:38:24
tutorial saying that i'll get my
0:38:28
while typing anything but
0:38:30
so i got this specific keyboard
0:38:33
which is oil proof basically
0:38:36
so it's on the top of my keyboard and
0:38:38
protects it from oil
0:38:59
this is all done by a
0:39:06
this header is used to specify
0:39:09
sub-control of the
0:39:11
client used to know
0:39:15
that's not what we're looking for
0:39:24
did you read the news on
0:39:26
they're gonna do work from home again
0:39:40
are you happy or you don't like it
0:39:43
i'm happy i mean i like you working
0:39:49
right about yourself
0:39:52
i have never been into the offices
0:39:56
definitely going to experience it
0:40:05
yeah you might observe that working from
0:40:07
home is a lot productive
0:40:10
than being in office but in the office
0:40:13
you get the as an impersonal
0:40:17
colleague friendship and personal touch
0:40:30
since there was an error in it was
0:40:34
i know a guy last week spilled coffee
0:40:36
all over his laptop keyboard
0:40:38
will be before the interview ouch
0:40:42
also no there is no keyboard protector
0:40:44
which protects it from coffee
0:41:23
it's not the one websocket push from
0:41:31
five reasons you should because it has
0:41:36
okay and let's check this one out
0:41:40
you think it's some sort of timeout
0:41:42
which is happening and that's why it's
0:41:50
you mean the land is timing out
0:41:54
yeah like probably that or any sort of
0:41:56
timeout in general
0:42:00
i think if that was happening you would
0:42:03
given that in the logs at least
0:42:06
that's nice oh yeah that's
0:42:09
even happening so far
0:42:13
just trying to think what could be what
0:42:19
uh let me check something
0:42:27
no not this one my default js
0:42:33
where's my default lambda yeah there we
0:42:38
that is me or d for lambda
0:42:49
ah and you didn't go to api gateway
0:42:52
why am i doing that
0:43:01
reselection number
0:43:04
integrate yeah that's all
0:43:30
should be in this way
0:43:33
in the way that we're already receiving
0:43:40
what do you mean like
0:43:44
oh like it has to be this way
0:43:47
i don't know i'm just guessing
0:43:52
because i'm not even returning it twice
0:44:09
return connection id
0:44:12
and that that gets saved
0:44:18
actually what i'm gonna do is
0:45:13
instantiating the predicate way and then
0:45:16
simply doing an sync function
0:45:20
with the sync data
0:45:24
and then it's awaiting the personal
0:45:57
overflow with this whole situation
0:46:03
so would it be that it's supposed to do
0:46:07
because it's my first time working with
0:46:09
websockets i'm not entirely sure if this
0:46:12
is the normal behavior or not
0:46:15
see like what do you have done inside
0:46:20
that's pretty much the same like
0:46:22
i can send you a link and listen that's
0:46:23
actually how people have done it
0:46:26
um there was a youtube video which was
0:46:31
30 minutes long doing something similar
0:46:39
um torias what about the vs ws cat
0:46:49
gives us two actually lines
0:47:12
but it should only be one
0:47:20
so just printing out this one and then
0:47:26
the thing that i'm not understanding
0:47:29
that it doesn't do anything off to this
0:47:32
but it still gives up
0:47:40
or do i just do basically exit
0:47:47
does that work but i don't need to
0:47:48
that's an action like
0:48:49
do not be using the work running that
0:48:55
invoke a second no that's not what we're
0:49:09
yes see you we're right
0:49:15
okay what i'm gonna probably do is i'm
0:49:19
face any more time on this
0:49:22
yeah okay it's just the
0:49:24
kind of the behavior that i was supposed
0:49:28
so i'm just gonna move forward
0:49:39
what we need to basically do
0:49:47
insert the connection id in dynamodb
0:49:53
for that one i think we already have
0:50:03
table that i created
0:50:08
connections table here we go
0:50:11
yep that's all that already is done
0:50:14
which is good you don't need to do that
0:50:19
going back to cloud formation
0:50:31
so this is here which is all right
0:50:38
so what we basically need to do is we
0:51:02
okay i'm gonna get some help from google
0:51:06
um was a part of a video
0:51:10
just now and looks like they didn't get
0:51:18
um the video tori watched
0:51:24
dory oh yeah go ahead sorry
0:51:29
i was asking for him the link
0:51:37
okay cool we probably have to go back
0:51:41
because apparently that there's
0:51:43
something that we're missing
0:51:45
you didn't actually shoot or like is it
0:51:47
gonna stop us from
0:51:49
running it successfully
0:51:51
to be honest i'm not entirely sure how
0:51:53
will it affect us all really human
0:51:56
factors because this is my first time
0:52:02
um get gekko might
0:52:04
be able to give us a bit of input here
0:52:09
or tory yeah because they both have
0:52:12
apparently worked with websockets before
0:52:28
literally the same video i'm talking
0:52:33
um yeah i was looking at this video as
0:52:35
well the guy who built a
0:52:37
like a chat using lambda
0:52:42
i think there was a blog the aws blog on
0:52:45
that one as well isn't it
0:52:49
i'm not sure but i'm looking at a
0:53:10
oh here we go i found it
0:53:27
okay then yeah i probably in i probably
0:53:34
but i think the concept is same like
0:53:41
so here's the name express oh he's done
0:53:43
in express index.js
0:53:49
so static that's fine
0:53:55
handling sockeye on the server ah he's
0:53:58
done it with sakyo
0:54:06
now i'm gonna need your one
0:54:09
yeah i sent you on private oh sorry my
0:54:12
bad yeah that's all good
0:54:19
okay let's see where
0:54:34
be able to hear it
0:54:36
yeah i can hear you um no the video oh
0:54:41
you can have a look it's fine i'm
0:54:43
looking at mine as well so
0:54:45
are you i can't hear your audio so it's
0:54:52
talking because of the
0:54:54
viewers oh right here
0:55:00
public messages which will be delivered
0:55:03
i can hear private messages which will
0:55:05
only be delivered hey
0:55:11
to the recipient that they were clicking
0:55:14
on client disconnects for the function
0:55:16
too and to use we don't keep from there
0:55:19
so let's add the custom routes
0:55:21
with the public this isn't trying to
0:55:25
which integration type you want to use
0:55:31
that's with https and this is the url
0:55:34
that we're going to make requests to
0:55:36
when we want to send a message to our
0:55:39
so each time a client connects to our
0:55:41
websocket url we'll get a connection id
0:55:44
for this client and when we'll post to
0:55:46
this connection url with the connection
0:55:48
id is an argument then our client will
0:55:50
receive a message from our socket so
0:55:53
again a client connects first to the
0:55:55
websocket url and we get a connection id
0:55:57
in our lambda function and then using
0:56:00
this connection id we send a post
0:56:02
request to this connection url and we
0:56:04
pass the connection id and then the data
0:56:06
we send to this connection url along
0:56:08
with the connection id will be received
0:56:10
in the socket in real time by our client
0:56:13
that connected to this web socket and
0:56:15
let's say we want to send a message to
0:56:17
all of our clients then we'll just make
0:56:19
a lot of requests to the connection url
0:56:22
with all the connection ids and pass
0:56:24
them all the information that we want to
0:56:25
pass to them so now let's switch to our
0:56:27
lambda function and start writing the
0:56:29
code for our socket
0:56:31
the lambda function the event object
0:56:33
will contain attributes that we'll need
0:56:35
to extract because they'll contain
0:56:36
useful information about the request so
0:56:39
first of all we'll have a request
0:56:42
from this request context we can extract
0:56:44
the connection id this will be unique
0:56:46
for every client that connects to our
0:56:48
socket we're going to keep this
0:56:49
connection id because we're going to use
0:56:51
this id to send messages back to the
0:56:53
client another important attribute is
0:56:55
the route key the route key will contain
0:56:57
one of the routes that we defined
0:56:59
earlier such as connect set name or send
0:57:02
public or some private let's set a
0:57:04
switch statement that will check the
0:57:06
route key value it will act as sort of a
0:57:08
router for our function we have six
0:57:10
routes so let's copy and paste it six
0:57:14
our routes are going to be
0:57:20
the default route will be a catch all
0:57:22
for all the actions that we didn't
0:57:26
set name which the client will use to
0:57:29
there's pin that is supposed to get the
0:57:31
body will be in json format so we'll
0:57:33
create a body object which will be empty
0:57:36
and then we'll try to parse the event
0:57:38
body so we'll always expect the event
0:57:40
body to be a string which contains a
0:57:42
stringified json so now that we're
0:57:44
handling the events that come from the
0:57:47
clients let's see how we can send data
0:57:49
the other way from our lambda function
0:57:51
to the client for example let's say in
0:57:54
the send public route we want to send a
0:57:56
public message to all of the connected
0:57:58
users so we'll need a function that will
0:58:00
accept two arguments one will be the
0:58:03
array of all the users that we want to
0:58:05
send a message to and the second one
0:58:07
will be the body of the message then if
0:58:09
you want to send a private message it
0:58:11
should be sent only to one user not to
0:58:13
all the users so we'll change the
0:58:15
function to send to one
0:58:17
first argument will be a string which
0:58:19
will be the connection id of the
0:58:20
specific user that we want to send this
0:58:22
message to and then the second argument
0:58:24
will be an object that will contain the
0:58:26
contents of this message so in case
0:58:28
we're sending a message to everyone
0:58:30
we'll use the public message attribute
0:58:32
and if we're sending a private message
0:58:34
we'll use the private message attribute
0:58:35
so now let's see how these sent to all
0:58:37
and sent to one functions will look like
0:58:39
so let's define them at the beginning of
0:58:41
our file the center one function will
0:58:43
have two arguments first the connection
0:58:45
id that we want to send the message to
0:58:47
and then the body of the message
0:58:49
in case of send to all we'll also have
0:58:51
the body of the message the first
0:58:52
argument will be an array of all the
0:58:54
connection ids that we want to send the
0:58:56
messages to we also need to go back to
0:58:58
api gateway and copy the connection url
0:59:01
that we're going to use to send messages
0:59:06
so in the send to one function we need
0:59:09
to take this endpoint and send it a
0:59:11
request to send the message to a
0:59:13
specific connection id we're going to do
0:59:16
that using the aws sdk
0:59:19
so let's initiate the client that we're
0:59:21
going to use to connect to the aws sdk
0:59:24
and we're going to use the api gateway
0:59:26
and management api the only argument it
0:59:28
receives is the endpoint that we got
0:59:30
from the api gateway which is the
0:59:34
and then to send the message we're going
0:59:36
to wrap it and try catch statements and
0:59:39
then within the statement we will call
0:59:41
the post to connection function of the
0:59:43
api gateway management api and it
0:59:46
accepts two arguments first the
0:59:47
connection id that we're passing to this
0:59:49
function again this is the connection id
0:59:51
of the user that we want to send the
0:59:53
message to and then data which will be a
0:59:56
buffer of a stringified object that we
0:59:58
pass to the function as well so each
1:00:00
time we want to push some data to a
1:00:03
client that is currently connected to
1:00:05
our sockets we'll need this client's
1:00:08
and then the body that we're going to uh
1:00:10
push to this client then we'll also have
1:00:12
an option to send a message to several
1:00:15
users not just one so in this case we
1:00:17
have an array of ids and a body so what
1:00:20
we're going to do in the send to all
1:00:22
function we're just going to iterate
1:00:24
over the array of the ids
1:00:35
i think i know where i went wrong i
1:00:39
must have been using the
1:00:45
url so instead of a connection i was
1:00:53
that url must need to change yeah
1:01:02
cool we can come back to it tomorrow i
1:01:13
you seem very tired
1:01:24
um yeah cool thanks guys thanks for
1:01:28
i think we had fun um okay um jen's
1:01:31
doing all the hard work so that's pretty
1:01:35
and i think he's pretty close at
1:01:39
yeah won't be too looking good
1:01:42
yeah won't be too long
1:01:44
so let's come back tomorrow and tori
1:01:47
and uh yeah i'll see you guys i'll see
1:01:50
you guys in winston
1:01:56
so join us tomorrow same time same place
1:02:03
thanks guys have a good night